
    g<                    n   d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d d	l
mZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ er6d dlmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dlm,Z,  G d de      Z-y)    )annotations)chain)TYPE_CHECKING)Any)Iterable)Literal)Sequence)add_row_index)parse_exprs_and_named_exprs)native_to_narwhals_dtype)select_columns_by_name)ColumnNotFoundError)CompliantLazyFrame)Implementation)flatten)generate_temporary_column_name)parse_columns_to_drop)parse_version)validate_backend_version)
ModuleTypeN)Self)DaskExprDaskLazyGroupByDaskNamespace)IntoDaskExpr)DType)Versionc                     e Zd Z	 	 	 	 	 	 	 	 d"dZd#dZd$dZd%dZd&dZd'dZd(dZ	d)dZ
ed*d	       Zd+d
Z	 	 	 	 	 	 	 	 d,dZd-dZed.d       Zd.dZd/dZd0dZd1dZd2dZdd	 	 	 	 	 	 	 d3dZ	 	 	 	 	 	 	 	 	 	 	 	 d4dZdd	 	 	 	 	 	 	 	 	 	 	 	 	 d5dZdddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6dZd7dZd2dZd8d Z	 	 	 	 	 	 	 	 	 	 	 	 d9d!Zy):DaskLazyFramec                   || _         || _        t        j                  | _        || _        t        | j                  | j                         y N)_native_frame_backend_versionr   DASK_implementation_versionr   )selfnative_dataframebackend_versionversions       M/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_dask/dataframe.py__init__zDaskLazyFrame.__init__&   s?     . /-22 !5!5t7L7LM    c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected dask, got: )r'   r   r&   to_native_namespacetypeAssertionError)r)   msgs     r-   __native_namespace__z"DaskLazyFrame.__native_namespace__3   sN    >#6#66'';;==$T$*>*>%?$@AS!!r/   c                J    ddl m}  || j                  | j                        S )Nr   r   r+   r,   )narwhals._dask.namespacer   r%   r(   )r)   r   s     r-   __narwhals_namespace__z$DaskLazyFrame.__narwhals_namespace__:   s    :T-B-BDMMZZr/   c                    | S r#    r)   s    r-   __narwhals_lazyframe__z$DaskLazyFrame.__narwhals_lazyframe__?   s    r/   c                R    | j                  | j                  | j                  |      S Nr7   )	__class__r$   r%   )r)   r,   s     r-   _change_versionzDaskLazyFrame._change_versionB   s+    ~~0E0Ew  
 	
r/   c                R    | j                  || j                  | j                        S r?   )r@   r%   r(   )r)   dfs     r-   _from_native_framez DaskLazyFrame._from_native_frameG   s)    ~~ 5 5t}}  
 	
r/   c                ~    | j                   }t        | g|i |} |j                  di |}| j                  |      S )Nr;   )r$   r   assignrD   )r)   exprsnamed_exprsrC   
new_seriess        r-   with_columnszDaskLazyFrame.with_columnsL   sE    0MMM
RYY$$&&r**r/   c                    dd l }ddlm} | j                  j	                         } ||t
        j                  t        |j                        | j                        S )Nr   )PandasLikeDataFrame)implementationr+   r,   )
pandasnarwhals._pandas_like.dataframerL   r$   computer   PANDASr   __version__r(   )r)   pdrL   results       r-   collectzDaskLazyFrame.collectR   sH    G##++-")00)"..9MM	
 	
r/   c                J    | j                   j                  j                         S r#   )r$   columnstolistr<   s    r-   rW   zDaskLazyFrame.columns_   s    !!))0022r/   c                    | j                          j                  t        |fd|j                         D               }|j	                  |       d   }| j                  | j                  j                  |         S )Nc              3  L   K   | ]  \  }}j                  |      |k(    y wr#   )col).0namevplxs      r-   	<genexpr>z'DaskLazyFrame.filter.<locals>.<genexpr>f   s%     VBUwtQ 2BUs   !$r   )r9   all_horizontalr   items_callrD   r$   loc)r)   
predicatesconstraintsexprmaskr_   s        @r-   filterzDaskLazyFrame.filterc   ss    ))+!s!!:V+BSBSBUVW
 zz$"&&t'9'9'='=d'CDDr/   c           	     t   dd l m} |rXt        d |D              rF|sD| j                  t	        | j
                  t        |      | j                  | j                              S t        | g|i |}|sIdd l
}| j                   |j                  |j                         | j
                  j                              S t        d |D              rt        d |j                         D              rc |j                  |j!                         D cg c]$  \  }}|j#                         j%                  |      & c}}d      }| j                  |      S t	         | j
                  j&                  di |t        |j)                               | j                  | j                        }| j                  |      S c c}}w )	Nr   c              3  <   K   | ]  }t        |t                y wr#   )
isinstancestr)r\   xs     r-   r`   z'DaskLazyFrame.select.<locals>.<genexpr>s   s     ;UAs+Us   )npartitionsc              3  6   K   | ]  }t        |d d        yw_returns_scalarFNgetattr)r\   rg   s     r-   r`   z'DaskLazyFrame.select.<locals>.<genexpr>   s     I54wt.65   c              3  6   K   | ]  }t        |d d        ywrq   rs   )r\   vals     r-   r`   z'DaskLazyFrame.select.<locals>.<genexpr>   s       R
>RsGC*E2>Rru      )axisr;   )dask.dataframe	dataframeallrD   r   r$   listr%   r'   r   rN   from_pandas	DataFramero   valuesconcatrb   	to_seriesrenamerF   keys)	r)   rG   rH   ddrI   rS   r]   rw   rC   s	            r-   selectzDaskLazyFrame.selectl   s   
 	$S;U;;K**&&&K))((	  1MMM
**r||~4;M;M;Y;YZ  I5IIc R
>I>P>P>RR
 O
 ?I?O?O?QR?Q)$''-?QRYZB **2..#%D%%3
3"#!!  	
 &&r** Ss   )F4
c                   |)| j                  | j                  j                               S t        |t              r|gn|}| j                         }| j                  |j                   |j                  | j                                      S r#   )
rD   r$   dropnarl   rm   r9   ri   any_horizontalr[   is_null)r)   subsetr_   s      r-   
drop_nullszDaskLazyFrame.drop_nulls   sx    >**4+=+=+D+D+FGG'4&&))+{{C..wsww/?/G/G/IJJKKr/   c           	         | j                   j                  D ci c]1  }|t        | j                   |   | j                  | j                        3 c}S c c}w r#   )r$   rW   r   r(   r'   )r)   r[   s     r-   schemazDaskLazyFrame.schema   sb     ))11	
 2 )""3'8L8L  2	
 	
 
s   6Ac                    | j                   S r#   )r   r<   s    r-   collect_schemazDaskLazyFrame.collect_schema   s    {{r/   c                t    t        | ||      }| j                  | j                  j                  |            S )N)compliant_framerW   strictrW   )r   rD   r$   drop)r)   rW   r   to_drops       r-   r   zDaskLazyFrame.drop   s:    ' '&
 &&t'9'9'>'>w'>'OPPr/   c                x    | j                  t        | j                  || j                  | j                              S r#   )rD   r
   r$   r%   r'   )r)   r]   s     r-   with_row_indexzDaskLazyFrame.with_row_index   s:     &&""D$*?*?AUAU
 	
r/   c                X    | j                  | j                  j                  |            S )Nr   )rD   r$   r   )r)   mappings     r-   r   zDaskLazyFrame.rename   s'    &&t'9'9'@'@'@'QRRr/   c                \    | j                  | j                  j                  |dd            S )NF)nrP   ro   )rD   r$   head)r)   r   s     r-   r   zDaskLazyFrame.head   s0    &&##aB#G
 	
r/   any)keepc                   |1t         fd|D              rd| d j                   }t        |       j                  }|dk(  r|xs  j                  }t	        d|      }|j                  |      j                         j                  |      }||dk(     }|j                         j                  |      }|j                  ||d	
      }n'ddij                  ||      }	|j                  ||	      } j                  |      S )Nc              3  :   K   | ]  }|j                   v  y wr#   r   )r\   rn   r)   s     r-   r`   z'DaskLazyFrame.unique.<locals>.<genexpr>   s     %LVat||&;Vs   z
Column(s) z not found in none   n_bytesrW   rx   r   inner)onhowr   first)r   r   )r   rW   r   r$   r   groupbysizer   reset_indexr   mergegetdrop_duplicatesrD   )
r)   r   r   r4   native_frametokenseruniquerT   mapped_keeps
   `         r-   r   zDaskLazyFrame.unique   s    #%LV%L"LvhnT\\NCC%c**))6>+t||F21fME&&v.335<<UCCcQh-C__&++E+:F!''6w'GF '*..tT:K!11k1RF&&v..r/   c                   t        g t        |g      |      }| j                  }t        |t              r| }n|D cg c]  }|  }}|rdnd}	| j	                  |j                  |||	            S c c}w )Nlastr   )	ascendingna_position)r   r$   rl   boolrD   sort_values)
r)   by
descending
nulls_lastmore_by	flat_keysrC   r   dr   s
             r-   sortzDaskLazyFrame.sort   s     6grdm6g67	j$'/9>I(23
1Q
I3 *f&&NN9	{NS
 	
 4s   
A3r   )r   c          
     H   t        |t              r|g}t        |t              r|g}|dk(  rt        dg | j                  |j                        }| j	                   | j
                  j                  di |dij                   |j
                  j                  di |did||d|f      j                  |            S |d	k(  rt        dg | j                  |j                        }|d
}t        |      t        |j
                  || j                  | j                        j                  t        t        ||                  j!                         }	| j
                  j                  |	d|||      }
| j	                  |
|
|   dk(     j                  |g            S |dk(  r|d}t        |      t        |j
                  || j                  | j                        j                  t        t        ||                  j!                         }	| j	                  | j
                  j                  |	d||            S |dk(  r|j
                  }	| j
                  j                  |	d||d|f      }g }t        ||      D ]D  \  }}||k7  r || j                  vr|j#                  |       +||k7  s1|j#                  | d       F | j	                  |j                  |            S | j	                  | j
                  j                  |j
                  |||d|f            S )Ncrossr   r   r   r    )r   left_onright_onsuffixesr   antiz(`right_on` cannot be `None` in anti-joinouter)r   	indicatorr   r   	left_onlysemiz(`right_on` cannot be `None` in semi-join)r   r   r   left_right)r   r   r   r   r;   )rl   rm   r   rW   rD   r$   rF   r   r   	TypeErrorr   r%   r'   r   dictzipr   append)r)   otherr   r   r   suffix	key_tokenindicator_tokenr4   other_nativerC   result_nativeextraleft_key	right_keys                  r-   joinzDaskLazyFrame.join   sr    gs#iGh$ zH'>6#BT\\#BEMM#BI **)""));YN;.E''..@)Q@%& &\   i(
 
 &=<#BT\\#BEMM#BO @n$&''))((	  Xw!78   !"  ##)))  * B **2o&+56;;_DU;V  &=@n$&''))((	  Xw!78   !"  **""(( #$	 )   &= ..L ..44!f 5 M E'*7H'=#)(Ydll-JLL+(*LLI;f!56	 (>
 **=+=+=e+=+LMM&&$$##!f % 
 	
r/   Nbackward)r   r   r   by_leftby_rightr   strategyc                   | j                         }	| j                  |	j                  | j                  |j                  |||||||d
            S )N)r   r   )r   r   r   left_byright_byr   	directionr   )r5   rD   
merge_asofr$   )
r)   r   r   r   r   r   r   r   r   r_   s
             r-   	join_asofzDaskLazyFrame.join_asof\  s`     '')&&NN""##!!"'  
 	
r/   c               6    ddl m}  || t        |      |      S )Nr   r   )drop_null_keys)narwhals._dask.group_byr   r}   )r)   r   r   r   s       r-   group_byzDaskLazyFrame.group_byx  s    ;tT"XnMMr/   c                    | j                   }|j                  }|dk(  r,| j                  | j                   j                  |d            S d}t	        |      )Nrx   F)r   rP   zL`LazyFrame.tail` is not supported for Dask backend with multiple partitions.)r$   ro   rD   tailNotImplementedError)r)   r   r   n_partitionsr4   s        r-   r   zDaskLazyFrame.tail}  sX    ))#//1**4+=+=+B+BQPU+B+VWW`C%c**r/   c                   t        d| j                        }| j                         }| j                  |      j	                  |j                  |      |k\  |j                  |      |z
  |z  dk(        j                  |gd      S )Nr   r   )r]   r   F)r   )r   rW   r9   r   ri   r[   r   )r)   r   offsetrow_index_tokenplns        r-   gather_everyzDaskLazyFrame.gather_every  s    8DLLY))+_5V(F2)F2a71< T?#ET2	
r/   c                    | j                  | j                  j                  ||||nd||            S d            S )Nvariablevalue)id_vars
value_varsvar_name
value_name)rD   r$   melt)r)   r   indexvariable_namer   s        r-   unpivotzDaskLazyFrame.unpivot  sc     &&##*7*C)3)?:	 $ 
 	

 FM	 $ 
 	
r/   )r*   zdd.DataFramer+   ztuple[int, ...]r,   r   returnNone)r)   r   r   r   )r   r   )r   r   )r,   r   r   r   )rC   r   r   r   )rG   r   rH   r   r   r   )r   r   )r   	list[str])re   r   rf   r   r   r   )r)   r   rG   r   rH   r   r   r   )r)   r   r   str | list[str] | Noner   r   )r   zdict[str, DType])r)   r   rW   r  r   r   r   r   )r)   r   r]   rm   r   r   )r)   r   r   zdict[str, str]r   r   )r)   r   r   intr   r   )r)   r   r   zlist[str] | Noner   zLiteral['any', 'none']r   r   )r)   r   r   zstr | Iterable[str]r   rm   r   zbool | Sequence[bool]r   r   r   r   )r)   r   r   r   r   z:Literal['left', 'inner', 'outer', 'cross', 'anti', 'semi']r   r  r   r  r   rm   r   r   )r   r   r   
str | Noner   r  r   r  r   r  r   r  r   r  r   z)Literal['backward', 'forward', 'nearest']r   r   )r   rm   r   r   r   r   )r)   r   r   r  r   r  r   r   )r)   r   r   r  r   r  r   r  r   r  r   r   )__name__
__module____qualname__r.   r5   r9   r=   rA   rD   rJ   rU   propertyrW   ri   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   r/   r-   r!   r!   %   sS   N&N )	N
 N 
N"[




+
 3 3E*+*+*+ $*+ 
	*+XL 
 
Q
S
 (-	// / %	/
 
/,


 
 *	

 
 

, KR	o
o
o
 H	o

 (o
 )o
 o
 
o
j ##*.+/%)>H

 	

 
 
 (
 )
 #
 <
 

8N
+



"
 &
 "	

 
 

r/   r!   ).
__future__r   	itertoolsr   typingr   r   r   r   r	   narwhals._dask.utilsr
   r   narwhals._pandas_like.utilsr   r   narwhals.exceptionsr   narwhals.typingr   narwhals.utilsr   r   r   r   r   r   typesr   rz   r{   r   typing_extensionsr   narwhals._dask.exprr   r   r   r8   r   narwhals._dask.typingr   narwhals.dtypesr   r   r!   r;   r/   r-   <module>r     sk    "        . < @ > 3 . ) " 9 0 ( 3 &,762%&|
& |
r/   