
    hhl                       d dl mZ d dlZd dlmZmZmZmZmZ d dl	Z
d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$ erOd dl%m&Z& d dl'm(c m)Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dlmZm6Z6 d dlm7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@  G d ded         ed                   ZAdS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)DepthTrackingExprLazyExprDaskExprDateTimeNamespaceDaskExprStringNamespace)add_row_indexalign_series_full_broadcastmaybe_evaluate_exprnarwhals_to_native_dtype)ExprKind!evaluate_output_names_and_aliases)"window_kwargs_to_pandas_equivalent)get_dtype_backendnative_to_narwhals_dtype)Implementationgenerate_temporary_column_namenot_implementedInvalidOperationError)Sequence)Self)
AliasNames	EvalNames
EvalSeriesScalarKwargs)DaskLazyFrameDaskNamespace)r   ExprMetadata)Version_LimitedContext)FillNullStrategy	IntoDTypeModeKeepStrategyNonNestedLiteralNumericLiteralRollingInterpolationMethodTemporalLiteralc                     e Zd ZU ej        Zded<   ddddZddZddZ	ddZ
ed d!dd'            Zedd)            Z	 	 ddd.Zdd0Zd1d2dd9Zdd;Zdd=Zdd>Zdd?Zdd@ZddAZddBZddCZddDZddFZddGZddHZddIZddJZddKZddLZ ddMZ!ddNZ"ddOZ#ddPZ$ddQZ%ddRZ&ddSZ'ddTZ(ddUZ)ddVZ*ddWZ+ddYZ,ddZZ-dd[Z.dd\Z/dd^Z0dd_Z1dd`Z2ddaZ3ddbZ4ddcZ5ddgZ6ddhZ7ddiZ8ddjZ9ddkZ:ddlZ;ddnZ<ddoZ=ddpZ>ddqZ?ddrZ@ddsZAddtZBdduZCddxZDdd~ZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXeYdd            ZZeYdd            Z[ e\            Z] e\            Z^ e\            Z_ e\            Z`ded<    e\            Zaded<   dS )DaskExprr   _implementationNscalar_kwargscall$EvalSeries[DaskLazyFrame, dx.Series]depthintfunction_namestrevaluate_output_namesEvalNames[DaskLazyFrame]alias_output_namesAliasNames | Noneversionr'   r4   ScalarKwargs | NonereturnNonec               z    || _         || _        || _        || _        || _        || _        |pi | _        d | _        d S N)_call_depth_function_name_evaluate_output_names_alias_output_names_version_scalar_kwargs	_metadata)selfr5   r7   r9   r;   r=   r?   r4   s           J/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_dask/expr.py__init__zDaskExpr.__init__7   sI     
+&;##5 +1r.2    dfr#   Sequence[dx.Series]c                ,    |                      |          S rD   )rE   )rM   rQ   s     rN   __call__zDaskExpr.__call__K   s    zz"~~rP   r%   c                0    ddl m}  || j                  S )Nr   r$   )r?   )narwhals._dask.namespacer%   rJ   )rM   r%   s     rN   __narwhals_namespace__zDaskExpr.__narwhals_namespace__N   s)    ::::::}T]3333rP   kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r   c           	          d fd}                      | j         j         j         j         j         j                  S )NrQ   r#   rA   list[dx.Series]c                .    d  |           D             S )Nc                4    g | ]}|j         d          d          S )r   )loc).0results     rN   
<listcomp>z4DaskExpr.broadcast.<locals>.func.<locals>.<listcomp>W   s#    <<<FJqM!$<<<rP    )rQ   rM   s    rN   funcz DaskExpr.broadcast.<locals>.funcT   s!     =<4488<<<<rP   r7   r9   r;   r=   r?   r4   rQ   r#   rA   r[   )	__class__rF   rG   rH   rI   rJ   rK   )rM   rX   rc   s   `  rN   	broadcastzDaskExpr.broadcastS   sc    	= 	= 	= 	= 	= 	=
 ~~+-"&"=#7M-  
 
 	
rP    )r9   cls
type[Self]evaluate_column_namescontextr(   c              <    dfd} | |d|d |j                   S )	NrQ   r#   rA   r[   c                     	  fd            D             S # t           $ r)}                                           x}r|| d }~ww xY w)Nc                *    g | ]}j         |         S rb   )_native_frame)r_   column_namerQ   s     rN   ra   z<DaskExpr.from_column_names.<locals>.func.<locals>.<listcomp>n   s1       # $[1  rP   )KeyError_check_columns_exist)rQ   eerrorrk   s   `  rN   rc   z(DaskExpr.from_column_names.<locals>.funcl   s       '<'<R'@'@       334I4I"4M4MNNN5 'Q&s    
A$A		Ar   r7   r9   r;   r=   r?   re   )rJ   )ri   rk   rl   r9   rc   s    `   rN   from_column_nameszDaskExpr.from_column_namesc   sQ    		 		 		 		 		 		 s'"7#$
 
 
 	
rP   column_indicesc               b    d	fd} | |dd|                                d |j                  S )
NrQ   r#   rA   r[   c                "      fdD             S )Nc                <    g | ]}j         j        d d |f         S rD   )nativeiloc)r_   irQ   s     rN   ra   z>DaskExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   s*    AAAQBIN111a4(AAArP   rb   )rQ   rx   s   `rN   rc   z*DaskExpr.from_column_indices.<locals>.func   s    AAAA.AAAArP   r   nthrv   re   )_eval_names_indicesrJ   )ri   rl   rx   rc   s     ` rN   from_column_indiceszDaskExpr.from_column_indices   se    	B 	B 	B 	B 	B 	B s"%"9"9."I"I#$
 
 
 	
rP   	expr_nameCallable[..., dx.Series]expressifiable_args
Self | Anyc          	          d	 fd}                      | j        dz    j         d|  j         j         j        |          S )
NrQ   r#   rA   r[   c                     g }                                } fd                                D             }|D ] } |fi |}|                    |           !|S )Nc                8    i | ]\  }}|t          |          S rb   r   )r_   keyvaluerQ   s      rN   
<dictcomp>z9DaskExpr._with_callable.<locals>.func.<locals>.<dictcomp>   s:     # # #C (U33# # #rP   )rE   itemsappend)	rQ   native_resultsnative_series_listother_native_seriesnative_seriesresult_nativer5   r   rM   s	   `     rN   rc   z%DaskExpr._with_callable.<locals>.func   s    .0N!%B# # # #"5";";"="=# # # "4 5 5 $] J J6I J J%%m4444!!rP      z->rd   re   rf   rF   rG   rH   rI   rJ   )rM   r5   r   r4   r   rc   s   ``  ` rN   _with_callablezDaskExpr._with_callable   s~    
	" 
	" 
	" 
	" 
	" 
	" 
	" 
	" ~~+/!0??I??"&"=#7M'  
 
 	
rP   rc   c          	         | j         d n	nfd} t          |           | j        | j        | j        | j        || j        | j                  S )Nc                ,      |                     S rD   rb   )output_namescurrent_alias_output_namesrc   s    rN   <lambda>z3DaskExpr._with_alias_output_names.<locals>.<lambda>   s    dd+E+El+S+S&T&T rP   )r5   r7   r9   r;   r=   r?   r4   )rI   typerE   rF   rG   rH   rJ   rK   )rM   rc   r=   r   s    ` @rN   _with_alias_output_namesz!DaskExpr._with_alias_output_names   s    %)%=" | D *1 TTTTT 	 tDzz+-"&"=1M-
 
 
 	
rP   Freverse%Callable[[dx.Series, Any], dx.Series]nameotherr   r   boolc               l    |                      fd||          }|r|                    d          }|S )Nc                     | |          S rD   rb   )exprr   r5   s     rN   r   z'DaskExpr._with_binary.<locals>.<lambda>   s    T5 1 1 rP   )r   literal)r   alias)rM   r5   r   r   r   r`   s    `    rN   _with_binaryzDaskExpr._with_binary   sO     $$11114u % 
 
  	-\\),,FrP   op_namec                8    |                      fd|          S )Nc                6     t          |           |          S rD   )getattr)r   r   r   s     rN   r   z%DaskExpr._binary_op.<locals>.<lambda>   s     6g 6 6u = = rP   r   )rM   r   r   s    ` rN   
_binary_opzDaskExpr._binary_op   s+      ====w
 
 	
rP   operator_funcc                <    |                      fd||d          S )Nc                     ||           S rD   rb   )r   r   r   s     rN   r   z-DaskExpr._reverse_binary_op.<locals>.<lambda>   s    eT : : rP   Tr   r   )rM   r   r   r   s     ` rN   _reverse_binary_opzDaskExpr._reverse_binary_op   s5       ::::GUTX ! 
 
 	
rP   c                .    |                      d|          S )N__add__r   rM   r   s     rN   r   zDaskExpr.__add__       y%000rP   c                .    |                      d|          S )N__sub__r   r   s     rN   r   zDaskExpr.__sub__   r   rP   c                .    |                      d|          S )N__mul__r   r   s     rN   r   zDaskExpr.__mul__   r   rP   c                .    |                      d|          S )N__truediv__r   r   s     rN   r   zDaskExpr.__truediv__   s    }e444rP   c                     ddd fd
}                      | j        dz    j        dz    j         j         j                  S )NrQ   r#   series	dx.Seriesr   dx.Series | AnyrA   c                    t          | ||          \  }}|                    |                              |dk    d           S Nr   r   __floordiv__whererQ   r   r   s      rN   	_floordivz(DaskExpr.__floordiv__.<locals>._floordiv   sA     8FEJJMFE''..55eqj$GGGrP   r[   c                Z     t                      fd            D             S )Nc                *    g | ]} |          S rb   rb   )r_   r   r   rQ   other_seriess     rN   ra   z7DaskExpr.__floordiv__.<locals>.func.<locals>.<listcomp>   s'    OOOFIIb&,77OOOrP   r   )rQ   r   r   r   rM   s   `@rN   rc   z#DaskExpr.__floordiv__.<locals>.func   s<    .r599LOOOOOOdd2hhOOOOrP   r   z->__floordiv__rv   rQ   r#   r   r   r   r   rA   r   re   r   )rM   r   rc   r   s   `` @rN   r   zDaskExpr.__floordiv__   s    	H 	H 	H 	H	P 	P 	P 	P 	P 	P 	P 	P ~~+/-0@@"&"=#7M  
 
 	
rP   c                .    |                      d|          S )N__pow__r   r   s     rN   r   zDaskExpr.__pow__   r   rP   c                .    |                      d|          S )N__mod__r   r   s     rN   r   zDaskExpr.__mod__   r   rP   objectc                .    |                      d|          S )N__eq__r   r   s     rN   r   zDaskExpr.__eq__      x///rP   c                .    |                      d|          S )N__ne__r   r   s     rN   r   zDaskExpr.__ne__  r   rP   c                .    |                      d|          S )N__ge__r   r   s     rN   r   zDaskExpr.__ge__  r   rP   c                .    |                      d|          S )N__gt__r   r   s     rN   r   zDaskExpr.__gt__
  r   rP   c                .    |                      d|          S )N__le__r   r   s     rN   r   zDaskExpr.__le__  r   rP   c                .    |                      d|          S )N__lt__r   r   s     rN   r   zDaskExpr.__lt__  r   rP   c                .    |                      d|          S )N__and__r   r   s     rN   r   zDaskExpr.__and__  r   rP   c                .    |                      d|          S )N__or__r   r   s     rN   r   zDaskExpr.__or__  r   rP   c                2    |                      dd |          S )N__rsub__c                    | |z
  S rD   rb   abs     rN   r   z#DaskExpr.__rsub__.<locals>.<lambda>  
    A rP   r   r   s     rN   r   zDaskExpr.__rsub__      &&z3E3EuMMMrP   c                2    |                      dd |          S )N__rtruediv__c                    | |z  S rD   rb   r   s     rN   r   z'DaskExpr.__rtruediv__.<locals>.<lambda>  s
    AE rP   r   r   s     rN   r   zDaskExpr.__rtruediv__  s    &&~7I7I5QQQrP   c                     ddd fd
}                      | j        dz    j        dz    j         j         j                                      d          S )NrQ   r#   r   r   r   r   rA   c                    t          | ||          \  }}|                    |                              |dk    d           S r   r   r   s      rN   
_rfloordivz*DaskExpr.__rfloordiv__.<locals>._rfloordiv   sA     8FEJJMFE&&v..55fk4HHHrP   r[   c                8      fd            D             S )Nc                *    g | ]} |          S rb   rb   )r_   r   r   rQ   r   s     rN   ra   z8DaskExpr.__rfloordiv__.<locals>.func.<locals>.<listcomp>'  s'    IIIfJJr6511IIIrP   rb   )rQ   r   r   rM   s   `rN   rc   z$DaskExpr.__rfloordiv__.<locals>.func&  s,    IIIIIIRIIIIrP   r   z->__rfloordiv__rv   r   r   re   )rf   rF   rG   rH   rI   rJ   r   )rM   r   rc   r   s   `` @rN   __rfloordiv__zDaskExpr.__rfloordiv__  s    	I 	I 	I 	I	J 	J 	J 	J 	J 	J 	J 	J ~~+/-0AA"&"=#7M  
 
 %	

	rP   c                2    |                      dd |          S )N__rpow__c                    | |z  S rD   rb   r   s     rN   r   z#DaskExpr.__rpow__.<locals>.<lambda>3  s
    1 rP   r   r   s     rN   r   zDaskExpr.__rpow__2  s    &&z3D3DeLLLrP   c                2    |                      dd |          S )N__rmod__c                    | |z  S rD   rb   r   s     rN   r   z#DaskExpr.__rmod__.<locals>.<lambda>6  r   rP   r   r   s     rN   r   zDaskExpr.__rmod__5  r   rP   c                0    |                      d d          S )Nc                *    |                                  S rD   )
__invert__r   s    rN   r   z%DaskExpr.__invert__.<locals>.<lambda>9  s    0A0A rP   r   r   rM   s    rN   r   zDaskExpr.__invert__8  s    ""#A#A<PPPrP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )mean	to_seriesr   s    rN   r   zDaskExpr.mean.<locals>.<lambda><      		0E0E0G0G rP   r  r   r  s    rN   r  zDaskExpr.mean;      ""#G#GPPPrP   c                L     ddl m d fd}                     |d          S )	Nr   r   sr   rA   c                    t          | j        j        t          j                  }|                                sd} |          |                                                                 S )Nz<`median` operation not supported for non-numeric input type.)r   dtyperJ   r   DASK
is_numericmedian_approximater  )r	  r  msgr   rM   s      rN   rc   zDaskExpr.median.<locals>.funcA  sc    ,QWdm^EXYYE##%% 1T++C000''))33555rP   median)r	  r   rA   r   )narwhals.exceptionsr   r   )rM   rc   r   s   ` @rN   r  zDaskExpr.median>  sQ    ======	6 	6 	6 	6 	6 	6 	6 ""4222rP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )minr  r   s    rN   r   zDaskExpr.min.<locals>.<lambda>K      

0D0D0F0F rP   r  r   r  s    rN   r  zDaskExpr.minJ      ""#F#FNNNrP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )maxr  r   s    rN   r   zDaskExpr.max.<locals>.<lambda>N  r  rP   r  r   r  s    rN   r  zDaskExpr.maxM  r  rP   ddofc               >    |                      fdddi          S )Nc                T    |                                                                S N)r  )stdr  r   r  s    rN   r   zDaskExpr.std.<locals>.<lambda>R  !    t,,6688 rP   r  r  r3   r   rM   r  s    `rN   r  zDaskExpr.stdP  6    ""8888!4. # 
 
 	
rP   c               >    |                      fdddi          S )Nc                T    |                                                                S r  )varr  r  s    rN   r   zDaskExpr.var.<locals>.<lambda>Y  r   rP   r%  r  r3   r   r!  s    `rN   r%  zDaskExpr.varW  r"  rP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )skewr  r   s    rN   r   zDaskExpr.skew.<locals>.<lambda>_  r  rP   r(  r   r  s    rN   r(  zDaskExpr.skew^  r  rP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )kurtosisr  r   s    rN   r   z#DaskExpr.kurtosis.<locals>.<lambda>b  s    0I0I0K0K rP   r+  r   r  s    rN   r+  zDaskExpr.kurtosisa  s    ""#K#KZXXXrP   nc                6    |                      fdd          S )Nc                .    |                                S rD   )shift)r   r,  s    rN   r   z DaskExpr.shift.<locals>.<lambda>e  s    

1 rP   r/  r   )rM   r,  s    `rN   r/  zDaskExpr.shiftd  s#    ""#=#=#=#=wGGGrP   c               V    |rd}t          |          |                     d d          S )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                *    |                                  S rD   )cumsumr   s    rN   r   z"DaskExpr.cum_sum.<locals>.<lambda>m       rP   cum_sumNotImplementedErrorr   rM   r   r  s      rN   r4  zDaskExpr.cum_sumg  s7     	+NC%c***""#=#=yIIIrP   c               V    |rd}t          |          |                     d d          S )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                    |                                                       t                                                    S rD   )isnaastyper8   r2  r   s    rN   r   z$DaskExpr.cum_count.<locals>.<lambda>u  s*    499;;,..s33::<< rP   	cum_countr5  r7  s      rN   r<  zDaskExpr.cum_counto  s=     	+PC%c***""<<k
 
 	
rP   c               V    |rd}t          |          |                     d d          S )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                *    |                                  S rD   )cumminr   s    rN   r   z"DaskExpr.cum_min.<locals>.<lambda>}  r3  rP   cum_minr5  r7  s      rN   r@  zDaskExpr.cum_minx  7     	+NC%c***""#=#=yIIIrP   c               V    |rd}t          |          |                     d d          S )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                *    |                                  S rD   )cummaxr   s    rN   r   z"DaskExpr.cum_max.<locals>.<lambda>  r3  rP   cum_maxr5  r7  s      rN   rE  zDaskExpr.cum_max  rA  rP   c               V    |rd}t          |          |                     d d          S )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                *    |                                  S rD   )cumprodr   s    rN   r   z#DaskExpr.cum_prod.<locals>.<lambda>  s     rP   cum_prodr5  r7  s      rN   rI  zDaskExpr.cum_prod  s7     	+OC%c***""#>#>
KKKrP   window_sizemin_samplescenterc               >    |                      fdd          S )Nc                X    |                                                                S N)windowmin_periodsrL  )rollingsumr   rL  rK  rJ  s    rN   r   z&DaskExpr.rolling_sum.<locals>.<lambda>  s-    "F &  cee rP   rolling_sumr   rM   rJ  rK  rL  s    ```rN   rU  zDaskExpr.rolling_sum  s@    ""      	
 
 	
rP   c               >    |                      fdd          S )Nc                X    |                                                                S rO  )rR  r  rT  s    rN   r   z'DaskExpr.rolling_mean.<locals>.<lambda>  s-    "F &  dff rP   rolling_meanr   rV  s    ```rN   rY  zDaskExpr.rolling_mean  s@    ""      	
 
 	
rP   c               l    |dk    r|                      fdd          S d}t          |          )Nr   c                X    |                                                                S rO  )rR  r%  rT  s    rN   r   z&DaskExpr.rolling_var.<locals>.<lambda>  -    T\\&K *  #%% rP   rolling_varz5Dask backend only supports `ddof=1` for `rolling_var`r   r6  rM   rJ  rK  rL  r  r  s    ```  rN   r]  zDaskExpr.rolling_var  a     199&&      	   F!#&&&rP   c               l    |dk    r|                      fdd          S d}t          |          )Nr   c                X    |                                                                S rO  )rR  r  rT  s    rN   r   z&DaskExpr.rolling_std.<locals>.<lambda>  r\  rP   rolling_stdz5Dask backend only supports `ddof=1` for `rolling_std`r^  r_  s    ```  rN   rc  zDaskExpr.rolling_std  r`  rP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )rS  r  r   s    rN   r   zDaskExpr.sum.<locals>.<lambda>  r  rP   rS  r   r  s    rN   rS  zDaskExpr.sum  r  rP   c                0    |                      d d          S )Nc                N    |                                                                  S rD   )countr  r   s    rN   r   z DaskExpr.count.<locals>.<lambda>  s    

0F0F0H0H rP   rh  r   r  s    rN   rh  zDaskExpr.count  s    ""#H#H'RRRrP   decimalsc                6    |                      fdd          S )Nc                .    |                                S rD   )round)r   ri  s    rN   r   z DaskExpr.round.<locals>.<lambda>  s    

80D0D rP   rl  r   )rM   ri  s    `rN   rl  zDaskExpr.round  s#    ""#D#D#D#DgNNNrP   c                D    dd l m} |                     |j        d          S )Nr   floor)
dask.arrayarrayr   rn  rM   das     rN   rn  zDaskExpr.floor  s,    ""28W555rP   c                D    dd l m} |                     |j        d          S )Nr   ceil)ro  rp  r   rt  rq  s     rN   rt  zDaskExpr.ceil  ,    ""27F333rP   c                0    |                      d d          S )Nc                *    |                                  S rD   )uniquer   s    rN   r   z!DaskExpr.unique.<locals>.<lambda>  r3  rP   rx  r   r  s    rN   rx  zDaskExpr.unique  s    ""#=#=xHHHrP   c                0    |                      d d          S )Nc                *    |                                  S rD   dropnar   s    rN   r   z%DaskExpr.drop_nulls.<locals>.<lambda>  r3  rP   
drop_nullsr   r  s    rN   r}  zDaskExpr.drop_nulls  s    ""#=#=|LLLrP   c                0    |                      d d          S )Nc                *    |                                  S rD   )absr   s    rN   r   zDaskExpr.abs.<locals>.<lambda>  s    

 rP   r  r   r  s    rN   r  zDaskExpr.abs  s    ""#:#:EBBBrP   c                0    |                      d d          S )Nc                X    |                      d ddd                                           S )NTF)axisskipnasplit_everyout)allr  r   s    rN   r   zDaskExpr.all.<locals>.<lambda>  s.    $Et "  ikk rP   r  r   r  s    rN   r  zDaskExpr.all  s)    ""  	
 
 	
rP   c                0    |                      d d          S )Nc                V    |                      ddd                                          S )Nr   TF)r  r  r  )anyr  r   s    rN   r   zDaskExpr.any.<locals>.<lambda>  s$    q5IISSUU rP   r  r   r  s    rN   r  zDaskExpr.any  s#    ""UU
 
 	
rP   r   float | Nonec                     |t           j        n||t          d          n|d fd}                     |d          S )Nnanr   r   rA   c                    t          d| | k              }|                    d          }t          | j        j                  rn}|                     ||          S )Nr   F)r   fillnar   r  r2   mask)r   r  fillrM   value_nullablevalue_numpys      rN   rc   zDaskExpr.fill_nan.<locals>.func  sb    TT\22D;;u%%D %TZ1EFF!  
 99T4(((rP   fill_nanr   r   rA   r   )pdNAfloatr   )rM   r   rc   r  r  s   `  @@rN   r  zDaskExpr.fill_nan  sg    "'-U&+meElll		) 		) 		) 		) 		) 		) 		) 		) ""4444rP   Self | NonNestedLiteralstrategyFillNullStrategy | Nonelimit
int | Nonec                D    dfd}|                      |d          S )Nr   r   rA   c                    |                                }n2dk    r|                               n|                               }|S )Nforward)r  )r  ffillbfill)r   res_serr  r  r   s     rN   rc   z DaskExpr.fill_null.<locals>.func  s\     ++e,,  9,, JJUJ+++%00 
 NrP   	fill_nullr  r   )rM   r   r  r  rc   s    ``` rN   r  zDaskExpr.fill_null  sE    		 		 		 		 		 		 		 		 ""4555rP   lower_bound.Self | NumericLiteral | TemporalLiteral | Noneupper_boundc                6    |                      d d||          S )Nc                0    |                      ||          S )N)lowerupper)clip)r   r  r  s      rN   r   zDaskExpr.clip.<locals>.<lambda>  s    499! 4= 4 4 rP   r  )r  r  r   )rM   r  r  s      rN   r  zDaskExpr.clip  s6    
 ""  ## # 
 
 	
rP   c                0    |                      d d          S )Nc                *    |                                  S rD   )diffr   s    rN   r   zDaskExpr.diff.<locals>.<lambda>      		 rP   r  r   r  s    rN   r  zDaskExpr.diff  s    ""#;#;VDDDrP   c                0    |                      d d          S )Nc                R    |                      d                                          S )NFr{  )nuniquer  r   s    rN   r   z#DaskExpr.n_unique.<locals>.<lambda>  s     U33==?? rP   n_uniquer   r  s    rN   r  zDaskExpr.n_unique  s"    ""??
 
 	
rP   c                0    |                      d d          S )Nc                *    |                                  S rD   )r:  r   s    rN   r   z"DaskExpr.is_null.<locals>.<lambda>  r  rP   is_nullr   r  s    rN   r  zDaskExpr.is_null  s    ""#;#;YGGGrP   c                <     d fd}                      |d          S )Nr   r   rA   c                    t          | j        j        j                  }|                                r| | k    S d| d}t          |          )Nz4`.is_nan` only supported for numeric dtypes and not z, did you mean `.is_null`?)r   r  rJ   r2   r  r   )r   r  r  rM   s      rN   rc   zDaskExpr.is_nan.<locals>.func  s^    ,
DM4+? E !! $t|#jjjjC',,,rP   r  r  r   rM   rc   s   ` rN   is_nanzDaskExpr.is_nan  s9    	- 	- 	- 	- 	- 	- ""4333rP   c                0    |                      d d          S )Nc                4    | j                                         S rD   )sizer  r   s    rN   r   zDaskExpr.len.<locals>.<lambda>+  s    	0C0C0E0E rP   lenr   r  s    rN   r  zDaskExpr.len*  s    ""#E#EuMMMrP   quantiler  interpolationr.   c                t    |dk    r!d
fd}|                      |ddd          S d	}t          |          )Nlinearr   r   rA   c                    | j         dk    rd}t          |          |                     d                                          S )Nr   zK`Expr.quantile` is not supported for Dask backend with multiple partitions.dask)qmethod)npartitionsr6  r  r  )r   r  r  s     rN   rc   zDaskExpr.quantile.<locals>.func2  sM    #a''gC-c222}}v %  )++rP   r  )r  r  r3   zx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.r  r^  )rM   r  r  rc   r  s    `   rN   r  zDaskExpr.quantile-  st     H$$      &&+3hOO '   
 I!#&&&rP   c                6    dd}|                      |d          S )Nr   r   rA   c                   | j         }t          d|gd          }t          |                                 |          }|                    |                              |di          |         }||                             |          S )N   
row_index_n_bytescolumnsprefixr  r   r   r   to_framegroupbyaggisin)r   _name	col_tokenframefirst_distinct_indexs        rN   rc   z(DaskExpr.is_first_distinct.<locals>.funcC  s    IE6E7<  I "$--//9==E#(==#7#7#;#;Y<N#O#OPY#Z #(()=>>>rP   is_first_distinctr  r   r  s     rN   r  zDaskExpr.is_first_distinctB  s/    	? 	? 	? 	? ""4)<===rP   c                6    dd}|                      |d          S )Nr   r   rA   c                   | j         }t          d|gd          }t          |                                 |          }|                    |                              |di          |         }||                             |          S )Nr  r  r  r  r  )r   r  r  r  last_distinct_indexs        rN   rc   z'DaskExpr.is_last_distinct.<locals>.funcO  s    IE6E7<  I "$--//9==E"'--"6"6":":Iu;M"N"Ny"Y#(()<===rP   is_last_distinctr  r   r  s     rN   r  zDaskExpr.is_last_distinctN  s/    	> 	> 	> 	> ""4);<<<rP   c                6    dd}|                      |d          S )Nr   r   rA   c                    | j         }|                                                     |d                              d|t          f          dk    S )NFr{  r  )metar   )r   r  r  	transformr8   )r   r  s     rN   rc   z DaskExpr.is_unique.<locals>.func[  sG    IEu--655rP   	is_uniquer  r   r  s     rN   r  zDaskExpr.is_uniqueZ  s.    	 	 	 	 ""4555rP   c                6    |                      fdd          S )Nc                .    |                                S rD   )r  )r   r   s    rN   r   z DaskExpr.is_in.<locals>.<lambda>g  s    		%0@0@ rP   is_inr   r   s    `rN   r  zDaskExpr.is_inf  s#    ""#@#@#@#@'JJJrP   c                0    |                      d d          S )Nc                r    |                                                                                                  S rD   )r:  rS  r  r   s    rN   r   z%DaskExpr.null_count.<locals>.<lambda>k  s$    **4466 rP   
null_countr   r  s    rN   r  zDaskExpr.null_counti  s"    ""66
 
 	
rP   partition_bySequence[str]order_byc                    ddl m} ssJ d fd}n                                 sd}t          |          rd	}t          |          |                               }	 |j        |         n?# t          $ r2 d
| dd                    |j                   d}t          |          d w xY wt          | j	                  d fd} 
                    | j        dz    j        dz    j         j         j                  S )Nr   )PandasLikeGroupByrQ   r#   rA   rR   c                2      | j         ddd          S )NF)
descending
nulls_last)sort)rQ   r  rM   s    rN   rc   zDaskExpr.over.<locals>.funcw  s&    tGBGX%ERRRSSSrP   zOnly elementary expressions are supported for `.over` in dask.

Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/z4`over` with `order_by` is not yet supported in Dask.zUnsupported function: z- in `over` context.

Supported functions are z, 
c           
        t          
| g           \  }}t          j                    5  t          j        ddt                     | j                            	          }dk    rLt          |          dk    rd}t          |           |j	        fi 
                    |d                   }n! |t          |                   j	        fi }d d d            n# 1 swxY w Y   |                     |                    t          t          ||                                        j        fd	|D             S )
Nignorez.*`meta` is not specified)messagecategoryr  r   z)Safety check failed, please report a bug.r   )r  c                     g | ]
}|         S rb   rb   )r_   r   result_frames     rN   ra   z/DaskExpr.over.<locals>.func.<locals>.<listcomp>  s    ???tT*???rP   )r   warningscatch_warningsfilterwarningsUserWarningr|   r  r  AssertionErrorr  r  list_with_nativerenamedictzip)rQ   r   aliasesgroupedr  
res_nativer  dask_function_namedask_kwargsr  rM   s         @rN   rc   zDaskExpr.over.<locals>.func  s   (I$PRTV(W(W%g,..  +  ;!,   
 !i//==G)V33|,,11"MC"0"5"55%6W%6.& &2=& &"(<?33 #
 &KWT,-?-?%@%J.& &2=& &
!              &  "%%d3|W3M3M.N.N%OO     @???w????s   B*C  C$'C$r   z->overrv   rQ   r#   rA   rR   )narwhals._pandas_like.group_byr  _is_elementaryr6  
_leaf_name_REMAP_AGGSrr   joinr   rK   rf   rF   rG   rH   rI   rJ   )	rM   r  r  r  rc   r  r9   r  r  s	   ```    @@rN   overzDaskExpr.overn  s   DDDDDD :	@OOOT T T T T T T T$$&& 3	@_ 
 &c*** ,	@HC%c***-88>>M9%6%B=%Q"" 9 9 9\] \ \/3yy9J9V/W/W\ \ \  *#..D89 =t2 K@ @ @ @ @ @ @ @ @6 ~~+/-8"&"=#7M  
 
 	
s   (A6 6<B2r  r*   c                @     d fd}                      |d          S )Nr   r   rA   c                X    t          j                  }|                     |          S rD   )r   rJ   r;  )r   native_dtyper  rM   s     rN   rc   zDaskExpr.cast.<locals>.func  s&    3E4=IIL;;|,,,rP   r   r  r   )rM   r  rc   s   `` rN   r   zDaskExpr.cast  s?    	- 	- 	- 	- 	- 	- 	- ""4000rP   c                D    dd l m} |                     |j        d          S )Nr   	is_finite)ro  rp  r   isfiniterq  s     rN   r  zDaskExpr.is_finite  s,    ""2;<<<rP   basec                L    dd l m dfd}|                     |d          S )Nr   r   r   rA   c                Z                         |                                          z  S rD   )log)r   r  rr  s    rN   _logzDaskExpr.log.<locals>._log  s"    66$<<"&&,,..rP   r  r  )ro  rp  r   )rM   r  r  rr  s    ` @rN   r  zDaskExpr.log  sQ    	/ 	/ 	/ 	/ 	/ 	/ 	/ ""4///rP   c                D    dd l m} |                     |j        d          S )Nr   exp)ro  rp  r   r  rq  s     rN   r  zDaskExpr.exp  s,    ""265111rP   c                D    dd l m} |                     |j        d          S )Nr   sqrt)ro  rp  r   r  rq  s     rN   r  zDaskExpr.sqrt  ru  rP   keepr+   c               D    dfd}|                      |ddi          S )	Nr   r   rA   c                    | j         }|                                                                 |         }dk    r|                    d          n|S )Nr  r   )r   r  modehead)r   r  r`   r  s      rN   rc   zDaskExpr.mode.<locals>.func  sD    IE]]__))++E2F%)U]]6;;q>>>>rP   r"  r  r3   r  r   )rM   r  rc   s    ` rN   r"  zDaskExpr.mode  sB    	? 	? 	? 	? 	? 	?
 ""4~"NNNrP   r   c                     t          |           S rD   r   r  s    rN   r:   zDaskExpr.str  s    &t,,,rP   r   c                     t          |           S rD   r   r  s    rN   dtzDaskExpr.dt  s    (...rP   r   r  struct)r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r'   r4   r@   rA   rB   r	  )rA   r%   )rX   rY   rA   r   )
ri   rj   rk   r<   rl   r(   r9   r:   rA   r   )rx   r8   rl   r(   rA   r   )rh   N)
r   r:   r4   r@   r5   r   r   r   rA   r   )rc   r>   rA   r   )
r5   r   r   r:   r   r   r   r   rA   r   )r   r:   r   r   rA   r   )r   r:   r   r   r   r   rA   r   )r   r   rA   r   )r   r   rA   r   )rA   r   )r  r8   rA   r   )r,  r8   rA   r   )r   r   rA   r   )rJ  r8   rK  r8   rL  r   rA   r   )
rJ  r8   rK  r8   rL  r   r  r8   rA   r   )ri  r8   rA   r   )r   r  rA   r   )r   r  r  r  r  r  rA   r   )r  r  r  r  rA   r   )r  r  r  r.   rA   r   )r  r  r  r  rA   r   )r  r*   rA   r   )r  r  rA   r   )r  r+   rA   r   )rA   r   )rA   r   )b__name__
__module____qualname__r   r  r2   __annotations__rO   rT   rW   rg   classmethodrw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r%  r(  r+  r/  r4  r<  r@  rE  rI  rU  rY  r]  rc  rS  rh  rl  rn  rt  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r"  propertyr:   r&  r   rankfirstlastr  r'  rb   rP   rN   r1   r1   1   s         '5&9O9999 .23 3 3 3 3 3(   4 4 4 4

 
 
 
    
 
 
 
 
 [
8 
 
 
 [
$ -1
 
 
 
 
>
 
 
 
2      
 
 
 


 
 
 
1 1 1 11 1 1 11 1 1 15 5 5 5
 
 
 
(1 1 1 11 1 1 10 0 0 00 0 0 00 0 0 00 0 0 00 0 0 00 0 0 01 1 1 10 0 0 0N N N NR R R R   &M M M MN N N NQ Q Q QQ Q Q Q
3 
3 
3 
3O O O OO O O O
 
 
 

 
 
 
Q Q Q QY Y Y YH H H HJ J J J
 
 
 
J J J JJ J J JL L L L
 
 
 

 
 
 
' ' ' '' ' ' 'O O O OS S S SO O O O6 6 6 6
4 4 4 4
I I I IM M M MC C C C
 
 
 

 
 
 
5 5 5 5"6 6 6 6&
 
 
 
E E E E
 
 
 

H H H H
4 
4 
4 
4N N N N' ' ' '*
> 
> 
> 
>
= 
= 
= 
=
6 
6 
6 
6K K K K
 
 
 

G
 G
 G
 G
R1 1 1 1= = = =
0 0 0 02 2 2 2
4 4 4 4
O O O O - - - X- / / / X/ ?DOE?D ,O--D-----o//F//////rP   r1   )r#   r   )B
__future__r   r  typingr   r   r   r   r   pandasr  narwhals._compliantr	   r
   narwhals._dask.expr_dtr   narwhals._dask.expr_strr   narwhals._dask.utilsr   r   r   r   narwhals._expression_parsingr   r   narwhals._pandas_like.exprr   narwhals._pandas_like.utilsr   r   narwhals._utilsr   r   r   r  r   collections.abcr   dask.dataframe.dask_expr	dataframe	dask_exprdxtyping_extensionsr   narwhals._compliant.typingr   r    r!   r"   narwhals._dask.dataframer#   rV   r%   r&   r'   r(   narwhals.typingr)   r*   r+   r,   r-   r.   r/   r1   rb   rP   rN   <module>rE     s   " " " " " "  > > > > > > > > > > > > > >     ; ; ; ; ; ; ; ; < < < < < < ; ; ; ; ; ;            U T T T T T T T I I I I I I S S S S S S S S         
 6 5 5 5 5 5 (((((()))))))))&&&&&&ZZZZZZZZZZZZ666666666666CCCCCCCC88888888                 z
0 z
0 z
0 z
0 z
0)*23z
0 z
0 z
0 z
0 z
0rP   