o
    Lhf                     @  st  d dl mZ d dlZd dlmZmZmZmZmZ d dl	Z
d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d d	lmZmZ d d
lmZmZmZ d dl m!Z! erd dl"m#Z# d dl$m%  m&Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dlmZm3Z3 d dlm4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= G dd ded ed Z>dS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)DepthTrackingExprLazyExprDaskExprDateTimeNamespaceDaskExprStringNamespace)add_row_indexmaybe_evaluate_exprnarwhals_to_native_dtype)ExprKind!evaluate_output_names_and_aliases)get_dtype_backendnative_to_narwhals_dtype)Implementationgenerate_temporary_column_namenot_implementedInvalidOperationError)Sequence)Self)
AliasNames	EvalNames
EvalSeriesScalarKwargs)DaskLazyFrameDaskNamespace)r   ExprMetadata)Version_LimitedContext)FillNullStrategy	IntoDTypeModeKeepStrategyNonNestedLiteralNumericLiteralRollingInterpolationMethodTemporalLiteralc                   @  s  e Zd ZU ejZded< dddddZdddZdddZ	d	dd Z
d
d$d%Zed&d'dd-d.Zedd0d1Z	&	ddd6d7Zdd9d:Zd;d<ddCdDZddFdGZddIdJZddKdLZddMdNZddOdPZddQdRZddSdTZddUdVZddWdXZddZd[Zdd\d]Zdd^d_Zdd`daZddbdcZddddeZ ddfdgZ!ddhdiZ"ddjdkZ#ddldmZ$ddndoZ%ddpdqZ&ddrdsZ'ddtduZ(ddvdwZ)ddxdyZ*ddzd{Z+dd|d}Z,dddZ-dddZ.dddZ/dddZ0dddZ1dddZ2dddZ3dddZ4dddZ5dddZ6dddZ7dddZ8dddZ9dddZ:dddZ;dddZ<dddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddÄZGdddńZHdddǄZIdddɄZJdddτZKdddфZLdddӄZMdddՄZNdddׄZOdddلZPd ddބZQd!ddZRdddZSd"ddZTdddZUdddZVd#ddZWeXd$ddZYeXd%ddZZe[ Z\ded< e[ Z]ded< e[ Z^ded< e[ Z_ded< e[ Z`ded< e[ Zaded< e[ Zbded< e[ Zcded< e[ Zdded< e[ Zeded < e[ Zfded< e[ Zgded< e[ Zhded< e[ Zided< e[ Zjded< dS (&  DaskExprr   _implementationNscalar_kwargscall$EvalSeries[DaskLazyFrame, dx.Series]depthintfunction_namestrevaluate_output_namesEvalNames[DaskLazyFrame]alias_output_namesAliasNames | Noneversionr$   r0   ScalarKwargs | NonereturnNonec                C  s8   || _ || _|| _|| _|| _|| _|pi | _d | _d S N)_call_depth_function_name_evaluate_output_names_alias_output_names_version_scalar_kwargs	_metadata)selfr1   r3   r5   r7   r9   r;   r0    rI   T/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_dask/expr.py__init__5   s   

zDaskExpr.__init__dfr    Sequence[dx.Series]c                 C  s
   |  |S r?   )r@   )rH   rL   rI   rI   rJ   __call__I   s   
zDaskExpr.__call__c                 C  s   d S r?   rI   rH   rI   rI   rJ   __narwhals_expr__L   s    zDaskExpr.__narwhals_expr__r"   c                 C  s   ddl m} || jdS )Nr   r!   )r;   )narwhals._dask.namespacer"   rE   )rH   r"   rI   rI   rJ   __narwhals_namespace__N   s   zDaskExpr.__narwhals_namespace__kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r   c              	     s2   d fdd} j | j j j j j jdS )	NrL   r    r=   list[dx.Series]c                   s   dd  | D S )Nc                 S  s   g | ]	}|j d  d  qS )r   )loc).0resultrI   rI   rJ   
<listcomp>W   s    z4DaskExpr.broadcast.<locals>.func.<locals>.<listcomp>rI   rL   rO   rI   rJ   funcT   s   z DaskExpr.broadcast.<locals>.funcr3   r5   r7   r9   r;   r0   rL   r    r=   rU   )	__class__rA   rB   rC   rD   rE   rF   )rH   rS   r[   rI   rO   rJ   	broadcastS   s   zDaskExpr.broadcast )r5   cls
type[Self]evaluate_column_namescontextr%   c                 s$   d	 fdd}| |d| d |j dS )
NrL   r    r=   rU   c              
     sL   z fdd D W S  t y% } z   }r || d }~ww )Nc                   s   g | ]} j | qS rI   )_native_frame)rW   column_namerZ   rI   rJ   rY   n   s    z<DaskExpr.from_column_names.<locals>.func.<locals>.<listcomp>)KeyError_check_columns_exist)rL   eerrorrc   rZ   rJ   r[   l   s   
z(DaskExpr.from_column_names.<locals>.funcr   r3   r5   r7   r9   r;   r]   )rE   )ra   rc   rd   r5   r[   rI   rk   rJ   from_column_namesc   s   	zDaskExpr.from_column_namescolumn_indicesc                  s*   d
 fdd}| |dd|   d |jd	S )NrL   r    r=   rU   c                   s    fddD S )Nc                   s    g | ]} j jd d |f qS r?   )nativeiloc)rW   irZ   rI   rJ   rY      s     z>DaskExpr.from_column_indices.<locals>.func.<locals>.<listcomp>rI   rZ   rn   rZ   rJ   r[         z*DaskExpr.from_column_indices.<locals>.funcr   nthrl   r]   )_eval_names_indicesrE   )ra   rd   rn   r[   rI   rr   rJ   from_column_indices   s   zDaskExpr.from_column_indices	expr_nameCallable[..., dx.Series]expressifiable_args
Self | Anyc             	     sB   d
 fdd}j |jd j d| jjj|d	S )NrL   r    r=   rU   c                   sL   g }  } fdd D }|D ]}|fi |}|| q|S )Nc                   s   i | ]
\}}|t  |qS rI   )r   )rW   keyvaluerZ   rI   rJ   
<dictcomp>   s    
z9DaskExpr._with_callable.<locals>.func.<locals>.<dictcomp>)r@   itemsappend)rL   native_resultsnative_series_listother_native_seriesnative_seriesresult_nativer1   ry   rH   rZ   rJ   r[      s   

z%DaskExpr._with_callable.<locals>.func   z->r\   r]   )r^   rA   rB   rC   rD   rE   )rH   r1   rw   r0   ry   r[   rI   r   rJ   _with_callable   s   	zDaskExpr._with_callabler[   c             	     sR   | j  d u r	d n d u rn fdd}t| | j| j| j| j|| j| jdS )Nc                   s    | S r?   rI   )output_namescurrent_alias_output_namesr[   rI   rJ   <lambda>       z3DaskExpr._with_alias_output_names.<locals>.<lambda>)r1   r3   r5   r7   r9   r;   r0   )rD   typer@   rA   rB   rC   rE   rF   )rH   r[   r9   rI   r   rJ   _with_alias_output_names   s    z!DaskExpr._with_alias_output_namesFreverse%Callable[[dx.Series, Any], dx.Series]nameotherr   r   boolc                  s*   | j  fdd||d}|r|d}|S )Nc                   s
    | |S r?   rI   exprr   r1   rI   rJ   r         
 z'DaskExpr._with_binary.<locals>.<lambda>r   literal)r   alias)rH   r1   r   r   r   rX   rI   r   rJ   _with_binary   s   
zDaskExpr._with_binaryop_namec                   s   |   fdd |S )Nc                   s   t |  |S r?   )getattrr   r   rI   rJ   r      s    z%DaskExpr._binary_op.<locals>.<lambda>r   )rH   r   r   rI   r   rJ   
_binary_op   s   zDaskExpr._binary_opoperator_funcc                   s   | j  fdd||ddS )Nc                   s
    || S r?   rI   r   r   rI   rJ   r      r   z-DaskExpr._reverse_binary_op.<locals>.<lambda>Tr   r   )rH   r   r   r   rI   r   rJ   _reverse_binary_op   s   zDaskExpr._reverse_binary_opc                 C     |  d|S )N__add__r   rH   r   rI   rI   rJ   r         zDaskExpr.__add__c                 C  r   )N__sub__r   r   rI   rI   rJ   r      r   zDaskExpr.__sub__c                 C  r   )N__mul__r   r   rI   rI   rJ   r      r   zDaskExpr.__mul__c                 C  r   )N__truediv__r   r   rI   rI   rJ   r      r   zDaskExpr.__truediv__c                 C  r   )N__floordiv__r   r   rI   rI   rJ   r      r   zDaskExpr.__floordiv__c                 C  r   )N__pow__r   r   rI   rI   rJ   r      r   zDaskExpr.__pow__c                 C  r   )N__mod__r   r   rI   rI   rJ   r      r   zDaskExpr.__mod__objectc                 C  r   )N__eq__r   r   rI   rI   rJ   r      r   zDaskExpr.__eq__c                 C  r   )N__ne__r   r   rI   rI   rJ   r      r   zDaskExpr.__ne__c                 C  r   )N__ge__r   r   rI   rI   rJ   r      r   zDaskExpr.__ge__c                 C  r   )N__gt__r   r   rI   rI   rJ   r      r   zDaskExpr.__gt__c                 C  r   )N__le__r   r   rI   rI   rJ   r      r   zDaskExpr.__le__c                 C  r   )N__lt__r   r   rI   rI   rJ   r      r   zDaskExpr.__lt__c                 C  r   )N__and__r   r   rI   rI   rJ   r     r   zDaskExpr.__and__c                 C  r   )N__or__r   r   rI   rI   rJ   r     r   zDaskExpr.__or__c                 C     |  ddd |S )N__rsub__c                 S  s   | | S r?   rI   abrI   rI   rJ   r   	      z#DaskExpr.__rsub__.<locals>.<lambda>r   r   rI   rI   rJ   r     rs   zDaskExpr.__rsub__c                 C  r   )N__rtruediv__c                 S  s   | | S r?   rI   r   rI   rI   rJ   r     r   z'DaskExpr.__rtruediv__.<locals>.<lambda>r   r   rI   rI   rJ   r     rs   zDaskExpr.__rtruediv__c                 C  r   )N__rfloordiv__c                 S  s   | | S r?   rI   r   rI   rI   rJ   r     r   z(DaskExpr.__rfloordiv__.<locals>.<lambda>r   r   rI   rI   rJ   r     rs   zDaskExpr.__rfloordiv__c                 C  r   )N__rpow__c                 S  s   | | S r?   rI   r   rI   rI   rJ   r     r   z#DaskExpr.__rpow__.<locals>.<lambda>r   r   rI   rI   rJ   r     rs   zDaskExpr.__rpow__c                 C  r   )N__rmod__c                 S  s   | | S r?   rI   r   rI   rI   rJ   r     r   z#DaskExpr.__rmod__.<locals>.<lambda>r   r   rI   rI   rJ   r     rs   zDaskExpr.__rmod__c                 C     |  dd dS )Nc                 S     |   S r?   )
__invert__r   rI   rI   rJ   r     r   z%DaskExpr.__invert__.<locals>.<lambda>r   r   rO   rI   rI   rJ   r        zDaskExpr.__invert__c                 C  r   )Nc                 S     |    S r?   )mean	to_seriesr   rI   rI   rJ   r     r   zDaskExpr.mean.<locals>.<lambda>r   r   rO   rI   rI   rJ   r     r   zDaskExpr.meanc                   s(   ddl m  d	 fdd}|dS )
Nr   r   s	dx.Seriesr=   c                   s2   t | jjtj}| sd} ||   S )Nz<`median` operation not supported for non-numeric input type.)r   dtyperE   r   DASK
is_numericmedian_approximater   )r   r   msgr   rH   rI   rJ   r[      s
   zDaskExpr.median.<locals>.funcmedian)r   r   r=   r   )narwhals.exceptionsr   r   rH   r[   rI   r   rJ   r     s   zDaskExpr.medianc                 C  r   )Nc                 S  r   r?   )minr   r   rI   rI   rJ   r   *  r   zDaskExpr.min.<locals>.<lambda>r   r   rO   rI   rI   rJ   r   )  r   zDaskExpr.minc                 C  r   )Nc                 S  r   r?   )maxr   r   rI   rI   rJ   r   -  r   zDaskExpr.max.<locals>.<lambda>r   r   rO   rI   rI   rJ   r   ,  r   zDaskExpr.maxddofc                      | j  fdddd idS )Nc                      | j  d S Nr   )stdr   r   r   rI   rJ   r   1      zDaskExpr.std.<locals>.<lambda>r   r   r/   r   rH   r   rI   r   rJ   r   /  
   
zDaskExpr.stdc                   r   )Nc                   r   r   )varr   r   r   rI   rJ   r   8  r   zDaskExpr.var.<locals>.<lambda>r   r   r/   r   r   rI   r   rJ   r   6  r   zDaskExpr.varc                 C  r   )Nc                 S  r   r?   )skewr   r   rI   rI   rJ   r   >  r   zDaskExpr.skew.<locals>.<lambda>r   r   rO   rI   rI   rJ   r   =  r   zDaskExpr.skewc                 C  r   )Nc                 S  r   r?   )kurtosisr   r   rI   rI   rJ   r   A  r   z#DaskExpr.kurtosis.<locals>.<lambda>r   r   rO   rI   rI   rJ   r   @  r   zDaskExpr.kurtosisnc                      |   fdddS )Nc                   
   |   S r?   )shiftr   r   rI   rJ   r   D  r   z DaskExpr.shift.<locals>.<lambda>r   r   )rH   r   rI   r   rJ   r   C     zDaskExpr.shiftc                C      |rd}t || dd dS )Nz:`cum_sum(reverse=True)` is not supported with Dask backendc                 S  r   r?   )cumsumr   rI   rI   rJ   r   L  r   z"DaskExpr.cum_sum.<locals>.<lambda>cum_sumNotImplementedErrorr   rH   r   r   rI   rI   rJ   r   F  s   zDaskExpr.cum_sumc                C  r   )Nz<`cum_count(reverse=True)` is not supported with Dask backendc                 S  s   |    t S r?   )isnaastyper4   r   r   rI   rI   rJ   r   T      z$DaskExpr.cum_count.<locals>.<lambda>	cum_countr   r   rI   rI   rJ   r   N  s   zDaskExpr.cum_countc                C  r   )Nz:`cum_min(reverse=True)` is not supported with Dask backendc                 S  r   r?   )cumminr   rI   rI   rJ   r   \  r   z"DaskExpr.cum_min.<locals>.<lambda>cum_minr   r   rI   rI   rJ   r   W     zDaskExpr.cum_minc                C  r   )Nz:`cum_max(reverse=True)` is not supported with Dask backendc                 S  r   r?   )cummaxr   rI   rI   rJ   r   c  r   z"DaskExpr.cum_max.<locals>.<lambda>cum_maxr   r   rI   rI   rJ   r   ^  r   zDaskExpr.cum_maxc                C  r   )Nz;`cum_prod(reverse=True)` is not supported with Dask backendc                 S  r   r?   )cumprodr   rI   rI   rJ   r   j  r   z#DaskExpr.cum_prod.<locals>.<lambda>cum_prodr   r   rI   rI   rJ   r   e  r   zDaskExpr.cum_prodwindow_sizemin_samplescenterc                     |   fdddS )Nc                      | j  d S N)windowmin_periodsr   )rollingsumr   r   r   r   rI   rJ   r   n      z&DaskExpr.rolling_sum.<locals>.<lambda>rolling_sumr   rH   r   r   r   rI   r  rJ   r	  l     zDaskExpr.rolling_sumc                  r   )Nc                   r  r  )r  r   r   r  rI   rJ   r   v  r  z'DaskExpr.rolling_mean.<locals>.<lambda>rolling_meanr   r
  rI   r  rJ   r  t  r  zDaskExpr.rolling_meanc                  ,   |dkr|   fdddS d}t|)Nr   c                   r  r  )r  r   r   r  rI   rJ   r     r  z&DaskExpr.rolling_var.<locals>.<lambda>rolling_varz5Dask backend only supports `ddof=1` for `rolling_var`r   r   rH   r   r   r   r   r   rI   r  rJ   r  |     zDaskExpr.rolling_varc                  r  )Nr   c                   r  r  )r  r   r   r  rI   rJ   r     r  z&DaskExpr.rolling_std.<locals>.<lambda>rolling_stdz5Dask backend only supports `ddof=1` for `rolling_std`r  r  rI   r  rJ   r    r  zDaskExpr.rolling_stdc                 C  r   )Nc                 S  r   r?   )r  r   r   rI   rI   rJ   r     r   zDaskExpr.sum.<locals>.<lambda>r  r   rO   rI   rI   rJ   r    r   zDaskExpr.sumc                 C  r   )Nc                 S  r   r?   )countr   r   rI   rI   rJ   r     r   z DaskExpr.count.<locals>.<lambda>r  r   rO   rI   rI   rJ   r    r   zDaskExpr.countdecimalsc                   r   )Nc                   r   r?   )roundr   r  rI   rJ   r     r   z DaskExpr.round.<locals>.<lambda>r  r   )rH   r  rI   r  rJ   r    r   zDaskExpr.roundc                 C  r   )Nc                 S  r   r?   )uniquer   rI   rI   rJ   r     r   z!DaskExpr.unique.<locals>.<lambda>r  r   rO   rI   rI   rJ   r    r   zDaskExpr.uniquec                 C  r   )Nc                 S  r   r?   dropnar   rI   rI   rJ   r     r   z%DaskExpr.drop_nulls.<locals>.<lambda>
drop_nullsr   rO   rI   rI   rJ   r    r   zDaskExpr.drop_nullsc                 C  r   )Nc                 S  r   r?   )absr   rI   rI   rJ   r     r   zDaskExpr.abs.<locals>.<lambda>r  r   rO   rI   rI   rJ   r    r   zDaskExpr.absc                 C  r   )Nc                 S  s   | j d ddd d S )NTF)axisskipnasplit_everyout)allr   r   rI   rI   rJ   r     s    zDaskExpr.all.<locals>.<lambda>r   r   rO   rI   rI   rJ   r     s   zDaskExpr.allc                 C  r   )Nc                 S  s   | j dddd S )Nr   TF)r  r  r  )anyr   r   rI   rI   rJ   r     r   zDaskExpr.any.<locals>.<lambda>r!  r   rO   rI   rI   rJ   r!    s   zDaskExpr.anyr|   float | Nonec                   sD   |d u rt jn||d u rtdn|d fdd} |dS )	Nnanr   r   r=   c                   s:   t d| | k}|d}t| j jrn}| ||S )Nr   F)r   fillnar   r   r.   mask)r   r%  fillrH   value_nullablevalue_numpyrI   rJ   r[     s   
zDaskExpr.fill_nan.<locals>.funcfill_nanr   r   r=   r   )pdNAfloatr   )rH   r|   r[   rI   r'  rJ   r*    s   zDaskExpr.fill_nanSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimit
int | Nonec                   s   d fdd}|  |dS )Nr   r   r=   c                   s:   d ur|  }|S dkr| j dn| j d}|S )Nforward)r2  )r$  ffillbfill)r   res_serr2  r0  r|   rI   rJ   r[     s   

z DaskExpr.fill_null.<locals>.func	fill_nullr+  r   )rH   r|   r0  r2  r[   rI   r8  rJ   r9    s   zDaskExpr.fill_nulllower_bound.Self | NumericLiteral | TemporalLiteral | Noneupper_boundc                 C  s   | j dd d||dS )Nc                 S  s   | j ||dS )N)lowerupper)clip)r   r:  r<  rI   rI   rJ   r     s    zDaskExpr.clip.<locals>.<lambda>r?  )r:  r<  r   )rH   r:  r<  rI   rI   rJ   r?    s   zDaskExpr.clipc                 C  r   )Nc                 S  r   r?   )diffr   rI   rI   rJ   r     r   zDaskExpr.diff.<locals>.<lambda>r@  r   rO   rI   rI   rJ   r@    r   zDaskExpr.diffc                 C  r   )Nc                 S  s   | j dd S )NFr  )nuniquer   r   rI   rI   rJ   r     r   z#DaskExpr.n_unique.<locals>.<lambda>n_uniquer   rO   rI   rI   rJ   rB       zDaskExpr.n_uniquec                 C  r   )Nc                 S  r   r?   )r   r   rI   rI   rJ   r     r   z"DaskExpr.is_null.<locals>.<lambda>is_nullr   rO   rI   rI   rJ   rD    r   zDaskExpr.is_nullc                   s   d fdd}  |dS )Nr   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   rE   r.   r   r   )r   r   r   rO   rI   rJ   r[     s   zDaskExpr.is_nan.<locals>.funcrD  r+  r   r   rI   rO   rJ   is_nan  s   	zDaskExpr.is_nanc                 C  r   )Nc                 S  s
   | j  S r?   )sizer   r   rI   rI   rJ   r      r   zDaskExpr.len.<locals>.<lambda>lenr   rO   rI   rI   rJ   rG    r   zDaskExpr.lenquantiler.  interpolationr+   c                 C  s.   |dkrddd}| j |d|d	S d
}t|)Nlinearr   r   rH  r.  r=   c                 S  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   rH  r   )r   rH  r   rI   rI   rJ   r[     s   
zDaskExpr.quantile.<locals>.func)rH  zx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.)r   r   rH  r.  r=   r   r  )rH   rH  rI  r[   r   rI   rI   rJ   rH    s
   
zDaskExpr.quantilec                 C     ddd}|  |dS )Nr   r   r=   c                 S  H   | j }td|gd}t|  |}|||di| }|| |S )N   n_bytescolumnsr   r   r   r   to_framegroupbyaggisin)r   _name	col_tokenframefirst_distinct_indexrI   rI   rJ   r[     
   z(DaskExpr.is_first_distinct.<locals>.funcis_first_distinctr+  r   r   rI   rI   rJ   r_       
zDaskExpr.is_first_distinctc                 C  rO  )Nr   r   r=   c                 S  rP  )NrQ  rR  r   rU  )r   rZ  r[  r\  last_distinct_indexrI   rI   rJ   r[     r^  z'DaskExpr.is_last_distinct.<locals>.funcis_last_distinctr+  r   r   rI   rI   rJ   rb    r`  zDaskExpr.is_last_distinctc                 C  rO  )Nr   r   r=   c                 S  s*   | j }|  j|ddjd|tfddkS )NFr  rF  )metar   )r   rV  rW  	transformr4   )r   rZ  rI   rI   rJ   r[   (  s   
z DaskExpr.is_unique.<locals>.func	is_uniquer+  r   r   rI   rI   rJ   re  '  s   
	zDaskExpr.is_uniquec                   r   )Nc                   r   r?   )rY  r   r   rI   rJ   r   4  r   z DaskExpr.is_in.<locals>.<lambda>is_inr   r   rI   r   rJ   rf  3  r   zDaskExpr.is_inc                 C  r   )Nc                 S  s   |     S r?   )r   r  r   r   rI   rI   rJ   r   8  r   z%DaskExpr.null_count.<locals>.<lambda>
null_countr   rO   rI   rI   rJ   rg  6  rC  zDaskExpr.null_countpartition_bySequence[str]order_byc              	     s   ddl m} ssJ dfdd}nA sd	}t|r'd
}t||}z|j|  W n tyL   d| dd|j d}t|d w d fdd}j|j	d j
d jjjdS )Nr   )PandasLikeGroupByrL   r    r=   rM   c                   s   | j  dddS )NF)
descending
nulls_last)sortrZ   )rj  rH   rI   rJ   r[   D  s   zDaskExpr.over.<locals>.funczOnly elementary expressions are supported for `.over` in dask.

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

Supported functions are z, 
c                   s   t | g \}}t D tjddtd | j}dkr;t|dkr+d}t||j	fi j
|d }n|t| j	fi j
}W d    n1 sSw   Y  | |jtt||dj  fd	d
|D S )Nignorez.*`meta` is not specified)messagecategoryrF  r   z)Safety check failed, please report a bug.r   )rT  c                   s   g | ]} | qS rI   rI   )rW   r   result_framerI   rJ   rY   v  r   z/DaskExpr.over.<locals>.func.<locals>.<listcomp>)r   warningscatch_warningsfilterwarningsUserWarningro   rW  rG  AssertionErrorrd  rF   rV  list_with_nativerenamedictzip)rL   r   aliasesgroupedr   
res_native)dask_function_namerh  rH   rs  rJ   r[   ]  s@   

r   z->overrl   rL   r    r=   rM   )narwhals._pandas_like.group_byrk  _is_elementaryr   
_leaf_name_REMAP_AGGSrg   joinr^   rA   rB   rC   rD   rE   )rH   rh  rj  rk  r[   r   r5   rI   )r  rj  rh  rH   rJ   over;  s<   


zDaskExpr.overr   r'   c                   s   d fdd} |dS )Nr   r   r=   c                   s   t  j}| |S r?   )r   rE   r   )r   native_dtyper   rH   rI   rJ   r[     s   
zDaskExpr.cast.<locals>.funcr   r+  r   )rH   r   r[   rI   r  rJ   r     s   zDaskExpr.castc                 C     dd l m} | |jdS )Nr   	is_finite)
dask.arrayarrayr   isfiniterH   darI   rI   rJ   r       zDaskExpr.is_finitebasec                   s(   dd l m d fdd}| |dS )	Nr   r   r   r=   c                   s    |    S r?   )logr   r  r  rI   rJ   _log  r   zDaskExpr.log.<locals>._logr  r+  )r  r  r   )rH   r  r  rI   r  rJ   r    s   zDaskExpr.logc                 C  r  )Nr   exp)r  r  r   r  r  rI   rI   rJ   r    r  zDaskExpr.expc                 C  r  )Nr   sqrt)r  r  r   r  r  rI   rI   rJ   r    r  zDaskExpr.sqrtkeepr(   c                  s"   d	 fdd}| j |dd idS )
Nr   r   r=   c                   s,   | j }|   | } dkr|dS |S )Nr!  r   )r   rV  modehead)r   rZ  rX   r  rI   rJ   r[     s   zDaskExpr.mode.<locals>.funcr  r  r/   r+  r   )rH   r  r[   rI   r  rJ   r    s   zDaskExpr.moder   c                 C     t | S r?   r   rO   rI   rI   rJ   r6        zDaskExpr.strr   c                 C  r  r?   r
   rO   rI   rI   rJ   dt  r  zDaskExpr.dtr   arg_maxarg_minarg_trueewm_meangather_everyr  map_batchessamplerankreplace_strictrn  tailrz  catstruct)r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r$   r0   r<   r=   r>   r  )r=   r>   )r=   r"   )rS   rT   r=   r   )
ra   rb   rc   r8   rd   r%   r5   r6   r=   r   )rn   r4   rd   r%   r=   r   )r`   N)
rw   r6   r0   r<   r1   rx   ry   rz   r=   r   )r[   r:   r=   r   )
r1   r   r   r6   r   r   r   r   r=   r   )r   r6   r   r   r=   r   )r   r6   r   rx   r   r   r=   r   )r   r   r=   r   )r   r   r=   r   )r=   r   )r   r4   r=   r   )r   r4   r=   r   )r   r   r=   r   )r   r4   r   r4   r   r   r=   r   )
r   r4   r   r4   r   r   r   r4   r=   r   )r  r4   r=   r   )r|   r"  r=   r   )r|   r/  r0  r1  r2  r3  r=   r   )r:  r;  r<  r;  r=   r   )rH  r.  rI  r+   r=   r   )rh  ri  rj  ri  r=   r   )r   r'   r=   r   )r  r.  r=   r   )r  r(   r=   r   )r=   r   )r=   r   )k__name__
__module____qualname__r   r   r.   __annotations__rK   rN   rP   rR   r_   classmethodrm   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   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*  r9  r?  r@  rB  rD  rE  rG  rH  r_  rb  re  rf  rg  r  r   r  r  r  r  r  propertyr6   r  r   r  r  r  r  r  r  r  r  r  r  rn  r  rz  r  r  rI   rI   rI   rJ   r-   /   s   
 	

Fr-   )r    r   )?
__future__r   ru  typingr   r   r   r   r   pandasr,  narwhals._compliantr   r	   narwhals._dask.expr_dtr   narwhals._dask.expr_strr   narwhals._dask.utilsr   r   r   narwhals._expression_parsingr   r   narwhals._pandas_like.utilsr   r   narwhals._utilsr   r   r   r   r   collections.abcr   dask.dataframe.dask_expr	dataframe	dask_exprdxtyping_extensionsr   narwhals._compliant.typingr   r   r   r   narwhals._dask.dataframer    rQ   r"   r#   r$   r%   narwhals.typingr&   r'   r(   r)   r*   r+   r,   r-   rI   rI   rI   rJ   <module>   s4    $
