o
    $&]i(h                     @  s  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rd dl%m&Z& d dl'm(  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dZ?d&ddZ@d&ddZAd'd!d"ZBG d#d$ d$ed% ed% ZCdS )(    )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RollingInterpolationMethodattrstrreturnr   c                       fddS )Nc                      |   fddS )Nc                   s   t |  di  S N )getattr	to_seriesexprr,   kwargsr2   Q/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_dask/expr.py<lambda>7       z6simple_aggregation.<locals>.<lambda>.<locals>.<lambda>_with_callableselfr8   r,   r8   r9   r:   6       z$simple_aggregation.<locals>.<lambda>r2   r@   r2   r@   r9   simple_aggregation4      rC   c                   r/   )Nc                   r0   )Nc                   s   t |  di S r1   r3   r5   r7   r2   r9   r:   >       z1simple_method.<locals>.<lambda>.<locals>.<lambda>r<   r>   r@   rA   r9   r:   =   rB   zsimple_method.<locals>.<lambda>r2   r@   r2   r@   r9   simple_method;   rD   rG   c                   r/   )Nc                      |   |S N)
_binary_opr?   otherr@   r2   r9   r:   D       zsimple_binary.<locals>.<lambda>r2   r@   r2   r@   r9   simple_binaryB   rD   rN   opCallable[..., dx.Series]c                   r/   )Nc                   rH   rI   )_reverse_binary_oprK   rO   r2   r9   r:   I   rM   z&trivial_binary_right.<locals>.<lambda>r2   rR   r2   rR   r9   trivial_binary_rightG   rD   rS   c                   @  s  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d Zedd Zedd Zed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.dd2d3Z/dd7d8Z0dd:d;Z1dd=d>Z2e3ddDdEZ4e3ddHdIZ5ddLdMZ6ddOdPZ7ddTdUZ8ddXdYZ9dd[d\Z:dd]d^Z;dd_d`Z<ddadbZ=ddddeZ>ddhdiZ?ddjdkZ@ddldmZAddndoZBddpdqZCddudvZDddwdxZEddzd{ZFdd|d}ZGdd~dZHdddZIdddZJdddZKdddZLdddZMdddZNdddZOdddZPdddZQdddZRdddZSdddZTdddZUdddZVdddZWdddZXdddZYdddZZdddZ[dddZ\dddZ]dddZ^dddZ_dddĄZ`ddd̈́ZaebdddЄZcebdddӄZdee Zfee Zgee Zhee Ziee Zjee Zkded< ee Zlded< dS )DaskExprr   _implementation__add____sub____mul____truediv____pow____mod____eq____ne____gt____ge____lt____le____and____or__c                 C  s   | | S rI   r2   xyr2   r2   r9   r:   b       zDaskExpr.<lambda>c                 C  s   | | S rI   r2   rd   r2   r2   r9   r:   c   rg   c                 C  s   | | S rI   r2   rd   r2   r2   r9   r:   d   rg   c                 C  s   | | S rI   r2   rd   r2   r2   r9   r:   e   rg   allanycountkurtosismaxmeanminskewstdsumvar
__invert__absdiffdropnaisnarounduniquecall$EvalSeries[DaskLazyFrame, dx.Series]evaluate_output_namesEvalNames[DaskLazyFrame]alias_output_namesAliasNames | Noneversionr&   r.   Nonec                C  s   || _ || _|| _|| _d S rI   )_call_evaluate_output_names_alias_output_names_version)r?   rz   r|   r~   r   r2   r2   r9   __init__y   s   
zDaskExpr.__init__dfr"   Sequence[dx.Series]c                 C  s
   |  |S rI   )r   )r?   r   r2   r2   r9   __call__   s   
zDaskExpr.__call__r$   c                 C  s   ddl m} || jdS )Nr   r#   )r   )narwhals._dask.namespacer$   r   )r?   r$   r2   r2   r9   __narwhals_namespace__      zDaskExpr.__narwhals_namespace__r   c                   s&   d fdd} j | j j jdS )	Nr   r"   r.   list[dx.Series]c                   s   dd  | D S )Nc                 S  s   g | ]	}|j d  d  qS )r   )loc).0resultr2   r2   r9   
<listcomp>   s    z4DaskExpr.broadcast.<locals>.func.<locals>.<listcomp>r2   r   r?   r2   r9   func   s   z DaskExpr.broadcast.<locals>.funcr|   r~   r   r   r"   r.   r   	__class__r   r   r   r?   r   r2   r   r9   	broadcast   s   zDaskExpr.broadcastcls
type[Self]evaluate_column_namescontextr'   c                 s    d fdd}| | d |j dS )	Nr   r"   r.   r   c              
     sL   z fdd D W S  t y% } z   }r || d }~ww )Nc                   s   g | ]} j | qS r2   )_native_frame)r   column_namer   r2   r9   r      s    z<DaskExpr.from_column_names.<locals>.func.<locals>.<listcomp>)KeyError_check_columns_exist)r   eerrorr   r   r9   r      s   
z(DaskExpr.from_column_names.<locals>.funcr   r   )r   )r   r   r   r   r2   r   r9   from_column_names   s   zDaskExpr.from_column_namescolumn_indicesintc                  s&   d fdd}| ||   d |jdS )	Nr   r"   r.   r   c                   s    fddD S )Nc                   s    g | ]} j jd d |f qS rI   )nativeiloc)r   ir   r2   r9   r      s     z>DaskExpr.from_column_indices.<locals>.func.<locals>.<listcomp>r2   r   r   r   r9   r         z*DaskExpr.from_column_indices.<locals>.funcr   r   )_eval_names_indicesr   )r   r   r   r   r2   r   r9   from_column_indices   s   zDaskExpr.from_column_indicesrP   expressifiable_argsc                  s*   d fdd}j |jjjdS )	Nr   r"   r.   r   c                   sL   g }  } fdd D }|D ]}|fi |}|| q|S )Nc                   s   i | ]
\}}|  |qS r2   _evaluate_single_output_expr)r   keyvaluer   r2   r9   
<dictcomp>   s    
z9DaskExpr._with_callable.<locals>.func.<locals>.<dictcomp>)r   itemsappend)r   native_resultsnative_series_listother_native_seriesnative_seriesresult_nativerz   r   r?   r   r9   r      s   

z%DaskExpr._with_callable.<locals>.funcr   r   r   )r?   rz   r   r   r2   r   r9   r=      s   zDaskExpr._with_callabler   c                  sF   | j  d u r	d n d u rn fdd}t| | j| j|| jdS )Nc                   s    | S rI   r2   )output_namescurrent_alias_output_namesr   r2   r9   r:      rM   z3DaskExpr._with_alias_output_names.<locals>.<lambda>)rz   r|   r~   r   )r   typer   r   r   )r?   r   r~   r2   r   r9   _with_alias_output_names   s   z!DaskExpr._with_alias_output_names%Callable[[dx.Series, Any], dx.Series]rL   r   c                   s   | j  fdd|dS )Nc                   s
    | |S rI   r2   r6   rL   rz   r2   r9   r:         
 z'DaskExpr._with_binary.<locals>.<lambda>rL   r<   )r?   rz   rL   r2   r   r9   _with_binary   s   zDaskExpr._with_binaryop_namer-   c                   s   |   fdd|S )Nc                   s   t |  |S rI   rE   r   r   r2   r9   r:      s    z%DaskExpr._binary_op.<locals>.<lambda>)r   )r?   r   rL   r2   r   r9   rJ         zDaskExpr._binary_opoperator_funcc                   s   |   fdd|dS )Nc                   s
    || S rI   r2   r   r   r2   r9   r:      r   z-DaskExpr._reverse_binary_op.<locals>.<lambda>literal)r   alias)r?   r   rL   r2   r   r9   rQ      s
   zDaskExpr._reverse_binary_opc                   s4   ddd d fd
d}j |jjjdS )Nr   r"   series	dx.SeriesrL   r.   c                 S  s&   t | ||\}}|||dkd S Nr   r   __floordiv__wherer   r   rL   r2   r2   r9   	_floordiv      z(DaskExpr.__floordiv__.<locals>._floordivr   c                   $      fdd D S )Nc                      g | ]} |qS r2   r2   r   r   )r   r   other_seriesr2   r9   r     r;   z7DaskExpr.__floordiv__.<locals>.func.<locals>.<listcomp>r   r   r   rL   r?   )r   r   r9   r        
z#DaskExpr.__floordiv__.<locals>.funcr   r   r"   r   r   rL   r   r.   r   r   r   r?   rL   r   r2   r   r9   r      s   
zDaskExpr.__floordiv__c                   s:   ddd d fd
d}j |jjjddS )Nr   r"   r   r   rL   r.   c                 S  s&   t | ||\}}|||dkd S r   r   r   r2   r2   r9   
_rfloordiv  r   z*DaskExpr.__rfloordiv__.<locals>._rfloordivr   c                   r   )Nc                   r   r2   r2   r   )r   r   other_nativer2   r9   r     r;   z8DaskExpr.__rfloordiv__.<locals>.func.<locals>.<listcomp>r   r   r   rL   r?   )r   r   r9   r     r   z$DaskExpr.__rfloordiv__.<locals>.funcr   r   r   r   )r   r   r   r   r   r   r2   r   r9   __rfloordiv__  s   
zDaskExpr.__rfloordiv__c                   s&   ddl m  d fdd}|S )	Nr   r   sr   r.   c                   s2   t | jjtj}| sd} ||   S )Nz<`median` operation not supported for non-numeric input type.)r   dtyper   r   DASK
is_numericmedian_approximater4   )r   r   msgr   r?   r2   r9   r   !  s
   zDaskExpr.median.<locals>.func)r   r   r.   r   )narwhals.exceptionsr   r=   r   r2   r   r9   median  s   
zDaskExpr.mediannc                      |   fddS )Nc                   
   |   S rI   )shiftr5   r   r2   r9   r:   +  r   z DaskExpr.shift.<locals>.<lambda>r<   )r?   r   r2   r   r9   r   *  r   zDaskExpr.shiftreverseboolc                C     |rd}t || dd S )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                 S     |   S rI   )cumsumr5   r2   r2   r9   r:   3  rg   z"DaskExpr.cum_sum.<locals>.<lambda>NotImplementedErrorr=   r?   r   r   r2   r2   r9   cum_sum-  s   zDaskExpr.cum_sumc                C  r   )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                 S  s   |    t S rI   )rw   astyper   r   r5   r2   r2   r9   r:   :  rF   z$DaskExpr.cum_count.<locals>.<lambda>r   r   r2   r2   r9   	cum_count5     zDaskExpr.cum_countc                C  r   )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                 S  r   rI   )cumminr5   r2   r2   r9   r:   A  rg   z"DaskExpr.cum_min.<locals>.<lambda>r   r   r2   r2   r9   cum_min<  r   zDaskExpr.cum_minc                C  r   )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                 S  r   rI   )cummaxr5   r2   r2   r9   r:   H  rg   z"DaskExpr.cum_max.<locals>.<lambda>r   r   r2   r2   r9   cum_maxC  r   zDaskExpr.cum_maxc                C  r   )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                 S  r   rI   )cumprodr5   r2   r2   r9   r:   O  rg   z#DaskExpr.cum_prod.<locals>.<lambda>r   r   r2   r2   r9   cum_prodJ  r   zDaskExpr.cum_prodwindow_sizemin_samplescenterc                     |   fddS )Nc                      | j  d S N)windowmin_periodsr  )rollingrq   r5   r  r  r  r2   r9   r:   S      z&DaskExpr.rolling_sum.<locals>.<lambda>r<   r?   r  r  r  r2   r  r9   rolling_sumQ     zDaskExpr.rolling_sumc                  r  )Nc                   r	  r
  )r  rm   r5   r  r2   r9   r:   Z  r  z'DaskExpr.rolling_mean.<locals>.<lambda>r<   r  r2   r  r9   rolling_meanX  r  zDaskExpr.rolling_meanddofc                  *   |dkr|   fddS d}t|)N   c                   r	  r
  )r  rr   r5   r  r2   r9   r:   d  r  z&DaskExpr.rolling_var.<locals>.<lambda>z5Dask backend only supports `ddof=1` for `rolling_var`r=   r   r?   r  r  r  r  r   r2   r  r9   rolling_var_     zDaskExpr.rolling_varc                  r  )Nr  c                   r	  r
  )r  rp   r5   r  r2   r9   r:   p  r  z&DaskExpr.rolling_std.<locals>.<lambda>z5Dask backend only supports `ddof=1` for `rolling_std`r  r  r2   r  r9   rolling_stdk  r  zDaskExpr.rolling_stdc                 C     dd l m} | |jS r   )
dask.arrayarrayr=   floorr?   dar2   r2   r9   r  w  r   zDaskExpr.floorc                 C  r  r   )r  r  r=   ceilr   r2   r2   r9   r"  |  r   zDaskExpr.ceilr   float | Nonec                   sB   |d u rt jn||d u rtdn|d fdd} |S )Nnanr6   r   r.   c                   s:   t d| | k}|d}t| j jrn}| ||S )Nr   F)r   fillnar   r   rU   mask)r6   r&  fillr?   value_nullablevalue_numpyr2   r9   r     s   
zDaskExpr.fill_nan.<locals>.funcr6   r   r.   r   )pdNAfloatr=   )r?   r   r   r2   r(  r9   fill_nan  s   
zDaskExpr.fill_nanSelf | NonestrategyFillNullStrategy | Nonelimit
int | Nonec                   s   d fdd}|  |S )Nr6   r   r.   c                   s:   d ur|  }|S dkr| j dn| j d}|S )Nforward)r3  )r%  ffillbfill)r6   res_serr3  r1  r   r2   r9   r     s   

z DaskExpr.fill_null.<locals>.funcr+  r<   )r?   r   r1  r3  r   r2   r9  r9   	fill_null  s   
zDaskExpr.fill_nulllower_boundupper_boundc                 C  s   | j dd ||dS )Nc                 S  s   | j ||dS )N)lowerupperclip)r6   r;  r<  r2   r2   r9   r:     s    zDaskExpr.clip.<locals>.<lambda>)r;  r<  r<   )r?   r;  r<  r2   r2   r9   r@    s
   zDaskExpr.clipc                 C     | j dd |dS )Nc                 S     | j |dS )N)r=  r?  )r6   r;  r2   r2   r9   r:     rM   z%DaskExpr.clip_lower.<locals>.<lambda>)r;  r<   )r?   r;  r2   r2   r9   
clip_lower     zDaskExpr.clip_lowerc                 C  rA  )Nc                 S  rB  )N)r>  r?  )r6   r<  r2   r2   r9   r:     rM   z%DaskExpr.clip_upper.<locals>.<lambda>)r<  r<   )r?   r<  r2   r2   r9   
clip_upper  rD  zDaskExpr.clip_upperc                 C     |  dd S )Nc                 S  s   | j dd S )NF)rv   )nuniquer4   r5   r2   r2   r9   r:         z#DaskExpr.n_unique.<locals>.<lambda>r<   r   r2   r2   r9   n_unique     zDaskExpr.n_uniquec                   s   d fdd}  |S )Nr6   r   r.   c                   s6   t | j j j}| r| | kS d| d}t|)Nz4`.is_nan` only supported for numeric dtypes and not z, did you mean `.is_null`?)r   r   r   rU   r   r   )r6   r   r   r   r2   r9   r     s   zDaskExpr.is_nan.<locals>.funcr+  r<   r   r2   r   r9   is_nan  s   
	zDaskExpr.is_nanc                 C  rF  )Nc                 S  s
   | j  S rI   )sizer4   r5   r2   r2   r9   r:     r   zDaskExpr.len.<locals>.<lambda>r<   r   r2   r2   r9   len  rJ  zDaskExpr.lenquantiler.  interpolationr+   c                   s,   |dkrd fdd}|  |S d}t|)	Nlinearr6   r   r.   c                   s(   | j dkrd}t|| j dd S )Nr  zK`Expr.quantile` is not supported for Dask backend with multiple partitions.dask)qmethod)npartitionsr   rN  r4   )r6   r   rN  r2   r9   r     s   
zDaskExpr.quantile.<locals>.funczx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.r+  r  )r?   rN  rO  r   r   r2   rU  r9   rN    s
   
zDaskExpr.quantilec                 C     ddd}|  |S )Nr6   r   r.   c                 S  \   | j }td|gdd}t|  |}tdd}|j|fi ||di| }|| |S )N   
row_index_n_bytescolumnsprefixFdrop_null_keysrn   namer   r   to_framer   groupbyaggisin)r6   _name	col_tokenframegroup_by_kwargsfirst_distinct_indexr2   r2   r9   r        
z(DaskExpr.is_first_distinct.<locals>.funcr+  r<   r   r2   r2   r9   is_first_distinct     

zDaskExpr.is_first_distinctc                 C  rV  )Nr6   r   r.   c                 S  rW  )NrX  rY  rZ  Fr^  rl   r`  )r6   rf  rg  rh  ri  last_distinct_indexr2   r2   r9   r     rk  z'DaskExpr.is_last_distinct.<locals>.funcr+  r<   r   r2   r2   r9   is_last_distinct  rm  zDaskExpr.is_last_distinctc                 C  rV  )Nr6   r   r.   c                 S  s8   | j }tdd}|  j|fi |jd|tfddkS )NFr^  rL  )metar  )ra  r   rb  rc  	transformr   )r6   rf  ri  r2   r2   r9   r     s   

z DaskExpr.is_unique.<locals>.funcr+  r<   r   r2   r2   r9   	is_unique  s   


zDaskExpr.is_uniquec                   r   )Nc                   r   rI   )re  r5   r   r2   r9   r:     r   z DaskExpr.is_in.<locals>.<lambda>r<   rK   r2   r   r9   is_in  r   zDaskExpr.is_inc                 C  rF  )Nc                 S  s   |     S rI   )rw   rq   r4   r5   r2   r2   r9   r:   	  rH  z%DaskExpr.null_count.<locals>.<lambda>r<   r   r2   r2   r9   
null_count  rJ  zDaskExpr.null_countorder_bySequence[str]c                   s(   d fdd}j |jjjdS )	Nr   r"   r.   r   c                   s   | j  dddS )NF)
descending
nulls_last)sortr   ru  r?   r2   r9   r     s   z1DaskExpr._over_without_partition_by.<locals>.funcr   r   r"   r.   r   r   )r?   ru  r   r2   rz  r9   _over_without_partition_by  s   z#DaskExpr._over_without_partition_bypartition_byc              	     s  s|sJ  |S ddlm} jr%jd ur%jjs%d}t||r-d}t|tttj	 d }t
d|j}z|j|  W n tyb   d| dd	|j d
}t|d w t||jd fdd}j|jjjdS )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, 
r   r"   r.   r   c                   s    }jd ur| tdtd d |} t| g \}}t K tjddt	d t
dd}| jjfi |}dkr[t|d	krLd
}t||jfi |d }n|t| jfi }W d    n1 srw   Y  | |j  fdd|D S )NrT   r  ignorez.*`meta` is not specified)messagecategoryFr^  rL  r  z)Safety check failed, please report a bug.r   c                   s   g | ]} | qS r2   r2   )r   ra  result_framer2   r9   r   ^  rF   z/DaskExpr.over.<locals>.func.<locals>.<listcomp>)r   prevwith_columnsr   r   r   warningscatch_warningsfilterwarningsUserWarningr   r   rc  rM  AssertionErrorrq  rb  list_with_native)r   plx_aliasesri  groupedr   
res_nativedask_function_namedask_kwargsrp  nodesr}  r?   r  r9   r   E  s<   



zDaskExpr.over.<locals>.funcr   r{  )r|  narwhals._pandas_like.group_byr~  	_metadatar  is_elementwiser   r  reversediter_nodes_reversedr   ra  _REMAP_AGGSr   joinr   r8   r   r   r   r   )r?   r}  ru  r~  r   	leaf_nodefunction_namer   r2   r  r9   over  sB   
	

zDaskExpr.overr   r)   c                   s   d fdd} |S )Nr6   r   r.   c                   s   t  j}| |S rI   )r   r   r   )r6   native_dtyper   r?   r2   r9   r   h  s   
zDaskExpr.cast.<locals>.funcr+  r<   )r?   r   r   r2   r  r9   r   g  s   
zDaskExpr.castc                 C  r  r   )r  r  r=   isfiniter   r2   r2   r9   	is_finiten  r   zDaskExpr.is_finitebasec                   s&   dd l m d fdd}| |S )Nr   r6   r   r.   c                   s    |    S rI   )logr5   r  r!  r2   r9   _logv  r   zDaskExpr.log.<locals>._logr+  )r  r  r=   )r?   r  r  r2   r  r9   r  s  s   
zDaskExpr.logc                 C  r  r   )r  r  r=   expr   r2   r2   r9   r  {  r   zDaskExpr.expc                 C  r  r   )r  r  r=   sinr   r2   r2   r9   r    r   zDaskExpr.sinc                 C  r  r   )r  r  r=   sqrtr   r2   r2   r9   r    r   zDaskExpr.sqrtkeepr*   c                  s   d fdd}|  |S )Nr6   r   r.   c                   s,   | j }|   | } dkr|dS |S )Nri   r  )ra  rb  modehead)r6   rf  r   r  r2   r9   r     s   zDaskExpr.mode.<locals>.funcr+  r<   )r?   r  r   r2   r  r9   r    s   
zDaskExpr.modedefaultDaskExpr | NoDefaultoldSequence[Any]newreturn_dtypeIntoDType | Nonec                  sX    t u r
d}t|tt||t|d	 fdd}j|jjjdS )
NzK`replace_strict` requires an explicit value for `default` for dask backend.r   r"   r.   r   c                   sJ   |    fdd| D }r#tjfdd|D S |S )Nc                   s$   g | ]}| | qS r2   )replacer   re  r   )default_seriesmappingold_r2   r9   r     s    z9DaskExpr.replace_strict.<locals>.func.<locals>.<listcomp>c                   s   g | ]}|  qS r2   )r   )r   res)r  r2   r9   r     s    )r   r   r   )r   resultsr  r  r  r  r?   )r  r  r9   r     s   
z%DaskExpr.replace_strict.<locals>.funcr   r   )	r   
ValueErrordictzipr  r   r   r   r   )r?   r  r  r  r  r   r   r2   r  r9   replace_strict  s   zDaskExpr.replace_strictr   c                 C     t | S rI   r   r   r2   r2   r9   r-        zDaskExpr.strr
   c                 C  r  rI   r	   r   r2   r2   r9   dt  r  zDaskExpr.dtr   r  structN)
rz   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   )rz   rP   r   r   r.   r   )r   r   r.   r   )rz   r   rL   r   r.   r   )r   r-   rL   r   r.   r   )r   rP   rL   r   r.   r   )rL   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  r1  r2  r3  r4  r.   r   )r;  r   r<  r   r.   r   )r;  r   r.   r   )r<  r   r.   r   )rN  r.  rO  r+   r.   r   )ru  rv  r.   r   )r}  rv  ru  rv  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
   )m__name__
__module____qualname__r   r   rU   __annotations__rN   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rS   __rsub____rtruediv____rpow____rmod__rC   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rG   rs   rt   ru   
drop_nullsis_nullrx   ry   r   r   r   r   classmethodr   r   r=   r   r   rJ   rQ   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r"  r/  r:  r@  rC  rE  rI  rK  rM  rN  rl  ro  rr  rs  rt  r|  r  r   r  r  r  r  r  r  r  propertyr-   r  r   	any_valuefilterfirstranklastr  r  r2   r2   r2   r9   rT   L   s   
 



























	












O






#rT   )r"   r   )r,   r-   r.   r   )rO   rP   r.   r   )D
__future__r   r  typingr   r   r   r   pandasr,  narwhals._compliantr   r   narwhals._dask.expr_dtr
   narwhals._dask.expr_strr   narwhals._dask.utilsr   r   r   r   narwhals._expression_parsingr   r   narwhals._pandas_like.exprr   narwhals._pandas_like.utilsr   r   narwhals._utilsr   r   r   r   r   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+   rC   rG   rN   rS   rT   r2   r2   r2   r9   <module>   s>    




