
    Whd                    ~   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 d dlmZ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,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dlmZm3Z3 d dlm4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=  G d ded   ed         Z>y)    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)DepthTrackingExprLazyExprDaskExprDateTimeNamespaceDaskExprStringNamespace)add_row_indexmaybe_evaluate_exprnarwhals_to_native_dtype)ExprKind!evaluate_output_names_and_aliases)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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]dZd^dZd_dZ	d`dZ
ed	d
	 	 	 	 	 	 	 	 	 dad       Zedbd       Z	 	 dc	 	 	 	 	 	 	 	 	 dddZdedZdd	 	 	 	 	 	 	 	 	 dfdZdgdZ	 	 	 	 	 	 	 	 dhdZdidZdidZdidZdidZdidZdidZdidZdjdZdjdZdidZdidZdidZdid Zdid!Z did"Z!did#Z"did$Z#did%Z$did&Z%did'Z&dkd(Z'dkd)Z(dkd*Z)dkd+Z*dkd,Z+dld-Z,dld.Z-dkd/Z.dkd0Z/dmd1Z0dnd2Z1dnd3Z2dnd4Z3dnd5Z4dnd6Z5dod7Z6dod8Z7	 	 	 	 	 	 	 	 	 	 dpd9Z8	 	 	 	 	 	 	 	 	 	 dpd:Z9dkd;Z:dkd<Z;dqd=Z<dkd>Z=dkd?Z>dkd@Z?dkdAZ@dkdBZAdrdCZB	 	 	 	 	 	 	 	 dsdDZC	 	 	 	 	 	 dtdEZDdkdFZEdkdGZFdkdHZGdkdIZHdkdJZI	 	 	 	 	 	 dudKZJdkdLZKdkdMZLdkdNZMdidOZNdkdPZOdvdQZPdwdRZQdkdSZRdxdTZSdkdUZTdkdVZUdydWZVeWdzdX       ZXeWd{dY       ZY eZ       Z[ eZ       Z\dZed[<    eZ       Z]dZed\<   y)|DaskExprr   _implementationNscalar_kwargsc               |    || _         || _        || _        || _        || _        || _        |xs i | _        d | _        y N)_call_depth_function_name_evaluate_output_names_alias_output_names_version_scalar_kwargs	_metadata)selfcalldepthfunction_nameevaluate_output_namesalias_output_namesversionr2   s           M/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_dask/expr.py__init__zDaskExpr.__init__5   sE     
+&;##5 +1r.2    c                $    | j                  |      S r4   )r5   )r=   dfs     rD   __call__zDaskExpr.__call__I   s    zz"~rF   c                4    ddl m}  || j                        S )Nr   r"   )rC   )narwhals._dask.namespacer#   r:   )r=   r#   s     rD   __narwhals_namespace__zDaskExpr.__narwhals_namespace__L   s    :T]]33rF   c           	          d fd} j                  | j                   j                   j                   j                   j
                   j                        S )Nc                Z     |       D cg c]  }|j                   d   d    c}S c c}w )Nr   )loc)rH   resultr=   s     rD   funcz DaskExpr.broadcast.<locals>.funcR   s*     488<FJJqM!$<<<s   (r?   r@   rA   rB   rC   r2   rH   r!   returnzlist[dx.Series])	__class__r6   r7   r8   r9   r:   r;   )r=   kindrQ   s   `  rD   	broadcastzDaskExpr.broadcastQ   sU    	=
 ~~++--"&"="=#77MM--  
 	
rF    )r@   c              @    dfd} | |d|d |j                         S )Nc                    	  |       D cg c]  }| j                   |    c}S c c}w # t        $ r"}| j                   |             x}r|| d }~ww xY wr4   )_native_frameKeyError_check_columns_exist)rH   column_nameeerrorevaluate_column_namess       rD   rQ   z(DaskExpr.from_column_names.<locals>.funcj   ss     (=R'@# $$[1    334I"4MNN5NQ&s    
+ &+ + 	AAAr   r?   r@   rA   rB   rC   rS   )r:   )clsra   contextr@   rQ   s    `   rD   from_column_nameszDaskExpr.from_column_namesa   s/    		 '"7#$$
 	
rF   c               ^    dfd} | |dd| j                        d |j                        S )Nc                d    D cg c]  }| j                   j                  d d |f   ! c}S c c}w r4   )nativeiloc)rH   icolumn_indicess     rD   rQ   z*DaskExpr.from_column_indices.<locals>.func   s(    2@AQBIINN1a4(AAAs   $-r   nthrb   rS   )_eval_names_indicesr:   )rc   rd   rk   rQ   s     ` rD   from_column_indiceszDaskExpr.from_column_indices~   s;    	B "%"9"9."I#$$
 	
rF   c          	          d fd} j                  | j                  dz    j                   d|  j                   j                   j
                  |      S )Nc           	         g }
j                  |       }	j                         D ci c]  \  }}|t        | |       }}}|D ]  } |fi |}|j                  |        |S c c}}w r4   )r5   itemsr   append)rH   native_resultsnative_series_listkeyvalueother_native_seriesnative_seriesresult_nativer>   expressifiable_argsr=   s           rD   rQ   z%DaskExpr._with_callable.<locals>.func   s    .0N!%B #6";";"=#C (U33# # "4 5 $] J6I J%%m45 "!#s   A%   z->rR   rS   )rU   r6   r7   r8   r9   r:   )r=   r>   	expr_namer2   rz   rQ   s   ``  ` rD   _with_callablezDaskExpr._with_callable   s_    
	" ~~++/!001I;?"&"="=#77MM'  
 	
rF   c          	         | j                   d n	nfd} t        |       | j                  | j                  | j                  | j
                  || j                  | j                        S )Nc                       |             S r4    )output_namescurrent_alias_output_namesrQ   s    rD   <lambda>z3DaskExpr._with_alias_output_names.<locals>.<lambda>   s    d+El+S&T rF   )r>   r?   r@   rA   rB   rC   r2   )r9   typer5   r6   r7   r8   r:   r;   )r=   rQ   rB   r   s    ` @rD   _with_alias_output_namesz!DaskExpr._with_alias_output_names   sx    %)%=%=" |  *1 T 	 tDz++--"&"="=1MM--
 	
rF   Freversec               \    | j                  fd||      }|r|j                  d      }|S )Nc                     | |      S r4   r   )exprotherr>   s     rD   r   z'DaskExpr._with_binary.<locals>.<lambda>   s    T5 1 rF   )r   literal)r}   alias)r=   r>   namer   r   rP   s    `    rD   _with_binaryzDaskExpr._with_binary   s9     $$14u % 
 \\),FrF   c                0    | j                  fd|      S )Nc                (     t        |       |      S r4   )getattr)r   r   op_names     rD   r   z%DaskExpr._binary_op.<locals>.<lambda>   s     6g 6u = rF   r   )r=   r   r   s    ` rD   
_binary_opzDaskExpr._binary_op   s      =w
 	
rF   c                4    | j                  fd||d      S )Nc                     ||       S r4   r   )r   r   operator_funcs     rD   r   z-DaskExpr._reverse_binary_op.<locals>.<lambda>   s    eT : rF   Tr   r   )r=   r   r   r   s     ` rD   _reverse_binary_opzDaskExpr._reverse_binary_op   s'       :GUTX ! 
 	
rF   c                &    | j                  d|      S )N__add__r   r=   r   s     rD   r   zDaskExpr.__add__       y%00rF   c                &    | j                  d|      S )N__sub__r   r   s     rD   r   zDaskExpr.__sub__   r   rF   c                &    | j                  d|      S )N__mul__r   r   s     rD   r   zDaskExpr.__mul__   r   rF   c                &    | j                  d|      S )N__truediv__r   r   s     rD   r   zDaskExpr.__truediv__   s    }e44rF   c                &    | j                  d|      S )N__floordiv__r   r   s     rD   r   zDaskExpr.__floordiv__   s    ~u55rF   c                &    | j                  d|      S )N__pow__r   r   s     rD   r   zDaskExpr.__pow__   r   rF   c                &    | j                  d|      S )N__mod__r   r   s     rD   r   zDaskExpr.__mod__   r   rF   c                &    | j                  d|      S )N__eq__r   r   s     rD   r   zDaskExpr.__eq__       x//rF   c                &    | j                  d|      S )N__ne__r   r   s     rD   r   zDaskExpr.__ne__   r   rF   c                &    | j                  d|      S )N__ge__r   r   s     rD   r   zDaskExpr.__ge__   r   rF   c                &    | j                  d|      S )N__gt__r   r   s     rD   r   zDaskExpr.__gt__   r   rF   c                &    | j                  d|      S )N__le__r   r   s     rD   r   zDaskExpr.__le__   r   rF   c                &    | j                  d|      S )N__lt__r   r   s     rD   r   zDaskExpr.__lt__   r   rF   c                &    | j                  d|      S )N__and__r   r   s     rD   r   zDaskExpr.__and__   r   rF   c                &    | j                  d|      S )N__or__r   r   s     rD   r   zDaskExpr.__or__  r   rF   c                *    | j                  dd |      S )N__rsub__c                    | |z
  S r4   r   abs     rD   r   z#DaskExpr.__rsub__.<locals>.<lambda>  
    A rF   r   r   s     rD   r   zDaskExpr.__rsub__      &&z3EuMMrF   c                *    | j                  dd |      S )N__rtruediv__c                    | |z  S r4   r   r   s     rD   r   z'DaskExpr.__rtruediv__.<locals>.<lambda>
  s
    AE rF   r   r   s     rD   r   zDaskExpr.__rtruediv__	  s    &&~7I5QQrF   c                *    | j                  dd |      S )N__rfloordiv__c                    | |z  S r4   r   r   s     rD   r   z(DaskExpr.__rfloordiv__.<locals>.<lambda>  s
    Q!V rF   r   r   s     rD   r   zDaskExpr.__rfloordiv__  s    &&8KUSSrF   c                *    | j                  dd |      S )N__rpow__c                    | |z  S r4   r   r   s     rD   r   z#DaskExpr.__rpow__.<locals>.<lambda>  s
    1 rF   r   r   s     rD   r   zDaskExpr.__rpow__  s    &&z3DeLLrF   c                *    | j                  dd |      S )N__rmod__c                    | |z  S r4   r   r   s     rD   r   z#DaskExpr.__rmod__.<locals>.<lambda>  r   rF   r   r   s     rD   r   zDaskExpr.__rmod__  r   rF   c                (    | j                  d d      S )Nc                "    | j                         S r4   )
__invert__r   s    rD   r   z%DaskExpr.__invert__.<locals>.<lambda>  s    0A rF   r   r}   r=   s    rD   r   zDaskExpr.__invert__  s    ""#A<PPrF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )mean	to_seriesr   s    rD   r   zDaskExpr.mean.<locals>.<lambda>      		0E0E0G rF   r   r   r   s    rD   r   zDaskExpr.mean      ""#GPPrF   c                D     ddl m d fd} j                  |d      S )Nr   r   c                    t        | j                  j                  t        j                        }|j                         s
d} |      | j                         j                         S )Nz<`median` operation not supported for non-numeric input type.)r   dtyper:   r   DASK
is_numericmedian_approximater   )sr   msgr   r=   s      rD   rQ   zDaskExpr.median.<locals>.func  sS    ,QWWdmm^EXEXYE##%T+C00'')3355rF   median)r   	dx.SeriesrT   r   )narwhals.exceptionsr   r}   )r=   rQ   r   s   ` @rD   r   zDaskExpr.median  s     =	6 ""422rF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )minr   r   s    rD   r   zDaskExpr.min.<locals>.<lambda>(      
0D0D0F rF   r   r   r   s    rD   r   zDaskExpr.min'      ""#FNNrF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )maxr   r   s    rD   r   zDaskExpr.max.<locals>.<lambda>+  r   rF   r   r   r   s    rD   r   zDaskExpr.max*  r   rF   c               6    | j                  fdddi      S )Nc                D    | j                        j                         S N)ddof)stdr   r   r   s    rD   r   zDaskExpr.std.<locals>.<lambda>/      t,668 rF   r   r   r1   r   r=   r   s    `rD   r   zDaskExpr.std-  (    ""8!4. # 
 	
rF   c               6    | j                  fdddi      S )Nc                D    | j                        j                         S r   )varr   r   s    rD   r   zDaskExpr.var.<locals>.<lambda>6  r   rF   r   r   r1   r   r   s    `rD   r   zDaskExpr.var4  r   rF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )skewr   r   s    rD   r   zDaskExpr.skew.<locals>.<lambda><  r   rF   r   r   r   s    rD   r   zDaskExpr.skew;  r   rF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )kurtosisr   r   s    rD   r   z#DaskExpr.kurtosis.<locals>.<lambda>?  s    0I0I0K rF   r  r   r   s    rD   r  zDaskExpr.kurtosis>  s    ""#KZXXrF   c                .    | j                  fdd      S )Nc                &    | j                        S r4   )shift)r   ns    rD   r   z DaskExpr.shift.<locals>.<lambda>B  s    

1 rF   r  r   )r=   r  s    `rD   r  zDaskExpr.shiftA  s    ""#=wGGrF   c               F    |rd}t        |      | j                  d d      S )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                "    | j                         S r4   )cumsumr   s    rD   r   z"DaskExpr.cum_sum.<locals>.<lambda>J       rF   cum_sumNotImplementedErrorr}   r=   r   r   s      rD   r
  zDaskExpr.cum_sumD  s)    NC%c**""#=yIIrF   c               F    |rd}t        |      | j                  d d      S )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                f    | j                          j                  t              j                         S r4   )isnaastypeintr  r   s    rD   r   z$DaskExpr.cum_count.<locals>.<lambda>R  s"    499;,..s3::< rF   	cum_countr  r  s      rD   r  zDaskExpr.cum_countL  s-    PC%c**""<k
 	
rF   c               F    |rd}t        |      | j                  d d      S )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                "    | j                         S r4   )cumminr   s    rD   r   z"DaskExpr.cum_min.<locals>.<lambda>Z  r	  rF   cum_minr  r  s      rD   r  zDaskExpr.cum_minU  )    NC%c**""#=yIIrF   c               F    |rd}t        |      | j                  d d      S )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                "    | j                         S r4   )cummaxr   s    rD   r   z"DaskExpr.cum_max.<locals>.<lambda>a  r	  rF   cum_maxr  r  s      rD   r  zDaskExpr.cum_max\  r  rF   c               F    |rd}t        |      | j                  d d      S )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                "    | j                         S r4   )cumprodr   s    rD   r   z#DaskExpr.cum_prod.<locals>.<lambda>h  s     rF   cum_prodr  r  s      rD   r   zDaskExpr.cum_prodc  s)    OC%c**""#>
KKrF   c               6    | j                  fdd      S )Nc                H    | j                        j                         S N)windowmin_periodscenter)rollingsumr   r&  min_sampleswindow_sizes    rD   r   z&DaskExpr.rolling_sum.<locals>.<lambda>l  s&    "F & ce rF   rolling_sumr   r=   r+  r*  r&  s    ```rD   r,  zDaskExpr.rolling_sumj  s     "" 	
 	
rF   c               6    | j                  fdd      S )Nc                H    | j                        j                         S r#  )r'  r   r)  s    rD   r   z'DaskExpr.rolling_mean.<locals>.<lambda>t  s&    "F & df rF   rolling_meanr   r-  s    ```rD   r0  zDaskExpr.rolling_meanr  s     "" 	
 	
rF   c               Z    |dk(  r| j                  fdd      S d}t        |      )Nr{   c                H    | j                        j                         S r#  )r'  r   r)  s    rD   r   z&DaskExpr.rolling_var.<locals>.<lambda>  &    T\\&K * #% rF   rolling_varz5Dask backend only supports `ddof=1` for `rolling_var`r}   r  r=   r+  r*  r&  r   r   s    ```  rD   r4  zDaskExpr.rolling_varz  <     19&& 	  F!#&&rF   c               Z    |dk(  r| j                  fdd      S d}t        |      )Nr{   c                H    | j                        j                         S r#  )r'  r   r)  s    rD   r   z&DaskExpr.rolling_std.<locals>.<lambda>  r3  rF   rolling_stdz5Dask backend only supports `ddof=1` for `rolling_std`r5  r6  s    ```  rD   r:  zDaskExpr.rolling_std  r7  rF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )r(  r   r   s    rD   r   zDaskExpr.sum.<locals>.<lambda>  r   rF   r(  r   r   s    rD   r(  zDaskExpr.sum  r   rF   c                (    | j                  d d      S )Nc                >    | j                         j                         S r4   )countr   r   s    rD   r   z DaskExpr.count.<locals>.<lambda>  s    

0F0F0H rF   r?  r   r   s    rD   r?  zDaskExpr.count  s    ""#H'RRrF   c                .    | j                  fdd      S )Nc                &    | j                        S r4   )round)r   decimalss    rD   r   z DaskExpr.round.<locals>.<lambda>  s    

80D rF   rB  r   )r=   rC  s    `rD   rB  zDaskExpr.round  s    ""#DgNNrF   c                (    | j                  d d      S )Nc                "    | j                         S r4   )uniquer   s    rD   r   z!DaskExpr.unique.<locals>.<lambda>  r	  rF   rF  r   r   s    rD   rF  zDaskExpr.unique  s    ""#=xHHrF   c                (    | j                  d d      S )Nc                "    | j                         S r4   dropnar   s    rD   r   z%DaskExpr.drop_nulls.<locals>.<lambda>  r	  rF   
drop_nullsr   r   s    rD   rK  zDaskExpr.drop_nulls  s    ""#=|LLrF   c                (    | j                  d d      S )Nc                "    | j                         S r4   )absr   s    rD   r   zDaskExpr.abs.<locals>.<lambda>  s    
 rF   rN  r   r   s    rD   rN  zDaskExpr.abs  s    ""#:EBBrF   c                (    | j                  d d      S )Nc                H    | j                  d ddd       j                         S )NTF)axisskipnasplit_everyout)allr   r   s    rD   r   zDaskExpr.all.<locals>.<lambda>  s'    $Et " ik rF   rU  r   r   s    rD   rU  zDaskExpr.all  s    "" 	
 	
rF   c                (    | j                  d d      S )Nc                F    | j                  ddd      j                         S )Nr   TF)rQ  rR  rS  )anyr   r   s    rD   r   zDaskExpr.any.<locals>.<lambda>  s    q5ISSU rF   rX  r   r   s    rD   rX  zDaskExpr.any  s    ""U
 	
rF   c                     |t         j                  n||t        d      n|d fd} j                  |d      S )Nnanc                    t        d| | k7        }|j                  d      }t        | j                  j                        rn}| j                  ||      S )Nr   F)r   fillnar   r   r0   mask)r   r]  fillr=   value_nullablevalue_numpys      rD   rQ   zDaskExpr.fill_nan.<locals>.func  sW    TT\2D;;u%D %TZZ1E1EF   
 99T4((rF   fill_nanr   r   rT   r   )pdNAfloatr}   )r=   rv   rQ   r_  r`  s   `  @@rD   ra  zDaskExpr.fill_nan  s;    "'-U&+meEl		) ""444rF   c                <    dfd}| j                  |d      S )Nc                    | j                        }|S dk(  r| j                        n| j                        }|S )Nforward)limit)r\  ffillbfill)r   res_serri  strategyrv   s     rD   rQ   z DaskExpr.fill_null.<locals>.func  sR     ++e, N  9, JJUJ+%0 
 NrF   	fill_nullrb  r   )r=   rv   rm  ri  rQ   s    ``` rD   rn  zDaskExpr.fill_null  s    		 ""455rF   c                .    | j                  d d||      S )Nc                (    | j                  ||      S )N)lowerupper)clip)r   lower_boundupper_bounds      rD   r   zDaskExpr.clip.<locals>.<lambda>  s    499! 4= 4 rF   rs  )rt  ru  r   )r=   rt  ru  s      rD   rs  zDaskExpr.clip  s,    
 "" ## # 
 	
rF   c                (    | j                  d d      S )Nc                "    | j                         S r4   )diffr   s    rD   r   zDaskExpr.diff.<locals>.<lambda>      		 rF   rx  r   r   s    rD   rx  zDaskExpr.diff  s    ""#;VDDrF   c                (    | j                  d d      S )Nc                B    | j                  d      j                         S )NFrI  )nuniquer   r   s    rD   r   z#DaskExpr.n_unique.<locals>.<lambda>  s    U3==? rF   n_uniquer   r   s    rD   r}  zDaskExpr.n_unique  s    ""?
 	
rF   c                (    | j                  d d      S )Nc                "    | j                         S r4   )r  r   s    rD   r   z"DaskExpr.is_null.<locals>.<lambda>  ry  rF   is_nullr   r   s    rD   r  zDaskExpr.is_null  s    ""#;YGGrF   c                4     d fd} j                  |d      S )Nc                    t        | j                  j                  j                        }|j	                         r| | k7  S d| d}t        |      )Nz4`.is_nan` only supported for numeric dtypes and not z, did you mean `.is_null`?)r   r   r:   r0   r   r   )r   r   r   r=   s      rD   rQ   zDaskExpr.is_nan.<locals>.func  sT    ,

DMM4+?+?E !t|#HOijC',,rF   r  rb  r   r=   rQ   s   ` rD   is_nanzDaskExpr.is_nan  s    	- ""433rF   c                (    | j                  d d      S )Nc                6    | j                   j                         S r4   )sizer   r   s    rD   r   zDaskExpr.len.<locals>.<lambda>  s    		0C0C0E rF   lenr   r   s    rD   r  zDaskExpr.len  s    ""#EuMMrF   c                V    |dk(  rdd}| j                  |d|      S d}t        |      )Nlinearquantilec                |    | j                   dkD  rd}t        |      | j                  |d      j                         S )Nr{   zK`Expr.quantile` is not supported for Dask backend with multiple partitions.dask)qmethod)npartitionsr  r  r   )r   r  r   s      rD   rQ   zDaskExpr.quantile.<locals>.func  sB    ##a'gC-c22}}v % )+rF   )r  zx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.)r   r   r  re  rT   r   r5  )r=   r  interpolationrQ   r   s        rD   r  zDaskExpr.quantile   s>     H$ &&tZ(&KK I!#&&rF   c                .    dd}| j                  |d      S )Nc                    | j                   }t        d|g      }t        | j                         |      }|j	                  |      j                  |di      |   }||   j                  |      S )N   n_bytescolumnsr   r   r   r   to_framegroupbyaggisin)r   _name	col_tokenframefirst_distinct_indexs        rD   rQ   z(DaskExpr.is_first_distinct.<locals>.func  sg    IIE6q5'RI!$--/9=E#(==#7#;#;Y<N#OPY#Z #(()=>>rF   is_first_distinctrb  r   r  s     rD   r  zDaskExpr.is_first_distinct  s    	? ""4)<==rF   c                .    dd}| j                  |d      S )Nc                    | j                   }t        d|g      }t        | j                         |      }|j	                  |      j                  |di      |   }||   j                  |      S )Nr  r  r   r  )r   r  r  r  last_distinct_indexs        rD   rQ   z'DaskExpr.is_last_distinct.<locals>.func  sf    IIE6q5'RI!$--/9=E"'--"6":":Iu;M"Ny"Y#(()<==rF   is_last_distinctrb  r   r  s     rD   r  zDaskExpr.is_last_distinct  s    	> ""4);<<rF   c                .    dd}| j                  |d      S )Nc                    | j                   }| j                         j                  |d      j                  d|t        f      dk(  S )NFrI  r  )metar{   )r   r  r  	transformr  )r   r  s     rD   rQ   z DaskExpr.is_unique.<locals>.func&  sA    IIEu-65rF   	is_uniquerb  r   r  s     rD   r  zDaskExpr.is_unique%  s    	 ""455rF   c                .    | j                  fdd      S )Nc                &    | j                        S r4   )r  )r   r   s    rD   r   z DaskExpr.is_in.<locals>.<lambda>2  s    		%0@ rF   is_inr   r   s    `rD   r  zDaskExpr.is_in1  s    ""#@'JJrF   c                (    | j                  d d      S )Nc                Z    | j                         j                         j                         S r4   )r  r(  r   r   s    rD   r   z%DaskExpr.null_count.<locals>.<lambda>6  s    *446 rF   
null_countr   r   s    rD   r  zDaskExpr.null_count4  s    ""6
 	
rF   c                    ddl m} ssJ d fd}nU j                         sd}t        |      rd}t        |      |j	                         }	 |j
                  |   d fd
} j                  | j                  dz    j                  dz    j                   j                   j                        S # t        $ r/ d| ddj                  |j
                         d	}t        |      d w xY w)Nr   )PandasLikeGroupByc                6      | j                   ddd      S )NF)
descending
nulls_last)sort)rH   order_byr=   s    rD   rQ   zDaskExpr.over.<locals>.funcB  s    GBGGX%ERSSrF   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
                  j                  	      }dk(  rKt        |      dk7  rd}t        |       |j                  fi 
j                  j                  |d         }n) |t        |         j                  fi 
j                  }d d d        | j                  j                  t        t!        ||                        j
                  }|D cg c]  }||   	 c}S # 1 sw Y   ZxY wc c}w )	Nignorez.*`meta` is not specified)messagecategoryr  r{   z)Safety check failed, please report a bug.r   )r  )r   warningscatch_warningsfilterwarningsUserWarningrh   r  r  AssertionErrorr  r;   r  list_with_nativerenamedictzip)rH   r   aliasesgroupedr   
res_nativeresult_framer   dask_function_namepartition_byr=   s           rD   rQ   zDaskExpr.over.<locals>.func[  sA   (I$PRTV(W%g,,. ++  ;!,
 !ii//=G)V3|,1"MC"0"55%6W%6%6.&262E2E&"(<?3 # &KWT,-?%@%J%J.&262E2E&
!&  "%%d3|W3M.N%O &  8??tT*??- , @s   B1D0!D<0D9r{   z->overrb   rH   r!   rT   zSequence[dx.Series])narwhals._pandas_like.group_byr  _is_elementaryr  
_leaf_name_REMAP_AGGSr\   joinrU   r6   r7   r8   r9   r:   )r=   r  r  r  rQ   r   r@   r  s   ```    @rD   overzDaskExpr.over9  s   DO8T$$&_ 
 &c**HC%c**-88>M9%6%B%B=%Q"@6 ~~++/--8"&"="=#77MM  
 	
G  9 -]O <//3yy9J9V9V/W.XXZ\  *#.D89s   B= =8C5c                8     d fd} j                  |d      S )Nc                R    t        j                        }| j                  |      S r4   )r   r:   r  )r   native_dtyper   r=   s     rD   rQ   zDaskExpr.cast.<locals>.func  s"    3E4==IL;;|,,rF   r   rb  r   )r=   r   rQ   s   `` rD   r   zDaskExpr.cast  s    	- ""400rF   c                F    dd l m} | j                  |j                  d      S )Nr   	is_finite)
dask.arrayarrayr}   isfiniter=   das     rD   r  zDaskExpr.is_finite  s    ""2;;<<rF   c                D    dd l m dfd}| j                  |d      S )Nr   c                J    j                  |       j                        z  S r4   )log)r   baser  s    rD   _logzDaskExpr.log.<locals>._log  s    66$<"&&,..rF   r  rb  )r  r  r}   )r=   r  r  r  s    ` @rD   r  zDaskExpr.log  s     	/ ""4//rF   c                F    dd l m} | j                  |j                  d      S )Nr   exp)r  r  r}   r  r  s     rD   r  zDaskExpr.exp  s    ""266511rF   c                F    dd l m} | j                  |j                  d      S )Nr   sqrt)r  r  r}   r  r  s     rD   r  zDaskExpr.sqrt  s    ""277F33rF   c               <    dfd}| j                  |ddi      S )Nc                    | j                   }| j                         j                         |   }dk(  r|j                  d      S |S )NrX  r{   )r   r  modehead)r   r  rP   keeps      rD   rQ   zDaskExpr.mode.<locals>.func  s>    IIE]]_))+E2F%)U]6;;q>>>rF   r  r  r1   rb  r   )r=   r  rQ   s    ` rD   r  zDaskExpr.mode  s&    	?
 ""4~"NNrF   c                    t        |       S r4   r   r   s    rD   strzDaskExpr.str  s    &t,,rF   c                    t        |       S r4   r   r   s    rD   dtzDaskExpr.dt  s    (..rF   r   r  struct)r>   z$EvalSeries[DaskLazyFrame, dx.Series]r?   r  r@   r  rA   EvalNames[DaskLazyFrame]rB   AliasNames | NonerC   r%   r2   ScalarKwargs | NonerT   Noner  )rT   r#   )rV   z/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]rT   r   )
rc   z
type[Self]ra   r  rd   r&   r@   r  rT   r   )rk   r  rd   r&   rT   r   )rX   N)
r|   r  r2   r  r>   Callable[..., dx.Series]rz   z
Self | AnyrT   r   )rQ   r  rT   r   )
r>   z%Callable[[dx.Series, Any], dx.Series]r   r  r   r   r   boolrT   r   )r   r  r   r   rT   r   )r   r  r   r  r   r   rT   r   )r   r   rT   r   )r   objectrT   r   )rT   r   )r   r  rT   r   )r  r  rT   r   )r   r  rT   r   )r+  r  r*  r  r&  r  rT   r   )
r+  r  r*  r  r&  r  r   r  rT   r   )rC  r  rT   r   )rv   zfloat | NonerT   r   )rv   zSelf | NonNestedLiteralrm  zFillNullStrategy | Noneri  z
int | NonerT   r   )rt  .Self | NumericLiteral | TemporalLiteral | Noneru  r  rT   r   )r  re  r  r,   rT   r   )r  Sequence[str]r  r  rT   r   )r   r(   rT   r   )r  re  rT   r   )r  r)   rT   r   )rT   r   )rT   r   )^__name__
__module____qualname__r   r   r0   __annotations__rE   rI   rL   rW   classmethodre   rn   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
  r  r  r  r   r,  r0  r4  r:  r(  r?  rB  rF  rK  rN  rU  rX  ra  rn  rs  rx  r}  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  propertyr  r  r   rankr  r  r   rF   rD   r/   r/   /   s    '5&9&9O^9 .2323 	3
 3  83 .3 3 +3 
3(4

    

7

 !
 
 

 
8 
 
$ -1

 
 +
 '
  *
 

>
2 3  	  




+C
LO
	
111561100000010NRTMNQQ
3OO

QYHJ
JJL

''03'=A'IL'	'''03'=A'IL'	'OSOIMC

5"6&6 *6 	6
 
6&
C
 D
 
	
E

H
4N''.H'	'">=
6K

D
L1=
02
4
O - - / / D ,-D/--/FO/rF   r/   )r!   r   )?
__future__r   r  typingr   r   r   r   r   pandasrc  narwhals._compliantr	   r
   narwhals._dask.expr_dtr   narwhals._dask.expr_strr   narwhals._dask.utilsr   r   r   narwhals._expression_parsingr   r   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!   rK   r#   r$   r%   r&   narwhals.typingr'   r(   r)   r*   r+   r,   r-   r/   r   rF   rD   <module>r     s    "  > >  ; < ; 
 U S 
 6())&ZZ66C8  B
0)*23B
0rF   