
    Lpji                       S SK Jr  S SKrS SKJrJrJr  S SKrS SK	J
r
Jr  S SKJr  S SKJr  S SKJrJrJrJr  S SKJrJr  S S	KJr  S S
KJrJr  S SKJrJrJ r J!r!  S SK"J#r#  \(       aI  S SK$J%r%J&r&  S SK'J(s  J)r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  S SKJ8r8J9r9  S SK:J;r;J<r<J=r=J>r>  SS jr?SS jr@SS jrASS jrB " S S\S   \
S   5      rCg)    )annotationsN)TYPE_CHECKINGAny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)
NO_DEFAULTImplementationgenerate_temporary_column_namenot_implementedInvalidOperationError)CallableSequence)Self)
AliasNames	EvalNames
EvalSeriesNarwhalsAggregation)DaskLazyFrameDaskNamespace)	NoDefault)Version_LimitedContext)FillNullStrategy	IntoDTypeModeKeepStrategyRollingInterpolationMethodc                   ^  U 4S j$ )Nc                2   >^ U R                  UU4S j5      $ )Nc                D   > [        U T5      " S0 TD6R                  5       $ N )getattr	to_seriesexprattrkwargss    O/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/narwhals/_dask/expr.py<lambda>6simple_aggregation.<locals>.<lambda>.<locals>.<lambda>7   s    WT4(262<<>    _with_callableselfr7   r6   s    `r8   r9   $simple_aggregation.<locals>.<lambda>6   s    $"5"5>#r;   r1   r6   s   `r8   simple_aggregationrB   4        r;   c                   ^  U 4S j$ )Nc                2   >^ U R                  UU4S j5      $ )Nc                (   > [        U T5      " S0 TD6$ r0   r2   r4   s    r8   r9   1simple_method.<locals>.<lambda>.<locals>.<lambda>>   s    WT4(262r;   r<   r>   s    `r8   r9   simple_method.<locals>.<lambda>=   s    $"5"52#r;   r1   rA   s   `r8   simple_methodrJ   ;   rC   r;   c                   ^  U 4S j$ )Nc                (   > U R                  TU5      $ N)
_binary_op)r?   otherr6   s     r8   r9   simple_binary.<locals>.<lambda>D   s    ttU;r;   r1   rA   s   `r8   simple_binaryrQ   B   s	    ;;r;   c                   ^  U 4S j$ )Nc                (   > U R                  TU5      $ rM   )_reverse_binary_op)r?   rO   ops     r8   r9   &trivial_binary_right.<locals>.<lambda>I   s    t66r5Ar;   r1   )rU   s   `r8   trivial_binary_rightrW   G   s	    AAr;   c                     \ rS rSr% \R
                  rS\S'   \" S5      r	\" S5      r
\" S5      r\" S5      r\" S5      r\" S	5      r\" S
5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S 5      r\" S 5      r\" S 5      r\" S 5      r\" S5      r\" S5      r\" S5      r\" S5      r \" S5      r!\" S5      r"\" S5      r#\" S5      r$\" S5      r%\" S5      r&\" S 5      r'\(" S!5      r)\(" S"5      r*\(" S#5      r+\(" S$5      r,\(" S%5      r-\(" S&5      r.\(" S'5      r/\(" S(5      r0          ScS) jr1SdS* jr2SeS+ jr3SfS, jr4\5        SgS- j5       r6\5ShS. j5       r7 Si     SjS0 jjr8SkS1 jr9      SlS3 jr:SmS4 jr;      SnS5 jr<SoS6 jr=SoS7 jr>SfS8 jr?SpS9 jr@SqS: jrASqS; jrBSqS< jrCSqS= jrDSqS> jrESrS? jrFSrS@ jrG          SsSA jrH          SsSB jrISfSC jrJSfSD jrKStSE jrL        SuSF jrMSvSG jrNSwSH jrOSxSI jrPSfSJ jrQSfSK jrRSfSL jrS      SySM jrTSfSN jrUSfSO jrVSfSP jrWSoSQ jrXSfSR jrYSzSS jrZS{ST jr[S|SU jr\SfSV jr]S}SW jr^SfSX jr_SfSY jr`SfSZ jraSfS[ jrbS~S\ jrc          SS] jrd\eSS^ j5       rf\eSS_ j5       rg\h" 5       ri\h" 5       rj\h" 5       rk\h" 5       rl\h" 5       rm\h" 5       rnS2\S`'   \h" 5       roS2\Sa'   Sbrpg/)DaskExprL   r   _implementation__add____sub____mul____truediv____pow____mod____eq____ne____gt____ge____lt____le____and____or__c                
    X-
  $ rM   r1   xys     r8   r9   DaskExpr.<lambda>b       r;   c                
    X-  $ rM   r1   rk   s     r8   r9   rn   c   s    QUr;   c                
    X-  $ rM   r1   rk   s     r8   r9   rn   d   s    r;   c                
    X-  $ rM   r1   rk   s     r8   r9   rn   e   ro   r;   allanycountkurtosismaxmeanminskewstdsumvar
__invert____neg__absdiffdropnaisnarounduniquec               4    Xl         X l        X0l        X@l        g rM   )_call_evaluate_output_names_alias_output_names_version)r?   callevaluate_output_namesalias_output_namesversions        r8   __init__DaskExpr.__init__z   s     
&;##5 r;   c                $    U R                  U5      $ rM   )r   )r?   dfs     r8   __call__DaskExpr.__call__   s    zz"~r;   c                .    SSK Jn  U" U R                  S9$ )Nr   r$   )r   )narwhals._dask.namespacer%   r   )r?   r%   s     r8   __narwhals_namespace__DaskExpr.__narwhals_namespace__   s    :T]]33r;   c                t   ^  SU 4S jjnT R                  UT R                  T R                  T R                  S9$ )Nc                ^   > T" U 5       Vs/ s H  oR                   S   S   PM     sn$ s  snf Nr   )loc)r   resultr?   s     r8   func DaskExpr.broadcast.<locals>.func   s,     488<8JJqM!$8<<<s   *r   r   r   r   r#   returnzlist[dx.Series]	__class__r   r   r   r?   r   s   ` r8   	broadcastDaskExpr.broadcast   s<    	=
 ~~"&"="=#77MM	  
 	
r;   c              :   ^ SU4S jjnU " UTS UR                   S9$ )Nc                   >  T" U 5       Vs/ s H  nU R                   U   PM     sn$ s  snf ! [         a&  nU R                  T" U 5      5      =n(       a  X2ee S nAff = frM   )_native_frameKeyError_check_columns_exist)r   column_nameeerrorevaluate_column_namess       r8   r   (DaskExpr.from_column_names.<locals>.func   sv     (=R'@'@ $$[1'@    334I"4MNN5N&s    
. ). . 
A!AAr   r   )r   )clsr   contextr   s    `  r8   from_column_namesDaskExpr.from_column_names   s)    		 "7#$$	
 	
r;   c               X   ^ SU4S jjnU " UU R                  T5      S UR                  S9$ )Nc                h   > T Vs/ s H  oR                   R                  S S 2U4   PM!     sn$ s  snf rM   )nativeiloc)r   icolumn_indicess     r8   r   *DaskExpr.from_column_indices.<locals>.func   s*    2@A.QIINN1a4(.AAAs   &/r   r   )_eval_names_indicesr   )r   r   r   r   s     ` r8   from_column_indicesDaskExpr.from_column_indices   s5    	B "%"9"9."I#$$	
 	
r;   Nc               |   ^ ^^ SUUU 4S jjnT R                  UT R                  T R                  T R                  S9$ )Nc                   > / nT
R                  U 5      nT	=(       d    0 R                  5        VVs0 s H  u  p4X0R                  U5      _M     nnnU H  nT" U40 UD6nUR                  U5        M     U$ s  snnf rM   )r   items_evaluate_single_output_exprappend)r   native_resultsnative_series_listkeyvalueother_native_seriesnative_seriesresult_nativer   expression_argsr?   s           r8   r   %DaskExpr._with_callable.<locals>.func   s    .0N!%B $3#8b"?"?"A#"AJC 44U;;"A   # "4 $] J6I J%%m4 "4 "!#s   A6r   r   r   )r?   r   r   r   s   ``` r8   r=   DaskExpr._with_callable   sA    
	" 
	" ~~"&"="=#77MM	  
 	
r;   c                  ^^ U R                   mTc  S OTc  TOUU4S jn[        U 5      " U R                  U R                  UU R                  S9$ )Nc                    > T" T" U 5      5      $ rM   r1   )output_namescurrent_alias_output_namesr   s    r8   r9   3DaskExpr._with_alias_output_names.<locals>.<lambda>   s    d+El+S&Tr;   )r   r   r   r   )r   typer   r   r   )r?   r   r   r   s    ` @r8   _with_alias_output_names!DaskExpr._with_alias_output_names   s]    %)%=%=" |  *1 T 	 Dz"&"="=1MM	
 	
r;   r   c                &    U R                  USU0S9$ )NrO   r   r<   )r?   r   rO   s      r8   _with_binaryDaskExpr._with_binary   s     ""4'59I"JJr;   c                0   ^ U R                  U4S jU5      $ )Nc                (   > [        U T5      " U5      $ rM   rG   )r5   rO   op_names     r8   r9   %DaskExpr._binary_op.<locals>.<lambda>   s    WT75KE5Rr;   )r   )r?   r   rO   s    ` r8   rN   DaskExpr._binary_op   s      !RTYZZr;   c                N   ^ U R                  U4S jU5      R                  S5      $ )Nc                   > T" X5      $ rM   r1   )r5   rO   operator_funcs     r8   r9   -DaskExpr._reverse_binary_op.<locals>.<lambda>   s
    e :r;   literal)r   alias)r?   r   rO   s    ` r8   rT   DaskExpr._reverse_binary_op   s'       :E

%	
	r;   c                   ^ ^^         SS jmSUUU 4S jjnT R                  UT R                  T R                  T R                  S9$ )Nc                f    [        XU5      u  pUR                  U5      R                  US:g  S 5      $ r   r   __floordiv__wherer   seriesrO   s      r8   	_floordiv(DaskExpr.__floordiv__.<locals>._floordiv   s4     8EJMF''.55eqj$GGr;   c                p   > U R                  T5      nT" U 5       Vs/ s H  nT" XU5      PM     sn$ s  snf rM   r   )r   other_seriesr   r   rO   r?   s      r8   r   #DaskExpr.__floordiv__.<locals>.func  s6    ::5ALFJ2hOhFIb,7hOOO   3r   r   r#   r   	dx.SeriesrO   r   r   r   r   r   )r?   rO   r   r   s   `` @r8   r   DaskExpr.__floordiv__   sm    	H	H'0	H9B	H	H	P 	P ~~"&"="=#77MM	  
 	
r;   c                   ^ ^^         SS jmSUUU 4S jjnT R                  UT R                  T R                  T R                  S9R	                  S5      $ )Nc                f    [        XU5      u  pUR                  U5      R                  US:g  S 5      $ r   r   r   s      r8   
_rfloordiv*DaskExpr.__rfloordiv__.<locals>._rfloordiv  s4     8EJMF&&v.55fk4HHr;   c                p   > U R                  T5      nT" U 5       Vs/ s H  nT" XU5      PM     sn$ s  snf rM   r   )r   other_nativer   r   rO   r?   s      r8   r   $DaskExpr.__rfloordiv__.<locals>.func  s6    ::5ALGKBxPxVJr<8xPPPr   r   r   r   r   )r   r   r   r   r   )r?   rO   r   r   s   `` @r8   __rfloordiv__DaskExpr.__rfloordiv__  sy    	I	I'0	I9B	I	I	Q 	Q ~~"&"="=#77MM	  

 %	
	r;   c                F   ^ ^ SSK Jm  SUU 4S jjnT R                  U5      $ )Nr   r   c                   > [        U R                  TR                  [        R                  5      nUR                  5       (       d
  SnT" U5      eU R                  5       R                  5       $ )Nz<`median` operation not supported for non-numeric input type.)r   dtyper   r   DASK
is_numericmedian_approximater3   )sr  msgr   r?   s      r8   r   DaskExpr.median.<locals>.func"  sV    ,QWWdmm^EXEXYE##%%T+C00'')3355r;   )r  r   r   r   )narwhals.exceptionsr   r=   )r?   r   r   s   ` @r8   medianDaskExpr.median  s#    =	6 	6 ""4((r;   c                .   ^ U R                  U4S j5      $ )Nc                &   > U R                  T5      $ rM   )shift)r5   ns    r8   r9    DaskExpr.shift.<locals>.<lambda>,  s    

1r;   r<   )r?   r  s    `r8   r  DaskExpr.shift+  s    ""#=>>r;   c               N    U(       a  Sn[        U5      eU R                  S 5      $ )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                "    U R                  5       $ rM   )cumsumr5   s    r8   r9   "DaskExpr.cum_sum.<locals>.<lambda>4  
    r;   NotImplementedErrorr=   r?   reverser  s      r8   cum_sumDaskExpr.cum_sum.  s'    NC%c**""#=>>r;   c               N    U(       a  Sn[        U5      eU R                  S 5      $ )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                f    U R                  5       ) R                  [        5      R                  5       $ rM   )r   astypeintr  r  s    r8   r9   $DaskExpr.cum_count.<locals>.<lambda>;  s     $))+0E0Ec0J0Q0Q0Sr;   r  r  s      r8   	cum_countDaskExpr.cum_count6  s'    PC%c**""#STTr;   c               N    U(       a  Sn[        U5      eU R                  S 5      $ )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                "    U R                  5       $ rM   )cumminr  s    r8   r9   "DaskExpr.cum_min.<locals>.<lambda>B  r  r;   r  r  s      r8   cum_minDaskExpr.cum_min=  '    NC%c**""#=>>r;   c               N    U(       a  Sn[        U5      eU R                  S 5      $ )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                "    U R                  5       $ rM   )cummaxr  s    r8   r9   "DaskExpr.cum_max.<locals>.<lambda>I  r  r;   r  r  s      r8   cum_maxDaskExpr.cum_maxD  r,  r;   c               N    U(       a  Sn[        U5      eU R                  S 5      $ )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                "    U R                  5       $ rM   )cumprodr  s    r8   r9   #DaskExpr.cum_prod.<locals>.<lambda>P  s
    r;   r  r  s      r8   cum_prodDaskExpr.cum_prodK  s'    OC%c**""#>??r;   c               6   ^^^ U R                  UUU4S j5      $ )Nc                B   > U R                  TTTS9R                  5       $ N)windowmin_periodscenter)rollingr|   r5   r>  min_sampleswindow_sizes    r8   r9   &DaskExpr.rolling_sum.<locals>.<lambda>T  s&    "F & cer;   r<   r?   rB  rA  r>  s    ```r8   rolling_sumDaskExpr.rolling_sumR  s    ""
 	
r;   c               6   ^^^ U R                  UUU4S j5      $ )Nc                B   > U R                  TTTS9R                  5       $ r;  )r?  rx   r@  s    r8   r9   'DaskExpr.rolling_mean.<locals>.<lambda>[  s&    "F & dfr;   r<   rD  s    ```r8   rolling_meanDaskExpr.rolling_meanY  s    ""
 	
r;   c               \   ^^^ US:X  a  U R                  UUU4S j5      $ Sn[        U5      e)N   c                B   > U R                  TTTS9R                  5       $ r;  )r?  r}   r@  s    r8   r9   &DaskExpr.rolling_var.<locals>.<lambda>e  &    T\\&K * #%r;   z5Dask backend only supports `ddof=1` for `rolling_var`r=   r  r?   rB  rA  r>  ddofr  s    ```  r8   rolling_varDaskExpr.rolling_var`  7     19&& 
 F!#&&r;   c               \   ^^^ US:X  a  U R                  UUU4S j5      $ Sn[        U5      e)NrM  c                B   > U R                  TTTS9R                  5       $ r;  )r?  r{   r@  s    r8   r9   &DaskExpr.rolling_std.<locals>.<lambda>q  rP  r;   z5Dask backend only supports `ddof=1` for `rolling_std`rQ  rR  s    ```  r8   rolling_stdDaskExpr.rolling_stdl  rV  r;   c                D    SS K Jn  U R                  UR                  5      $ r   )
dask.arrayarrayr=   floorr?   das     r8   r_  DaskExpr.floorx  s    ""288,,r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   ceilr`  s     r8   rd  DaskExpr.ceil}      ""277++r;   c                   ^ ^^ Uc  [         R                  OUmUc  [        S5      OUmSU UU4S jjnT R                  U5      $ )Nnanc                   > [        SX :g  5      nUR                  S5      n[        U R                  TR                  5      (       a  TOTnU R                  X5      $ )Nr   F)r   fillnar   r  r[   mask)r5   rk  fillr?   value_nullablevalue_numpys      r8   r   DaskExpr.fill_nan.<locals>.func  sV    T\2D;;u%D %TZZ1E1EFF   
 99T((r;   r5   r   r   r   )pdNAfloatr=   )r?   r   r   rm  rn  s   `  @@r8   fill_nanDaskExpr.fill_nan  s>    "'-U&+meEl		) 		) ""4((r;   c                h   ^^ SSUU4S jjjnUb  U R                  USU0S9$ U R                  U5      $ )Nr   c                |   > Ub  U R                  U5      nU$ TS:X  a  U R                  TS9OU R                  TS9nU$ )Nforward)limit)rj  ffillbfill)r5   r   res_serry  strategys      r8   r    DaskExpr.fill_null.<locals>.func  sR     ++e, N  9, JJUJ+%0 
 Nr;   r   rM   )r5   r   r   Self | Noner   r   r<   )r?   r   r}  ry  r   s     `` r8   	fill_nullDaskExpr.fill_null  sA    		 		 &&tgu=M&NN""4((r;   c                (    U R                  S XS.S9$ )Nc                     U R                  XS9$ )N)lowerupperclip)r5   lower_boundupper_bounds      r8   r9   DaskExpr.clip.<locals>.<lambda>  s    499! 4= 4r;   )r  r  r   r<   )r?   r  r  s      r8   r  DaskExpr.clip  s'    "" -8T	 # 
 	
r;   c                (    U R                  S SU0S9$ )Nc                     U R                  US9$ )N)r  r  )r5   r  s     r8   r9   %DaskExpr.clip_lower.<locals>.<lambda>      diiki&Br;   r  r   r<   )r?   r  s     r8   
clip_lowerDaskExpr.clip_lower  %    ""B*K8 # 
 	
r;   c                (    U R                  S SU0S9$ )Nc                     U R                  US9$ )N)r  r  )r5   r  s     r8   r9   %DaskExpr.clip_upper.<locals>.<lambda>  r  r;   r  r   r<   )r?   r  s     r8   
clip_upperDaskExpr.clip_upper  r  r;   c                &    U R                  S 5      $ )Nc                <    U R                  SS9R                  5       $ )NF)r   )nuniquer3   r  s    r8   r9   #DaskExpr.n_unique.<locals>.<lambda>  s    E0J0T0T0Vr;   r<   r?   s    r8   n_uniqueDaskExpr.n_unique  s    ""#VWWr;   c                6   ^  SU 4S jjnT R                  U5      $ )Nc                   > [        U R                  TR                  TR                  5      nUR	                  5       (       a  X :g  $ SU S3n[        U5      e)Nz4`.is_nan` only supported for numeric dtypes and not z, did you mean `.is_null`?)r   r  r   r[   r  r   )r5   r  r  r?   s      r8   r   DaskExpr.is_nan.<locals>.func  sU    ,

DMM4+?+?E !!|#HOijC',,r;   rp  r<   r   s   ` r8   is_nanDaskExpr.is_nan  s    	- ""4((r;   c                &    U R                  S 5      $ )Nc                6    U R                   R                  5       $ rM   )sizer3   r  s    r8   r9   DaskExpr.len.<locals>.<lambda>  s    		0C0C0Er;   r<   r  s    r8   lenDaskExpr.len  s    ""#EFFr;   c                \   ^ US:X  a  SU4S jjnU R                  U5      $ Sn[        U5      e)Nlinearc                z   > U R                   S:  a  Sn[        U5      eU R                  TSS9R                  5       $ )NrM  zK`Expr.quantile` is not supported for Dask backend with multiple partitions.dask)qmethod)npartitionsr  quantiler3   )r5   r  r  s     r8   r   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.rp  rQ  )r?   r  interpolationr   r  s    `   r8   r  DaskExpr.quantile  s8     H$ &&t,, I!#&&r;   c                .    SS jnU R                  U5      $ )Nc                   U R                   n[        SU/SS9n[        U R                  5       U5      n[	        SS9n[        SUR                  " U40 UD6R                  US05      5      nXR   nX2   R                  U5      $ )N   
row_index_n_bytescolumnsprefixFdrop_null_keysdx.DataFramery   	namer   r   to_framer   r   groupbyaggisin)r5   _name	col_tokenframegroup_by_kwargsaggedfirst_distinct_indexs          r8   r   (DaskExpr.is_first_distinct.<locals>.func  s    IIE6E7<I "$--/9=E2%HOe77;;Y<NOE $)#3 #(()=>>r;   rp  r<   r   s     r8   is_first_distinctDaskExpr.is_first_distinct  s    	? ""4((r;   c                .    SS jnU R                  U5      $ )Nc                   U R                   n[        SU/SS9n[        U R                  5       U5      n[	        SS9n[        SUR                  " U40 UD6R                  US05      5      nXR   nX2   R                  U5      $ )Nr  r  r  Fr  r  rw   r  )r5   r  r  r  r  r  last_distinct_indexs          r8   r   'DaskExpr.is_last_distinct.<locals>.func  s    IIE6E7<I "$--/9=E2%HOe77;;Y<NOE #("2#(()<==r;   rp  r<   r   s     r8   is_last_distinctDaskExpr.is_last_distinct  s    	> ""4((r;   c                .    SS jnU R                  U5      $ )Nc                    U R                   n[        SS9nU R                  5       R                  " U40 UD6R	                  SU[
        4S9S:H  $ )NFr  r  )metarM  )r  r   r  r  	transformr"  )r5   r  r  s      r8   r    DaskExpr.is_unique.<locals>.func  sW    IIE2%HO3"1365r;   rp  r<   r   s     r8   	is_uniqueDaskExpr.is_unique  s    	 ""4((r;   c                .   ^ U R                  U4S j5      $ )Nc                &   > U R                  T5      $ rM   )r  )r5   rO   s    r8   r9    DaskExpr.is_in.<locals>.<lambda>  s    		%0@r;   r<   )r?   rO   s    `r8   is_inDaskExpr.is_in  s    ""#@AAr;   c                &    U R                  S 5      $ )Nc                Z    U R                  5       R                  5       R                  5       $ rM   )r   r|   r3   r  s    r8   r9   %DaskExpr.null_count.<locals>.<lambda>  s    		0A0K0K0Mr;   r<   r  s    r8   
null_countDaskExpr.null_count  s    ""#MNNr;   c                x   ^ ^ SUU 4S jjnT R                  UT R                  T R                  T R                  S9$ )Nc                6   > T" U R                   " TSSS.65      $ )NF)
descending
nulls_last)sort)r   order_byr?   s    r8   r   1DaskExpr._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_by#DaskExpr._over_without_partition_by  sC    	P 	P ~~"&"="=#77MM	  
 	
r;   c                  ^ ^^^	^
^ T(       d  U(       d   eT R                  U5      $ SSKJn  T R                  m
T(       a5  T
R                  b(  T
R                  R
                  (       d  Sn[        U5      eU(       a  Sn[        U5      e[        [        [        T R                  R                  5       5      5      5      mTS   n[        SUR                  5      n UR                  U   m[        XeR                   5      m	SUU	U
UUU 4S jjnT R#                  UT R$                  T R&                  T R(                  S9$ ! [         a/    SU SS	R                  UR                  5       S
3n[        U5      S ef = f)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           
       > TR                  5       nTR                  b(  U R                  [        S[	        TS S U5      5      5      n [        TU / 5      u  p#[        R                  " 5          [        R                  " SS[        S9  [        SS9nU R                  R                  " T40 UD6nT
S:X  aB  [        U5      S	:w  a  S
n[        U5      eUR                  " T
40 TD6R!                  US   5      nOU[#        U5         R                  " T
40 TD6nS S S 5        U R%                  W5      R                  nU V	s/ s H  oU	   PM	     sn	$ ! , (       d  f       N>= fs  sn	f )NrY   r  ignorez.*`meta` is not specified)messagecategoryFr  r  rM  z)Safety check failed, please report a bug.r   )r   prevwith_columnsr   r   r   warningscatch_warningsfilterwarningsUserWarningr   r   r  r  AssertionErrorr  r  list_with_native)r   plx_aliasesr  groupedr  
res_nativeresult_framer  dask_function_namedask_kwargsr  nodespartition_byr?   s             r8   r   DaskExpr.over.<locals>.funcK  sK   --/Cyy$__T*nU3BZQT6U%VW:4RHJA((*''&AK #7e"L))++LLOL%/7|q(I,S11!(!2!2*".9"hwqz*  ")g!7!A!A*".9"J +$ ??:6==L3:;74&7;;' +*& <s   +B(E:E
Er   r  )r  narwhals._pandas_like.group_byr  	_metadatar  is_elementwiser  r  reversediter_nodes_reversedr   r  _REMAP_AGGSr   joinr   r7   r   r   r   r   )r?   r
  r  r  r  	leaf_nodefunction_namer   r  r  r  r	  s   ``      @@@@r8   overDaskExpr.over  sd   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< <9E5c                :   ^ ^ SUU 4S jjnT R                  U5      $ )Nc                R   > [        TTR                  5      nU R                  U5      $ rM   )r   r   r!  )r5   native_dtyper  r?   s     r8   r   DaskExpr.cast.<locals>.funcn  s"    3E4==IL;;|,,r;   rp  r<   )r?   r  r   s   `` r8   r   DaskExpr.castm  s     	- 	- ""4((r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   isfiniter`  s     r8   	is_finiteDaskExpr.is_finitet  s    ""2;;//r;   c                F   ^^ SS K Jm  SUU4S jjnU R                  U5      $ )Nr   c                J   > TR                  U 5      TR                  T5      -  $ rM   )log)r5   basera  s    r8   _logDaskExpr.log.<locals>._log|  s    66$<"&&,..r;   rp  )r]  r^  r=   )r?   r#  r$  ra  s    ` @r8   r"  DaskExpr.logy  s#    	/ 	/ ""4((r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   expr`  s     r8   r(  DaskExpr.exp      ""266**r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   sinr`  s     r8   r,  DaskExpr.sin  r*  r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   cosr`  s     r8   r/  DaskExpr.cos  r*  r;   c                D    SS K Jn  U R                  UR                  5      $ r   )r]  r^  r=   sqrtr`  s     r8   r2  DaskExpr.sqrt  rf  r;   c               6   ^ SU4S jjnU R                  U5      $ )Nc                   > U R                   nU R                  5       R                  5       U   nTS:X  a  UR                  S5      $ U$ )Nrt   rM  )r  r  modehead)r5   r  r   keeps      r8   r   DaskExpr.mode.<locals>.func  s>    IIE]]_))+E2F%)U]6;;q>>>r;   rp  r<   )r?   r8  r   s    ` r8   r6  DaskExpr.mode  s    	?
 ""4((r;   c                  ^ ^^^^ T[         L a  Sn[        U5      e[        [        X#SS95      m[	        U5      mSUUUUU 4S jjnT R                  UT R                  T R                  T R                  S9$ )NzK`replace_strict` requires an explicit value for `default` for dask backend.F)strictc                F  > U R                  T5      nT
" U 5       Vs/ s H3  nUR                  T5      R                  UR                  T5      U5      PM5     nnT	(       a7  [	        T	T
R
                  5      nU Vs/ s H  oUR                  U5      PM     sn$ U$ s  snf s  snf rM   )r   replacer   r  r   r   r!  )r   default_seriesr   resultsr  resdefaultmappingold_return_dtyper?   s         r8   r   %DaskExpr.replace_strict.<locals>.func  s    <<WEN #2h&F w'--fkk$.?P&  
 7dmmT<CDGS

<0GDDN Es   :B:Br   r   )	r   
ValueErrordictzipr  r   r   r   r   )	r?   rB  oldnewrE  r  r   rC  rD  s	   ``  `  @@r8   replace_strictDaskExpr.replace_strict  st     j _CS/!s3E23Cy	 	 ~~"&"="=#77MM	  
 	
r;   c                    [        U 5      $ rM   r   r  s    r8   strDaskExpr.str  s    &t,,r;   c                    [        U 5      $ rM   r	   r  s    r8   dtDaskExpr.dt  s    (..r;   r  struct)r   r   r   r   )
r   z$EvalSeries[DaskLazyFrame, dx.Series]r   EvalNames[DaskLazyFrame]r   AliasNames | Noner   r'   r   Noner  )r   r%   )r   r   )r   z
type[Self]r   rU  r   r(   r   r   )r   r"  r   r(   r   r   rM   )r   zdict[str, Self] | Noner   Callable[..., dx.Series]r   r   )r   rV  r   r   )r   z%Callable[[dx.Series, Any], dx.Series]rO   r   r   r   )r   rO  rO   r   r   r   )r   rX  rO   r   r   r   )rO   r   r   r   )r  r"  r   r   )r  boolr   r   )rB  r"  rA  r"  r>  rY  r   r   )
rB  r"  rA  r"  r>  rY  rS  r"  r   r   )r   zfloat | Noner   r   )r   r  r}  zFillNullStrategy | Nonery  z
int | Noner   r   )r  r   r  r   r   r   )r  r   r   r   )r  r   r   r   )r  rs  r  r,   r   r   )r  Sequence[str]r   r   )r
  rZ  r  rZ  r   r   )r  r*   r   r   )r#  rs  r   r   )r8  r+   r   r   )
rB  zDaskExpr | NoDefaultrJ  Sequence[Any]rK  r[  rE  zIntoDType | Noner   r   )r   r   )r   r
   )q__name__
__module____qualname____firstlineno__r   r  r[   __annotations__rQ   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rW   __rsub____rtruediv____rpow____rmod__rB   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   rJ   r~   r   r   r   
drop_nullsis_nullr   r   r   r   r   r   classmethodr   r   r=   r   r   rN   rT   r   r   r  r  r  r$  r*  r1  r7  rE  rJ  rT  rZ  r_  rd  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r"  r(  r,  r/  r2  r6  rL  propertyrO  rR  r   	any_valuefilterfirstranklastr  rT  __static_attributes__r1   r;   r8   rY   rY   L   s    '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I&G

C Dx(JF#G'"E8$F 2   8	 
 .    
 4

 

7

 !
 

 
2 	
 	
  37

 0
 '
 

4
 K9KBEK	K
[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#!!#FC#r;   rY   )r#   r   )r6   rO  r   r   )rU   rX  r   r   )D
__future__r   r  typingr   r   r   pandasrq  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   r   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,   rB   rJ   rQ   rW   rY   r1   r;   r8   <module>r     s    "  + +  ; < ;  [ I S  62))&  76*8 <
B
D
$)*23D
$r;   