o
    hp                     @  s  d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	l
mZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! erd dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl(m*Z* d dl(m+Z+ d dlm,Z, d dl-m.Z. d d l/m0Z0 d d!l1m2Z2 d d"l3m4Z4 d d#l5m6Z6 d d$l5m7Z7 d d%l5m8Z8 d d&l5m9Z9 d d'l5m:Z: d d(lm;Z; d d)lm<Z< G d*d+ d+ed, Z=dS )-    )annotationsN)TYPE_CHECKING)Any)Callable)Literal)Sequence)cast)LazyExpr)ExprKindSparkLikeExprDateTimeNamespaceSparkLikeExprListNamespaceSparkLikeExprStringNamespaceSparkLikeExprStructNamespaceWindowInputs)import_functions)import_native_dtypes)import_window)narwhals_to_native_dtype)get_pyspark)Implementation)not_implemented)parse_version)ColumnWindow)Self)
AliasNames)	EvalNames)
EvalSeries)ExprMetadata)SparkLikeLazyFrameSparkLikeNamespace)WindowFunction)DType)FillNullStrategy)NonNestedLiteral)NumericLiteral)
RankMethod)TemporalLiteral)Version)_FullContextc                   @  s  e Zd ZdddZdddZdddZedd Zedd Zedd d!Z	dd"d#Z
dd%d&Zdd)d*Zdd/d0Zd1d2dd:d;ZeddAdBZeddDdEZddIdJZddLdMZddOdPZddQdRZddSdTZddUdVZddWdXZddYdZZdd[d\Zdd]d^Zdd_d`ZddadbZddcddZddedfZddgdhZ ddidjZ!ddkdlZ"ddmdnZ#ddodpZ$ddqdrZ%ddsdtZ&ddudvZ'ddwdxZ(ddydzZ)dd}d~Z*dddZ+dddZ,dddZ-dddZ.dddZ/dddZ0dddZ1dddZ2dddZ3dddZ4dddZ5dddZ6	1	1ddddZ7dddZ8d ddZ9dddZ:dddZ;dddZ<dddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDddd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߄ZPed	ddZQed
ddZRedddZSedddZTeU ZVeU ZWeU ZXd1S (  SparkLikeExprcall&EvalSeries[SparkLikeLazyFrame, Column]evaluate_output_namesEvalNames[SparkLikeLazyFrame]alias_output_namesAliasNames | Nonebackend_versiontuple[int, ...]versionr/   implementationr   returnNonec                C  s4   || _ || _|| _|| _|| _|| _d | _d | _d S N)_call_evaluate_output_names_alias_output_names_backend_version_version_implementation_window_function	_metadata)selfr2   r4   r6   r8   r:   r;    rH   M/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_spark_like/expr.py__init__2   s   

zSparkLikeExpr.__init__dfr%   Sequence[Column]c                 C  
   |  |S r>   r?   )rG   rK   rH   rH   rI   __call__E   s   
zSparkLikeExpr.__call__kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r    c                   s<   |t ju r S d fdd} j| j j j j jdS )	NrK   r%   r<   rL   c                       fdd D S )Nc              	     s(   g | ]}|    jd qS )   )over_WindowpartitionBy_Flit).0resultrK   rH   rI   
<listcomp>M   s    z9SparkLikeExpr.broadcast.<locals>.func.<locals>.<listcomp>rH   r[   rG   r[   rI   funcL   s   
z%SparkLikeExpr.broadcast.<locals>.funcr4   r6   r8   r:   r;   rK   r%   r<   rL   )r
   LITERAL	__class__r@   rA   rB   rC   rD   )rG   rP   r^   rH   r]   rI   	broadcastH   s   
zSparkLikeExpr.broadcastc                 C     t r
ddlm} |S t| jS )Nr   )	functions)r   sqlframe.basere   r   rD   )rG   re   rH   rH   rI   rW   Z      
zSparkLikeExpr._Fc                 C  rd   )Nr   )types)r   rf   rh   r   rD   )rG   rh   rH   rH   rI   _native_dtypesc   rg   zSparkLikeExpr._native_dtypestype[Window]c                 C  rd   )Nr   r   )r   sqlframe.base.windowr   r   rD   )rG   r   rH   rH   rI   rU   l   rg   zSparkLikeExpr._Windowc                 C  s   d S r>   rH   r]   rH   rH   rI   __narwhals_expr__u   s    zSparkLikeExpr.__narwhals_expr__r'   c                 C  s    ddl m} || j| j| jdS )Nr   r&   )r8   r:   r;   )narwhals._spark_like.namespacer'   rB   rC   rD   )rG   r'   rH   rH   rI   __narwhals_namespace__w   s   z$SparkLikeExpr.__narwhals_namespace__window_functionr(   c                 C  s,   | j | j| j| j| j| j| jd}||_|S )Nr_   )rb   r?   r@   rA   rB   rC   rD   rE   )rG   ro   rZ   rH   rH   rI   _with_window_function   s   z#SparkLikeExpr._with_window_functionreversebool	func_name0Literal['sum', 'max', 'min', 'count', 'product']c                  s   d fdd}|S )Nwindow_inputsr   r<   r   c                   sn   rfdd| j D }n
fdd| j D } t| j| jd}tj	 | j
|S )Nc                      g | ]
} j | qS rH   rW   coldesc_nulls_lastrY   xr]   rH   rI   r\          z@SparkLikeExpr._cum_window_func.<locals>.func.<locals>.<listcomp>c                   rv   rH   rW   rx   asc_nulls_firstrz   r]   rH   rI   r\      r|   r   )order_byrU   rV   listpartition_byorderByrowsBetweenunboundedPrecedinggetattrrW   exprrT   ru   order_by_colswindowrs   rq   rG   rH   rI   r^      s   

z,SparkLikeExpr._cum_window_func.<locals>.funcru   r   r<   r   rH   )rG   rq   rs   r^   rH   r   rI   _cum_window_func   s   zSparkLikeExpr._cum_window_funcN)ddof$Literal['sum', 'mean', 'std', 'var']centerwindow_sizeintmin_samplesr   
int | Nonec          	        s   g d|r#|d d }|d d }  j| |   j| n  j| d   jd
 fdd	}|S )N)summeanstdvarrS      ru   r   r<   r   c                   s    t| jfdd| jD }dv r }nGdkr+ dkr+d}n<dv r6 dkr6d}n1d	krA dkrAd
}n&d	krL dkrLd}ndv rZd d}t|d d d}t|j	j
| j|ktj|| j|S )Nc                   rv   rH   r}   rz   r]   rH   rI   r\          zDSparkLikeExpr._rolling_window_func.<locals>.func.<locals>.<listcomp>>   r   r   r   r   var_poprS   var_sampr   
stddev_popstddev_samp>   r   r   z;Only ddof=0 and ddof=1 are currently supported for rolling_.z,Only the following functions are supported: z.
Got: )rU   rV   r   r   r   r   r   
ValueErrorrW   whencountr   rT   r   )ru   r   func_msgr   endrs   r   rG   startsupported_funcsrH   rI   r^      s4   z0SparkLikeExpr._rolling_window_func.<locals>.funcr   )rU   
currentRow)	rG   rs   r   r   r   r   half	remainderr^   rH   r   rI   _rolling_window_func   s   	
z"SparkLikeExpr._rolling_window_funccls
type[Self]evaluate_column_namescontextr0   c                 s(   d fdd}| | d |j |j|jdS )	NrK   r%   r<   list[Column]c                   rR   )Nc                   s   g | ]} j |qS rH   rW   rx   )rY   col_namer[   rH   rI   r\      s    zASparkLikeExpr.from_column_names.<locals>.func.<locals>.<listcomp>rH   r[   r   r[   rI   r^      s   z-SparkLikeExpr.from_column_names.<locals>.funcr_   rK   r%   r<   r   rB   rC   rD   )r   r   r   r^   rH   r   rI   from_column_names   s   zSparkLikeExpr.from_column_namescolumn_indicesc                  s0   d
 fdd}| | fddd |j |j|jd	S )NrK   r%   r<   r   c                   s   j   fddD S )Nc                   s   g | ]
}j  | qS rH   r   rY   icolumnsrK   rH   rI   r\      r   zCSparkLikeExpr.from_column_indices.<locals>.func.<locals>.<listcomp>r   r[   r   r   rI   r^      s   z/SparkLikeExpr.from_column_indices.<locals>.funcc                   s    fddD S )Nc                   s   g | ]} j | qS rH   r   r   r[   rH   rI   r\      s    zGSparkLikeExpr.from_column_indices.<locals>.<lambda>.<locals>.<listcomp>rH   r[   r   r[   rI   <lambda>   s    z3SparkLikeExpr.from_column_indices.<locals>.<lambda>r_   r   r   )r   r   r   r^   rH   r   rI   from_column_indices   s   
z!SparkLikeExpr.from_column_indicesCallable[..., Column]expressifiable_args
Self | Anyc                  s2   d fdd}j |jjjjjdS )	NrK   r%   r<   r   c                   s>    } j j fdd D fdd|D S )Nc                   s.   i | ]\}}| |r |n|qS rH   )_is_expr_evaluate_expr)rY   keyvalue)rK   rX   rG   rH   rI   
<dictcomp>  s    z>SparkLikeExpr._with_callable.<locals>.func.<locals>.<dictcomp>c                   s   g | ]
} |fi qS rH   rH   )rY   native_series)r2   other_native_seriesrH   rI   r\         z>SparkLikeExpr._with_callable.<locals>.func.<locals>.<listcomp>)rW   rX   items)rK   native_series_listr2   r   rG   )rK   rX   r   rI   r^     s   z*SparkLikeExpr._with_callable.<locals>.funcr_   r   )rb   r@   rA   rB   rC   rD   )rG   r2   r   r^   rH   r   rI   _with_callable   s   zSparkLikeExpr._with_callabler^   c                C  s"   t | | j| j|| j| j| jdS )N)r2   r4   r6   r8   r:   r;   )typer?   r@   rB   rC   rD   rG   r^   rH   rH   rI   _with_alias_output_names  s   z&SparkLikeExpr._with_alias_output_namesotherc                 C     | j dd |dS )Nc                 S  rM   r>   )__eq___inputr   rH   rH   rI   r   %     
 z&SparkLikeExpr.__eq__.<locals>.<lambda>r   r   rG   r   rH   rH   rI   r   #     zSparkLikeExpr.__eq__c                 C  r   )Nc                 S  rM   r>   )__ne__r   rH   rH   rI   r   *  r   z&SparkLikeExpr.__ne__.<locals>.<lambda>r   r   r   rH   rH   rI   r   (  r   zSparkLikeExpr.__ne__c                 C  r   )Nc                 S  rM   r>   )__add__r   rH   rH   rI   r   /  r   z'SparkLikeExpr.__add__.<locals>.<lambda>r   r   r   rH   rH   rI   r   -  r   zSparkLikeExpr.__add__c                 C  r   )Nc                 S  rM   r>   __sub__r   rH   rH   rI   r   4  r   z'SparkLikeExpr.__sub__.<locals>.<lambda>r   r   r   rH   rH   rI   r   2  r   zSparkLikeExpr.__sub__c                 C     | j dd |ddS )Nc                 S  
   | | S r>   r   r   rH   rH   rI   r   9  r   z(SparkLikeExpr.__rsub__.<locals>.<lambda>r   literalr   aliasr   rH   rH   rI   __rsub__7  
   zSparkLikeExpr.__rsub__c                 C  r   )Nc                 S  rM   r>   )__mul__r   rH   rH   rI   r   >  r   z'SparkLikeExpr.__mul__.<locals>.<lambda>r   r   r   rH   rH   rI   r   <  r   zSparkLikeExpr.__mul__c                 C  r   )Nc                 S  rM   r>   __truediv__r   rH   rH   rI   r   C  r   z+SparkLikeExpr.__truediv__.<locals>.<lambda>r   r   r   rH   rH   rI   r   A  r   zSparkLikeExpr.__truediv__c                 C  r   )Nc                 S  r   r>   r   r   rH   rH   rI   r   H  r   z,SparkLikeExpr.__rtruediv__.<locals>.<lambda>r   r   r   r   rH   rH   rI   __rtruediv__F  r   zSparkLikeExpr.__rtruediv__c                   s   d fdd} j ||dS )	Nr   r   r   r<   c                   s    j | | S r>   rW   floorr   r]   rH   rI   	_floordivL     z-SparkLikeExpr.__floordiv__.<locals>._floordivr   r   r   r   r   r<   r   r   )rG   r   r   rH   r]   rI   __floordiv__K  s   zSparkLikeExpr.__floordiv__c                   s"   d	 fdd} j ||ddS )
Nr   r   r   r<   c                   s    j ||  S r>   r   r   r]   rH   rI   
_rfloordivR  r   z/SparkLikeExpr.__rfloordiv__.<locals>._rfloordivr   r   r   r   )rG   r   r   rH   r]   rI   __rfloordiv__Q  s   zSparkLikeExpr.__rfloordiv__c                 C  r   )Nc                 S  rM   r>   __pow__r   rH   rH   rI   r   Y  r   z'SparkLikeExpr.__pow__.<locals>.<lambda>r   r   r   rH   rH   rI   r   W  r   zSparkLikeExpr.__pow__c                 C  r   )Nc                 S  r   r>   r   r   rH   rH   rI   r   ^  r   z(SparkLikeExpr.__rpow__.<locals>.<lambda>r   r   r   r   rH   rH   rI   __rpow__\  r   zSparkLikeExpr.__rpow__c                 C  r   )Nc                 S  rM   r>   __mod__r   rH   rH   rI   r   c  r   z'SparkLikeExpr.__mod__.<locals>.<lambda>r   r   r   rH   rH   rI   r   a  r   zSparkLikeExpr.__mod__c                 C  r   )Nc                 S  r   r>   r   r   rH   rH   rI   r   h  r   z(SparkLikeExpr.__rmod__.<locals>.<lambda>r   r   r   r   rH   rH   rI   __rmod__f  r   zSparkLikeExpr.__rmod__c                 C  r   )Nc                 S  rM   r>   )__ge__r   rH   rH   rI   r   m  r   z&SparkLikeExpr.__ge__.<locals>.<lambda>r   r   r   rH   rH   rI   r   k  r   zSparkLikeExpr.__ge__c                 C  r   )Nc                 S  s   | |kS r>   rH   r   rH   rH   rI   r   q  s    z&SparkLikeExpr.__gt__.<locals>.<lambda>r   r   r   rH   rH   rI   __gt__p  s   zSparkLikeExpr.__gt__c                 C  r   )Nc                 S  rM   r>   )__le__r   rH   rH   rI   r   u  r   z&SparkLikeExpr.__le__.<locals>.<lambda>r   r   r   rH   rH   rI   r   s  r   zSparkLikeExpr.__le__c                 C  r   )Nc                 S  rM   r>   )__lt__r   rH   rH   rI   r   z  r   z&SparkLikeExpr.__lt__.<locals>.<lambda>r   r   r   rH   rH   rI   r   x  r   zSparkLikeExpr.__lt__c                 C  r   )Nc                 S  rM   r>   )__and__r   rH   rH   rI   r     r   z'SparkLikeExpr.__and__.<locals>.<lambda>r   r   r   rH   rH   rI   r   }  r   zSparkLikeExpr.__and__c                 C  r   )Nc                 S  rM   r>   )__or__r   rH   rH   rI   r     r   z&SparkLikeExpr.__or__.<locals>.<lambda>r   r   r   rH   rH   rI   r     r   zSparkLikeExpr.__or__c                 C  s   t dtj}| |S )Nr   )r   operatorinvertr   )rG   r   rH   rH   rI   
__invert__  s   
zSparkLikeExpr.__invert__c                 C     |  | jjS r>   )r   rW   absr]   rH   rH   rI   r       zSparkLikeExpr.absnamestrc                   s.   d fdd}| j | j| j|| j| j| jdS )NnamesSequence[str]r<   c                   s$   t | dkrd|  }t| gS )NrS   z:Expected function with single output, found output names: )lenr   )r  r   r  rH   rI   r6     s   
z/SparkLikeExpr.alias.<locals>.alias_output_namesr_   )r  r  r<   r  )rb   r?   r@   rB   rC   rD   )rG   r  r6   rH   r
  rI   r     s   zSparkLikeExpr.aliasc                 C  r  r>   )r   rW   bool_andr]   rH   rH   rI   all  r  zSparkLikeExpr.allc                 C  r  r>   )r   rW   bool_orr]   rH   rH   rI   any  r  zSparkLikeExpr.anydtypeDType | type[DType]c                      d fdd} |S )Nr   r   r<   c                   s   t  jj}| |S r>   )r   rC   ri   r   )r   spark_dtyper  rG   rH   rI   _cast  s   

z!SparkLikeExpr.cast.<locals>._castr   r   r<   r   r   )rG   r  r  rH   r  rI   r     s   
zSparkLikeExpr.castc                 C  r  r>   )r   rW   r   r]   rH   rH   rI   r     r  zSparkLikeExpr.countc                 C  r  r>   )r   rW   maxr]   rH   rH   rI   r    r  zSparkLikeExpr.maxc                 C  r  r>   )r   rW   r   r]   rH   rH   rI   r     r  zSparkLikeExpr.meanc                      d fdd}  |S )Nr   r   r<   c                   sD    j  rt  }d urt|dk r j| ddS  j| S )N)      doubleg      ?)rD   
is_pysparkr   r   rW   percentile_approxr   median)r   pysparkr]   rH   rI   _median  s   z%SparkLikeExpr.median.<locals>._medianr  r   )rG   r  rH   r]   rI   r       
zSparkLikeExpr.medianc                 C  r  r>   )r   rW   minr]   rH   rH   rI   r!    r  zSparkLikeExpr.minc                   r  )Nr   r   r<   c                   s    j  j | S r>   )rW   count_ifisnullr   r]   rH   rI   _null_count  s   z-SparkLikeExpr.null_count.<locals>._null_countr  r   )rG   r%  rH   r]   rI   
null_count  s   
zSparkLikeExpr.null_countc                 C  r  r>   )r   rW   r   r]   rH   rH   rI   r     r  zSparkLikeExpr.sumc                 C  D   ddl m} dd l}ddlm} |||t|| j| jd}| |S )Nr   partial)_stdr   
np_versionre   r;   )		functoolsr)  numpynarwhals._spark_like.utilsr*  r   rW   rD   r   )rG   r   r)  npr*  r^   rH   rH   rI   r        
zSparkLikeExpr.stdc                 C  r'  )Nr   r(  )_varr+  )	r-  r)  r.  r/  r2  r   rW   rD   r   )rG   r   r)  r0  r2  r^   rH   rH   rI   r     r1  zSparkLikeExpr.varlower_bound.Self | NumericLiteral | TemporalLiteral | Noneupper_boundc                   sf   d fdd}d fdd	}d fd
d}|d u r  j ||dS |d u r+ j ||dS  j |||dS )Nr   r   r3  r<   c                   s   | } j ||k ||S r>   rW   r   	otherwise)r   r3  rZ   r]   rH   rI   _clip_lower     z'SparkLikeExpr.clip.<locals>._clip_lowerr5  c                   s   | } j ||k||S r>   r6  )r   r5  rZ   r]   rH   rI   _clip_upper  r9  z'SparkLikeExpr.clip.<locals>._clip_upperc                   s$    j | |k || |k|| S r>   r6  )r   r3  r5  r]   rH   rI   
_clip_both  s   z&SparkLikeExpr.clip.<locals>._clip_both)r5  )r3  )r3  r5  )r   r   r3  r   r<   r   )r   r   r5  r   r<   r   )r   r   r3  r   r5  r   r<   r   r   )rG   r3  r5  r8  r:  r;  rH   r]   rI   clip  s   	zSparkLikeExpr.clipc                   r  )Nr   r   r<   c                   sT    j |  |  j tdk@ |  j tdk@ } j  j |  |d S )Ninfz-inf)rW   isnanrX   floatr   r#  r7  )r   is_finite_conditionr]   rH   rI   
_is_finite  s   z+SparkLikeExpr.is_finite.<locals>._is_finiter  r   )rG   rA  rH   r]   rI   	is_finite  s   
zSparkLikeExpr.is_finitevaluesSequence[Any]c                   s   d fdd}  |S )Nr   r   r<   c                   s   r|  S  jdS )NF)isinrW   rX   r$  rG   rC  rH   rI   _is_in   s   z#SparkLikeExpr.is_in.<locals>._is_inr  r   )rG   rC  rG  rH   rF  rI   is_in     
zSparkLikeExpr.is_inc                   r  )Nr   r   r<   c                   s    j d j| dkS )N*rS   )rW   r   rT   rU   rV   r$  r]   rH   rI   
_is_unique&  s   z+SparkLikeExpr.is_unique.<locals>._is_uniquer  r   )rG   rK  rH   r]   rI   	is_unique%     
zSparkLikeExpr.is_uniquec                   r  )Nr   r   r<   c                   s    j dS )NrJ  )rW   r   r$  r]   rH   rI   _len-  s   zSparkLikeExpr.len.<locals>._lenr  r   )rG   rN  rH   r]   rI   r	  ,  rM  zSparkLikeExpr.lendecimalsc                   r  )Nr   r   r<   c                   s   j |  S r>   )rW   roundr$  rO  rG   rH   rI   _round4  r  z#SparkLikeExpr.round.<locals>._roundr  r   )rG   rO  rR  rH   rQ  rI   rP  3  rI  zSparkLikeExpr.roundc                 C  r  r>   )r   rW   skewnessr]   rH   rH   rI   skew9  r  zSparkLikeExpr.skewc                   r  )Nr   r   r<   c                   s,    j |  j  j |  j  S r>   )rW   count_distinctr  r#  r   ri   IntegerTyper$  r]   rH   rI   	_n_unique=  s   z)SparkLikeExpr.n_unique.<locals>._n_uniquer  r   )rG   rW  rH   r]   rI   n_unique<     
zSparkLikeExpr.n_uniquer   r  r   Sequence[str] | Nonec                   s`   j  d ur d usJ d	 fdd}nd	fdd}j|jjjjjdS )
NrK   r%   r<   r   c                   s    fdd | D S )Nc                   s   g | ]
}t | qS rH   r   rY   r   )r   r   ro   rH   rI   r\   M  r   4SparkLikeExpr.over.<locals>.func.<locals>.<listcomp>rN   r[   r   r   rG   ro   rH   rI   r^   L  s   z SparkLikeExpr.over.<locals>.funcc                   s    fdd | D S )Nc                   s   g | ]}| jj  qS rH   )rT   rU   rV   r[  r   rG   rH   rI   r\   T  s    r\  rN   r[   r^  rH   rI   r^   S  s   r_   r   )rE   rb   r@   rA   rB   rC   rD   )rG   r   r   r^   rH   r]  rI   rT   D  s   zSparkLikeExpr.overc                 C  r  r>   )r   rW   r#  r]   rH   rH   rI   is_nullb  r  zSparkLikeExpr.is_nullc                   r  )Nr   r   r<   c                   s$    j  j | d  j | S r>   )rW   r   r#  r7  r>  r$  r]   rH   rI   _is_nanf  s   
z%SparkLikeExpr.is_nan.<locals>._is_nanr  r   )rG   r`  rH   r]   rI   is_nane  rY  zSparkLikeExpr.is_nannc                   s   d fdd} |S )Nru   r   r<   r   c                   sD   fdd| j D } t| j|}j| j 	|S )Nc                   rv   rH   r}   rz   r]   rH   rI   r\   o  r|   z5SparkLikeExpr.shift.<locals>.func.<locals>.<listcomp>)
r   rU   rV   r   r   r   rW   lagr   rT   r   rb  rG   rH   rI   r^   n  s   
z!SparkLikeExpr.shift.<locals>.funcr   rp   )rG   rb  r^   rH   rd  rI   shiftm  s   
zSparkLikeExpr.shiftc                      d fdd}  |S )Nru   r   r<   r   c                   H    fdd| j D }  g | j| j|} j |dkS )Nc                   rv   rH   r}   rz   r]   rH   rI   r\   }  r|   zASparkLikeExpr.is_first_distinct.<locals>.func.<locals>.<listcomp>rS   	r   rU   rV   r   r   r   rW   
row_numberrT   r   r]   rH   rI   r^   |     
z-SparkLikeExpr.is_first_distinct.<locals>.funcr   re  r   rH   r]   rI   is_first_distinct{  r   zSparkLikeExpr.is_first_distinctc                   rg  )Nru   r   r<   r   c                   rh  )Nc                   rv   rH   rw   rz   r]   rH   rI   r\     r|   z@SparkLikeExpr.is_last_distinct.<locals>.func.<locals>.<listcomp>rS   ri  r   r]   rH   rI   r^     rk  z,SparkLikeExpr.is_last_distinct.<locals>.funcr   re  r   rH   r]   rI   is_last_distinct  r   zSparkLikeExpr.is_last_distinctc                   rg  )Nru   r   r<   r   c                   sH    fdd| j D }  t| j|}| j j| j	| S )Nc                   rv   rH   r}   rz   r]   rH   rI   r\     r|   z4SparkLikeExpr.diff.<locals>.func.<locals>.<listcomp>)
r   rU   rV   r   r   r   r   rW   rc  rT   r   r]   rH   rI   r^     s   
z SparkLikeExpr.diff.<locals>.funcr   re  r   rH   r]   rI   diff  r   zSparkLikeExpr.diffc                C     |  | j|ddS )Nr   rq   rs   rp   r   rG   rq   rH   rH   rI   cum_sum     zSparkLikeExpr.cum_sumc                C  ro  )Nr  rp  rq  rr  rH   rH   rI   cum_max  rt  zSparkLikeExpr.cum_maxc                C  ro  )Nr!  rp  rq  rr  rH   rH   rI   cum_min  rt  zSparkLikeExpr.cum_minc                C  ro  )Nr   rp  rq  rr  rH   rH   rI   	cum_count  rt  zSparkLikeExpr.cum_countc                C  ro  )Nproductrp  rq  rr  rH   rH   rI   cum_prod  rt  zSparkLikeExpr.cum_prodr   Self | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc                   s0   |d ur
d}t |d	 fdd} j||dS )
Nz.Support for strategies is not yet implemented.r   r   r   r<   c                   s    j | |S r>   )rW   ifnull)r   r   r]   rH   rI   
_fill_null  r  z+SparkLikeExpr.fill_null.<locals>._fill_null)r   )r   r   r   r   r<   r   )NotImplementedErrorr   )rG   r   r{  r}  r   r  rH   r]   rI   	fill_null  s
   zSparkLikeExpr.fill_nullc                C     |  | jd|||dS )Nr   rs   r   r   r   rp   r   rG   r   r   r   rH   rH   rI   rolling_sum     zSparkLikeExpr.rolling_sumc                C  r  )Nr   r  r  r  rH   rH   rI   rolling_mean  r  zSparkLikeExpr.rolling_meanc             	   C     |  | jd||||dS )Nr   rs   r   r   r   r   r  rG   r   r   r   r   rH   rH   rI   rolling_var     zSparkLikeExpr.rolling_varc             	   C  r  )Nr   r  r  r  rH   rH   rI   rolling_std  r  zSparkLikeExpr.rolling_stdmethodr-   
descendingc                  s>   dv rdn	dkrdndd fd	d
} |S )N>   r  r!  averagerankdense
dense_rankrj  r   r   r<   c                   s    r
j | g}nj | g} |} | }dkr=tj  |j | | j 	d }n.dkratj  |j | |j 	d j 	d  }n
tj  |}j 
|  |S )Nr  rS   r  r   )rW   ry   asc_nulls_lastrU   r   rV   r   rT   r   rX   r   	isNotNull)r   r   r   count_windowr   r  rs   r  rG   rH   rI   _rank  s&   

z!SparkLikeExpr.rank.<locals>._rankr  r   )rG   r  r  r  rH   r  rI   r    s   
zSparkLikeExpr.rankr   c                 C     t | S r>   r   r]   rH   rH   rI   r       zSparkLikeExpr.strr   c                 C  r  r>   r   r]   rH   rH   rI   dt#  r  zSparkLikeExpr.dtr   c                 C  r  r>   r   r]   rH   rH   rI   r   '  r  zSparkLikeExpr.listr   c                 C  r  r>   r   r]   rH   rH   rI   struct+  r  zSparkLikeExpr.struct)r2   r3   r4   r5   r6   r7   r8   r9   r:   r/   r;   r   r<   r=   r`   )rP   rQ   r<   r    )r<   rj   )r<   r=   )r<   r'   )ro   r(   r<   r    )rq   rr   rs   rt   r<   r(   )rs   r   r   rr   r   r   r   r   r   r   r<   r(   )r   r   r   r5   r   r0   r<   r    )r   r   r   r   r   r0   r<   r    )r2   r   r   r   r<   r    )r^   r7   r<   r    )r   r1   r<   r    )r<   r    )r  r  r<   r    )r  r  r<   r    )r   r   r<   r    )NN)r3  r4  r5  r4  r<   r    )rC  rD  r<   r    )rO  r   r<   r    )r   r  r   rZ  r<   r    )rb  r   r<   r    )rq   rr   r<   r    )r   rz  r{  r|  r}  r   r<   r    )r   r   r   r   r   rr   r<   r    )
r   r   r   r   r   rr   r   r   r<   r    )r  r-   r  rr   r<   r    )r<   r   )r<   r   )r<   r   )r<   r   )Y__name__
__module____qualname__rJ   rO   rc   propertyrW   ri   rU   rl   rn   rp   r   r   classmethodr   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<  rB  rH  rL  r	  rP  rT  rX  rT   r_  ra  rf  rl  rm  rn  rs  ru  rv  rw  ry  r  r  r  r  r  r  r  r  r   r  r   
drop_nullsuniquequantilerH   rH   rH   rI   r1   1   s    









 3





























	



















$
r1   )r%   r   )>
__future__r   r   typingr   r   r   r   r   r   narwhals._compliantr	   narwhals._expression_parsingr
   narwhals._spark_like.expr_dtr   narwhals._spark_like.expr_listr   narwhals._spark_like.expr_strr    narwhals._spark_like.expr_structr   r/  r   r   r   r   r   narwhals.dependenciesr   narwhals.utilsr   r   r   sqlframe.base.columnr   rk   r   typing_extensionsr    narwhals._compliant.typingr!   r"   r#   r$   narwhals._spark_like.dataframer%   rm   r'   narwhals._spark_like.typingr(   narwhals.dtypesr)   narwhals.typingr*   r+   r,   r-   r.   r/   r0   r1   rH   rH   rH   rI   <module>   sV    