
    ei(h                       d dl mZ d dlZd dl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!m"Z" d dl#m$Z$ erGd 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l6m7Z7 d dlm8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z> ddZ?ddZ@ddZAddZB G d ded   ed         ZCy)    )annotationsN)TYPE_CHECKINGAnyCallablecast)DepthTrackingExprLazyExprDaskExprDateTimeNamespaceDaskExprStringNamespace)add_row_indexalign_series_full_broadcastmake_group_by_kwargsnarwhals_to_native_dtype)evaluate_nodes!evaluate_output_names_and_aliases)"window_kwargs_to_pandas_equivalent)get_dtype_backendnative_to_narwhals_dtype)Implementationgenerate_temporary_column_name
no_defaultnot_implementedInvalidOperationError)Sequence)Self)
AliasNames	EvalNames
EvalSeriesNarwhalsAggregation)DaskLazyFrameDaskNamespace)	NoDefault)Version_LimitedContext)FillNullStrategy	IntoDTypeModeKeepStrategyRollingInterpolationMethodc                      fdS )Nc                0    | j                  fd      S )Nc                D     t        |       di j                         S N )getattr	to_seriesexprattrkwargss    U/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_dask/expr.py<lambda>z6simple_aggregation.<locals>.<lambda>.<locals>.<lambda>7   s"    (WT4(262<<>     _with_callableselfr7   r6   s    `r8   r9   z$simple_aggregation.<locals>.<lambda>6   s    $"5"5># r:   r1   r6   s   `r8   simple_aggregationr@   4        r:   c                      fdS )Nc                0    | j                  fd      S )Nc                (     t        |       di S r0   r2   r4   s    r8   r9   z1simple_method.<locals>.<lambda>.<locals>.<lambda>>   s    (WT4(262 r:   r;   r=   s    `r8   r9   zsimple_method.<locals>.<lambda>=   s    $"5"52# r:   r1   r?   s   `r8   simple_methodrF   ;   rA   r:   c                      fdS )Nc                (    | j                  |      S N)
_binary_op)r>   otherr6   s     r8   r9   zsimple_binary.<locals>.<lambda>D   s    ttU; r:   r1   r?   s   `r8   simple_binaryrL   B   s	    ;;r:   c                      fdS )Nc                (    | j                  |      S rI   )_reverse_binary_op)r>   rK   ops     r8   r9   z&trivial_binary_right.<locals>.<lambda>I   s    t66r5A r:   r1   )rP   s   `r8   trivial_binary_rightrQ   G   s	    AAr:   c                  V   e Zd ZU ej                  Zded<    ed      Z ed      Z	 ed      Z
 ed      Z ed      Z ed      Z ed	      Z ed
      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed       Z ed       Z ed       Z ed       Z ed      Z ed      Z ed      Z ed      Z ed      Z  ed      Z! ed      Z" ed      Z# ed      Z$ ed      Z% ed      Z& e'd       Z( e'd!      Z) e'd"      Z* e'd#      Z+ e'd$      Z, e'd%      Z- e'd&      Z.	 	 	 	 	 	 	 	 	 	 d_d'Z/d`d(Z0dad)Z1dbd*Z2e3	 	 	 	 	 	 	 	 dcd+       Z4e3ddd,       Z5	 	 	 	 	 	 ded-Z6dfd.Z7	 	 	 	 	 	 dgd/Z8dhd0Z9	 	 	 	 	 	 did1Z:djd2Z;djd3Z<dbd4Z=dkd5Z>dld6Z?dld7Z@dld8ZAdld9ZBdld:ZCdmd;ZDdmd<ZE	 	 	 	 	 	 	 	 	 	 dnd=ZF	 	 	 	 	 	 	 	 	 	 dnd>ZGdbd?ZHdbd@ZIdodAZJ	 	 	 	 	 	 	 	 dpdBZKdqdCZLdrdDZMdsdEZNdbdFZOdbdGZPdbdHZQ	 	 	 	 	 	 dtdIZRdbdJZSdbdKZTdbdLZUdjdMZVdbdNZWdudOZXdvdPZYdwdQZZdbdRZ[dxdSZ\dbdTZ]dbdUZ^dbdVZ_dydWZ`	 	 	 	 	 	 	 	 	 	 dzdXZaebd{dY       Zcebd|dZ       Zd ee       Zf ee       Zg ee       Zh ee       Zi ee       Zj ee       Zkd[ed\<    ee       Zld[ed]<   y^)}DaskExprr   _implementation__add____sub____mul____truediv____pow____mod____eq____ne____gt____ge____lt____le____and____or__c                    | |z
  S rI   r1   xys     r8   r9   zDaskExpr.<lambda>b   
    Q r:   c                    | |z  S rI   r1   rd   s     r8   r9   zDaskExpr.<lambda>c   s
    QU r:   c                    | |z  S rI   r1   rd   s     r8   r9   zDaskExpr.<lambda>d   s
    A r:   c                    | |z  S rI   r1   rd   s     r8   r9   zDaskExpr.<lambda>e   rg   r:   allanycountkurtosismaxmeanminskewstdsumvar
__invert__absdiffdropnaisnarounduniquec               <    || _         || _        || _        || _        y rI   )_call_evaluate_output_names_alias_output_names_version)r>   callevaluate_output_namesalias_output_namesversions        r8   __init__zDaskExpr.__init__y   s"     
&;##5 r:   c                $    | j                  |      S rI   )r~   )r>   dfs     r8   __call__zDaskExpr.__call__   s    zz"~r:   c                4    ddl m}  || j                        S )Nr   r$   )r   )narwhals._dask.namespacer%   r   )r>   r%   s     r8   __narwhals_namespace__zDaskExpr.__narwhals_namespace__   s    :T]]33r:   c                v     d fd} j                  | j                   j                   j                        S )Nc                Z     |       D cg c]  }|j                   d   d    c}S c c}w Nr   )loc)r   resultr>   s     r8   funcz DaskExpr.broadcast.<locals>.func   s*     488<FJJqM!$<<<s   (r   r   r   r   r#   returnzlist[dx.Series]	__class__r   r   r   r>   r   s   ` r8   	broadcastzDaskExpr.broadcast   s<    	=
 ~~"&"="=#77MM	  
 	
r:   c              <    df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rI   )_native_frameKeyError_check_columns_exist)r   column_nameeerrorevaluate_column_namess       r8   r   z(DaskExpr.from_column_names.<locals>.func   ss     (=R'@# $$[1    334I"4MNN5NQ&s    
+ &+ + 	AAAr   r   )r   )clsr   contextr   s    `  r8   from_column_nameszDaskExpr.from_column_names   s)    		 "7#$$	
 	
r:   c               Z    dfd} | || j                        d |j                        S )Nc                d    D cg c]  }| j                   j                  d d |f   ! c}S c c}w rI   )nativeiloc)r   icolumn_indicess     r8   r   z*DaskExpr.from_column_indices.<locals>.func   s(    2@AQBIINN1a4(AAAs   $-r   r   )_eval_names_indicesr   )r   r   r   r   s     ` r8   from_column_indiceszDaskExpr.from_column_indices   s5    	B "%"9"9."I#$$	
 	
r:   c               ~     d fd} j                  | j                   j                   j                        S )Nc                    g }
j                  |       }	j                         D ci c]  \  }}|| j                  |       }}}|D ]  } |fi |}|j                  |        |S c c}}w rI   )r~   items_evaluate_single_output_exprappend)r   native_resultsnative_series_listkeyvalueother_native_seriesnative_seriesresult_nativer   expressifiable_argsr>   s           r8   r   z%DaskExpr._with_callable.<locals>.func   s    .0N!%B #6";";"=#C R44U;;# # "4 5 $] J6I J%%m45 "!#s   A*r   r   r   )r>   r   r   r   s   ``` r8   r<   zDaskExpr._with_callable   s<    
	" ~~"&"="=#77MM	  
 	
r:   c                   | j                   d n	nfd} t        |       | j                  | j                  || j                        S )Nc                       |             S rI   r1   )output_namescurrent_alias_output_namesr   s    r8   r9   z3DaskExpr._with_alias_output_names.<locals>.<lambda>   s    d+El+S&T r:   )r   r   r   r   )r   typer~   r   r   )r>   r   r   r   s    ` @r8   _with_alias_output_namesz!DaskExpr._with_alias_output_names   s_    %)%=%=" |  *1 T 	 tDz"&"="=1MM	
 	
r:   c                0    | j                  fd|      S )Nc                     | |      S rI   r1   )r5   rK   r   s     r8   r9   z'DaskExpr._with_binary.<locals>.<lambda>   s    tD%7H r:   )rK   r;   )r>   r   rK   s    ` r8   _with_binaryzDaskExpr._with_binary   s     ""#HPU"VVr:   c                .    | j                  fd|      S )Nc                (     t        |       |      S rI   rE   )r5   rK   op_names     r8   r9   z%DaskExpr._binary_op.<locals>.<lambda>   s    5KWT75KE5R r:   )r   )r>   r   rK   s    ` r8   rJ   zDaskExpr._binary_op   s      !RTYZZr:   c                L    | j                  fd|      j                  d      S )Nc                     ||       S rI   r1   )r5   rK   operator_funcs     r8   r9   z-DaskExpr._reverse_binary_op.<locals>.<lambda>   s    eT : r:   literal)r   alias)r>   r   rK   s    ` r8   rO   zDaskExpr._reverse_binary_op   s'       :E

%	
	r:   c                     	 	 	 	 	 	 	 	 ddd fd} j                  | j                   j                   j                        S )Nc                j    t        | ||      \  }}|j                  |      j                  |dk7  d       S r   r   __floordiv__wherer   seriesrK   s      r8   	_floordivz(DaskExpr.__floordiv__.<locals>._floordiv   s8     8FEJMFE''.55eqj$GGr:   c                l    | j                        } |       D cg c]  } | ||       c}S c c}w rI   r   )r   other_seriesr   r   rK   r>   s      r8   r   z#DaskExpr.__floordiv__.<locals>.func  s4    ::5ALFJ2hOFIb&,7OOO   1r   r   r#   r   	dx.SeriesrK   r   r   r   r   r   )r>   rK   r   r   s   `` @r8   r   zDaskExpr.__floordiv__   sg    	H	H'0	H9B	H	H	P ~~"&"="=#77MM	  
 	
r:   c                     	 	 	 	 	 	 	 	 ddd fd} j                  | j                   j                   j                        j	                  d      S )Nc                j    t        | ||      \  }}|j                  |      j                  |dk7  d       S r   r   r   s      r8   
_rfloordivz*DaskExpr.__rfloordiv__.<locals>._rfloordiv  s8     8FEJMFE&&v.55fk4HHr:   c                l    | j                        } |       D cg c]  } | ||       c}S c c}w rI   r   )r   other_nativer   r   rK   r>   s      r8   r   z$DaskExpr.__rfloordiv__.<locals>.func  s4    ::5ALGKBxPVJr6<8PPPr   r   r   r   r   )r   r   r   r   r   )r>   rK   r   r   s   `` @r8   __rfloordiv__zDaskExpr.__rfloordiv__  ss    	I	I'0	I9B	I	I	Q ~~"&"="=#77MM	  

 %	
	r:   c                B     ddl m d fd} j                  |      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_approximater3   )sr   msgr   r>   s      r8   r   zDaskExpr.median.<locals>.func!  sS    ,QWWdmm^EXEXYE##%T+C00'')3355r:   )r   r   r   r   )narwhals.exceptionsr   r<   )r>   r   r   s   ` @r8   medianzDaskExpr.median  s    =	6 ""4((r:   c                ,    | j                  fd      S )Nc                &    | j                        S rI   )shift)r5   ns    r8   r9   z DaskExpr.shift.<locals>.<lambda>+  s    

1 r:   r;   )r>   r   s    `r8   r   zDaskExpr.shift*  s    ""#=>>r:   c               D    |rd}t        |      | j                  d       S )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                "    | j                         S rI   )cumsumr5   s    r8   r9   z"DaskExpr.cum_sum.<locals>.<lambda>3       r:   NotImplementedErrorr<   r>   reverser   s      r8   cum_sumzDaskExpr.cum_sum-  s'    NC%c**""#=>>r:   c               D    |rd}t        |      | j                  d       S )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                f    | j                          j                  t              j                         S rI   )rz   astypeintr   r   s    r8   r9   z$DaskExpr.cum_count.<locals>.<lambda>:  s"    $))+0E0Ec0J0Q0Q0S r:   r   r   s      r8   	cum_countzDaskExpr.cum_count5  s'    PC%c**""#STTr:   c               D    |rd}t        |      | j                  d       S )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                "    | j                         S rI   )cumminr   s    r8   r9   z"DaskExpr.cum_min.<locals>.<lambda>A  r   r:   r   r   s      r8   cum_minzDaskExpr.cum_min<  '    NC%c**""#=>>r:   c               D    |rd}t        |      | j                  d       S )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                "    | j                         S rI   )cummaxr   s    r8   r9   z"DaskExpr.cum_max.<locals>.<lambda>H  r   r:   r   r   s      r8   cum_maxzDaskExpr.cum_maxC  r  r:   c               D    |rd}t        |      | j                  d       S )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                "    | j                         S rI   )cumprodr   s    r8   r9   z#DaskExpr.cum_prod.<locals>.<lambda>O  s     r:   r   r   s      r8   cum_prodzDaskExpr.cum_prodJ  s'    OC%c**""#>??r:   c               4    | j                  fd      S )Nc                H    | j                        j                         S N)windowmin_periodscenter)rollingrt   r5   r  min_sampleswindow_sizes    r8   r9   z&DaskExpr.rolling_sum.<locals>.<lambda>S  s&    "F & ce r:   r;   r>   r  r  r  s    ```r8   rolling_sumzDaskExpr.rolling_sumQ  s    ""
 	
r:   c               4    | j                  fd      S )Nc                H    | j                        j                         S r  )r  rp   r  s    r8   r9   z'DaskExpr.rolling_mean.<locals>.<lambda>Z  s&    "F & df r:   r;   r  s    ```r8   rolling_meanzDaskExpr.rolling_meanX  s    ""
 	
r:   c               X    |dk(  r| j                  fd      S d}t        |      )N   c                H    | j                        j                         S r  )r  ru   r  s    r8   r9   z&DaskExpr.rolling_var.<locals>.<lambda>d  &    T\\&K * #% r:   z5Dask backend only supports `ddof=1` for `rolling_var`r<   r   r>   r  r  r  ddofr   s    ```  r8   rolling_varzDaskExpr.rolling_var_  7     19&& 
 F!#&&r:   c               X    |dk(  r| j                  fd      S d}t        |      )Nr  c                H    | j                        j                         S r  )r  rs   r  s    r8   r9   z&DaskExpr.rolling_std.<locals>.<lambda>p  r  r:   z5Dask backend only supports `ddof=1` for `rolling_std`r  r  s    ```  r8   rolling_stdzDaskExpr.rolling_stdk  r!  r:   c                D    dd l m} | j                  |j                        S r   )
dask.arrayarrayr<   floorr>   das     r8   r(  zDaskExpr.floorw  s    ""288,,r:   c                D    dd l m} | j                  |j                        S r   )r&  r'  r<   ceilr)  s     r8   r,  zDaskExpr.ceil|      ""277++r:   c                     |t         j                  n||t        d      n|d fd} j                  |      S )Nnanc                    t        d| | k7        }|j                  d      }t        | j                  j                        rn}| j                  ||      S )Nr   F)r   fillnar   r   rT   mask)r5   r2  fillr>   value_nullablevalue_numpys      r8   r   zDaskExpr.fill_nan.<locals>.func  sW    TT\2D;;u%D %TZZ1E1EF   
 99T4((r:   r5   r   r   r   )pdNAfloatr<   )r>   r   r   r4  r5  s   `  @@r8   fill_nanzDaskExpr.fill_nan  s9    "'-U&+meEl		) ""4((r:   c                :    dfd}| j                  |      S )Nc                    | j                        }|S dk(  r| j                        n| j                        }|S )Nforward)limit)r1  ffillbfill)r5   res_serr>  strategyr   s     r8   r   z DaskExpr.fill_null.<locals>.func  sR     ++e, N  9, JJUJ+%0 
 Nr:   r6  r;   )r>   r   rB  r>  r   s    ``` r8   	fill_nullzDaskExpr.fill_null  s    		 ""4((r:   c                ,    | j                  d ||      S )Nc                (    | j                  ||      S )N)lowerupperclip)r5   lower_boundupper_bounds      r8   r9   zDaskExpr.clip.<locals>.<lambda>  s    499! 4= 4 r:   )rJ  rK  r;   )r>   rJ  rK  s      r8   rI  zDaskExpr.clip  s'    "" $# # 
 	
r:   c                *    | j                  d |      S )Nc                &    | j                  |      S )N)rF  rH  )r5   rJ  s     r8   r9   z%DaskExpr.clip_lower.<locals>.<lambda>      diiki&B r:   )rJ  r;   )r>   rJ  s     r8   
clip_lowerzDaskExpr.clip_lower       ""B# # 
 	
r:   c                *    | j                  d |      S )Nc                &    | j                  |      S )N)rG  rH  )r5   rK  s     r8   r9   z%DaskExpr.clip_upper.<locals>.<lambda>  rN  r:   )rK  r;   )r>   rK  s     r8   
clip_upperzDaskExpr.clip_upper  rP  r:   c                &    | j                  d       S )Nc                B    | j                  d      j                         S )NF)ry   )nuniquer3   r   s    r8   r9   z#DaskExpr.n_unique.<locals>.<lambda>  s    E0J0T0T0V r:   r;   r>   s    r8   n_uniquezDaskExpr.n_unique  s    ""#VWWr:   c                2     d fd} j                  |      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   rT   r   r   )r5   r   r   r>   s      r8   r   zDaskExpr.is_nan.<locals>.func  sT    ,

DMM4+?+?E !t|#HOijC',,r:   r6  r;   r   s   ` r8   is_nanzDaskExpr.is_nan  s    	- ""4((r:   c                &    | j                  d       S )Nc                6    | j                   j                         S rI   )sizer3   r   s    r8   r9   zDaskExpr.len.<locals>.<lambda>  s    		0C0C0E r:   r;   rW  s    r8   lenzDaskExpr.len  s    ""#EFFr:   c                V    |dk(  rdfd}| j                  |      S d}t        |      )Nlinearc                ~    | 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   quantiler3   )r5   r   rg  s     r8   r   zDaskExpr.quantile.<locals>.func  sC    ##a'gC-c22}}v % )+r:   zx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.r6  r  )r>   rg  interpolationr   r   s    `   r8   rg  zDaskExpr.quantile  s8     H$ &&t,, I!#&&r:   c                ,    dd}| j                  |      S )Nc                    | j                   }t        d|gd      }t        | j                         |      }t	        d      } |j
                  |fi |j                  |di      |   }||   j                  |      S )N   
row_index_n_bytescolumnsprefixFdrop_null_keysrq   namer   r   to_framer   groupbyaggisin)r5   _name	col_tokenframegroup_by_kwargsfirst_distinct_indexs         r8   r   z(DaskExpr.is_first_distinct.<locals>.func  s    IIE6E7<I "$--/9=E2%HO#05==#J/#J#N#NE"$$  #(()=>>r:   r6  r;   r   s     r8   is_first_distinctzDaskExpr.is_first_distinct  s    
	? ""4((r:   c                ,    dd}| j                  |      S )Nc                    | j                   }t        d|gd      }t        | j                         |      }t	        d      } |j
                  |fi |j                  |di      |   }||   j                  |      S )Nrk  rl  rm  Frq  ro   rs  )r5   ry  rz  r{  r|  last_distinct_indexs         r8   r   z'DaskExpr.is_last_distinct.<locals>.func  s    IIE6E7<I "$--/9=E2%HO"/%--"I"I"M"ME"## #(()<==r:   r6  r;   r   s     r8   is_last_distinctzDaskExpr.is_last_distinct  s    
	> ""4((r:   c                ,    dd}| j                  |      S )Nc                    | j                   }t        d      } | j                         j                  |fi |j	                  d|t
        f      dk(  S )NFrq  r^  )metar  )rt  r   ru  rv  	transformr   )r5   ry  r|  s      r8   r   z DaskExpr.is_unique.<locals>.func  sU    IIE2%HO3"1365r:   r6  r;   r   s     r8   	is_uniquezDaskExpr.is_unique  s    	 ""4((r:   c                ,    | j                  fd      S )Nc                &    | j                        S rI   )rx  )r5   rK   s    r8   r9   z DaskExpr.is_in.<locals>.<lambda>  s    		%0@ r:   r;   )r>   rK   s    `r8   is_inzDaskExpr.is_in  s    ""#@AAr:   c                &    | j                  d       S )Nc                Z    | j                         j                         j                         S rI   )rz   rt   r3   r   s    r8   r9   z%DaskExpr.null_count.<locals>.<lambda>	  s    		0A0K0K0M r:   r;   rW  s    r8   
null_countzDaskExpr.null_count  s    ""#MNNr:   c                z     d fd} j                  | j                   j                   j                        S )Nc                6      | j                   ddd      S )NF)
descending
nulls_last)sort)r   order_byr>   s    r8   r   z1DaskExpr._over_without_partition_by.<locals>.func  s    eNOOr:   r   r   r#   r   zSequence[dx.Series]r   )r>   r  r   s   `` r8   _over_without_partition_byz#DaskExpr._over_without_partition_by  s=    	P ~~"&"="=#77MM	  
 	
r:   c                   	
 s|sJ  j                  |      S ddlm}  j                  
r/
j                  #
j                  j
                  sd}t        |      |rd}t        |      t        t        t         j                  j                                           d   }t        d|j                        }	 |j                  |   t        ||j                         	d	
 fd} j#                  | j$                   j&                   j(                        S # t        $ r/ d| dd	j                  |j                         d
}t        |      d w xY w)Nr   )PandasLikeGroupByzOnly elementary expressions are supported for `.over` in dask backend when `partition_by` is specified.

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

Supported functions are z, 
c           
        j                         }j                  (| j                  t        dt	        d d |                  } t        | g       \  }}t        j                         5  t        j                  ddt               t        d      } | j                  j                  fi |}
dk(  rAt        |      d	k7  rd
}t        |       |j                  
fi j!                  |d         }n |t#        |         j                  
fi }d d d        | j%                        j                  }|D 	cg c]  }	||	   	 c}	S # 1 sw Y   7xY wc c}	w )NrS   r  ignorez.*`meta` is not specified)messagecategoryFrq  r^  r  z)Safety check failed, please report a bug.r   )r   prevwith_columnsr   r   r   warningscatch_warningsfilterwarningsUserWarningr   r   rv  r_  AssertionErrorr  ru  list_with_native)r   plx_aliasesr|  groupedr   
res_nativeresult_framert  dask_function_namedask_kwargsr  nodespartition_byr>   s             r8   r   zDaskExpr.over.<locals>.funcE  sY   --/Cyy$__T*nU3BZQT6U%VW:4RHJAw((* ''&AK #7e"L+"))++LLOL%/7|q(I,S11!2!2!2*".9"hwqz*  "Bg!7!A!A*".9"J$ ??:6==L3:;4L&;;' & <s   *B+E<EEr   r  )r  narwhals._pandas_like.group_byr  	_metadatar  is_elementwiser   r  reversediter_nodes_reversedr   rt  _REMAP_AGGSr   joinr   r7   r   r   r   r   )r>   r  r  r  r   	leaf_nodefunction_namer   r  r  r  r  s   ``      @@@@r8   overzDaskExpr.over  sf   O8228<<D ~~II!$))*B*B_  &c**HC%c**Xd4>>#E#E#GHIJ"I	2INNC	5!2!>!>}!M 9	HXHXY	< 	<6 ~~"&"="=#77MM	  
 	
I  	5 ) 8++/995F5R5R+S*TTVX  &c*4	5s   D$ $8Ec                6     d fd} j                  |      S )Nc                R    t        j                        }| j                  |      S rI   )r   r   r   )r5   native_dtyper   r>   s     r8   r   zDaskExpr.cast.<locals>.funch  s"    3E4==IL;;|,,r:   r6  r;   )r>   r   r   s   `` r8   r   zDaskExpr.castg  s    	- ""4((r:   c                D    dd l m} | j                  |j                        S r   )r&  r'  r<   isfiniter)  s     r8   	is_finitezDaskExpr.is_finiten  s    ""2;;//r:   c                B    dd l m dfd}| j                  |      S )Nr   c                J    j                  |       j                        z  S rI   )log)r5   baser*  s    r8   _logzDaskExpr.log.<locals>._logv  s    66$<"&&,..r:   r6  )r&  r'  r<   )r>   r  r  r*  s    ` @r8   r  zDaskExpr.logs  s    	/ ""4((r:   c                D    dd l m} | j                  |j                        S r   )r&  r'  r<   expr)  s     r8   r  zDaskExpr.exp{      ""266**r:   c                D    dd l m} | j                  |j                        S r   )r&  r'  r<   sinr)  s     r8   r  zDaskExpr.sin  r  r:   c                D    dd l m} | j                  |j                        S r   )r&  r'  r<   sqrtr)  s     r8   r  zDaskExpr.sqrt  r-  r:   c               2    dfd}| j                  |      S )Nc                    | j                   }| j                         j                         |   }dk(  r|j                  d      S |S )Nrl   r  )rt  ru  modehead)r5   ry  r   keeps      r8   r   zDaskExpr.mode.<locals>.func  s>    IIE]]_))+E2F%)U]6;;q>>>r:   r6  r;   )r>   r  r   s    ` r8   r  zDaskExpr.mode  s    	?
 ""4((r:   c                    t         u rd}t        |      t        t        ||            t	        |      d fd} j                  | j                   j                   j                        S )NzK`replace_strict` requires an explicit value for `default` for dask backend.c                2   | j                        } 
|       D cg c]2  }|j                        j                  |j                        |      4 }}	r5t	        	
j
                        }|D cg c]  }|j                  |       c}S |S c c}w c c}w rI   )r   replacer   rx  r   r   r   )r   default_seriesr   resultsr  resdefaultmappingold_return_dtyper>   s         r8   r   z%DaskExpr.replace_strict.<locals>.func  s    <<WEN #2h w'--fkk$.?PG 
 7dmmT<CDS

<0DDN Es   7B2Br   r   )	r   
ValueErrordictzipr  r   r   r   r   )	r>   r  oldnewr  r   r   r  r  s	   ``  `  @@r8   replace_strictzDaskExpr.replace_strict  ss     j _CS/!s3}%Cy	 	 ~~"&"="=#77MM	  
 	
r:   c                    t        |       S rI   r   rW  s    r8   strzDaskExpr.str  s    &t,,r:   c                    t        |       S rI   r
   rW  s    r8   dtzDaskExpr.dt  s    (..r:   r   r  structN)
r   z$EvalSeries[DaskLazyFrame, dx.Series]r   EvalNames[DaskLazyFrame]r   AliasNames | Noner   r'   r   Noner  )r   r%   )r   r   )r   z
type[Self]r   r  r   r(   r   r   )r   r   r   r(   r   r   )r   Callable[..., dx.Series]r   r   r   r   )r   r  r   r   )r   z%Callable[[dx.Series, Any], dx.Series]rK   r   r   r   )r   r  rK   r   r   r   )r   r  rK   r   r   r   )rK   r   r   r   )r   r   r   r   )r   boolr   r   )r  r   r  r   r  r  r   r   )
r  r   r  r   r  r  r  r   r   r   )r   zfloat | Noner   r   )r   zSelf | NonerB  zFillNullStrategy | Noner>  z
int | Noner   r   )rJ  r   rK  r   r   r   )rJ  r   r   r   )rK  r   r   r   )rg  r9  rh  r,   r   r   )r  Sequence[str]r   r   )r  r  r  r  r   r   )r   r*   r   r   )r  r9  r   r   )r  r+   r   r   )
r  zDaskExpr | NoDefaultr  Sequence[Any]r  r  r  zIntoDType | Noner   r   )r   r   )r   r   )m__name__
__module____qualname__r   r   rT   __annotations__rL   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rQ   __rsub____rtruediv____rpow____rmod__r@   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rF   rv   rw   rx   
drop_nullsis_nullr{   r|   r   r   r   r   classmethodr   r   r<   r   r   rJ   rO   r   r   r   r   r   r   r   r  r	  r  r  r   r$  r(  r,  r:  rC  rI  rO  rS  rX  r[  r_  rg  r~  r  r  r  r  r  r  r   r  r  r  r  r  r  r  propertyr  r  r   	any_valuefilterfirstranklastr  r  r1   r:   r8   rS   rS   L   sp    '5&9&9O^9 I&GI&GI&G.KI&GI&G8$F8$F8$F8$F8$F8$FI&G8$F#$67H'(:;L#$56H#$67H
U
#C
U
#Cw'E!*-H
U
#Cf%D
U
#Cf%D
U
#C
U
#C
U
#C|,J

C Dx(JF#G'"E8$F 2   8	 
 .    
 4

 

7

 !
 

 
2 	
 	

 '

  $
 

4
 W9WBEW	W
[5>A	
$$
)??U??@


'
'03
'=A
'IL
'	
'
'
'03
'=A
'IL
'	
'-
,
)") ),C)LV)	) 


X
)G''.H'	'")))BO
M
^)0
)+
+
,
)!
%!
 !
 	!
 '!
 
!
F - - / /  !IFEDD ,-D/--/FO/r:   rS   )r#   r   )r6   r  r   r   )rP   r  r   r   )D
__future__r   r  typingr   r   r   r   pandasr7  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   r   collections.abcr   dask.dataframe.dask_expr	dataframe	dask_exprdxtyping_extensionsr   narwhals._compliant.typingr   r    r!   r"   narwhals._dask.dataframer#   r   r%   narwhals._typingr&   r'   r(   narwhals.typingr)   r*   r+   r,   r@   rF   rL   rQ   rS   r1   r:   r8   <module>r     s    "  5 5  ; < ;  [ I S  6())&  76*8 <
B
y	0)*23y	0r:   