
    }i;                       U d dl mZ d dlZd dlmZmZmZmZmZ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mZmZmZmZ d d	lmZ d d
lmZmZmZmZmZm Z  ersd dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dlm:Z: d dl;m<Z<m=Z=m>Z> ed         Z?de@d<   e3e5e&f         ZAe.e&         ZB G d ded                   ZCdS )    )annotationsN)TYPE_CHECKINGAnyCallableClassVarLiteralcastSparkLikeExprDateTimeNamespaceSparkLikeExprListNamespaceSparkLikeExprStringNamespaceSparkLikeExprStructNamespace)import_functionsimport_native_dtypesimport_windownarwhals_to_native_dtypetrue_divide)SQLExpr)ImplementationVersionextend_bool
no_defaultnot_implemented
zip_strict)IteratorMappingSequence)Column)Window
WindowSpec)Self	TypeAlias)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)SparkLikeLazyFrameSparkLikeNamespace)	NoDefault)_LimitedContext)FillNullStrategy	IntoDType
RankMethod)rank
dense_rank
row_numberr%   NativeRankMethodc                     e Zd ZU 	 dldmdZddddddZded<   dndZ	 	 	 	 doddddpd%Zdqd'Zdqd(Z	drd+Z
dsd-Zed.             Zed/             Zedtd1            Zddddud5Zdvd7Zdwd9Zedxd;            ZedydA            ZedzdD            Zd{dFZd{dGZd{dHZd{dIZdsdJZd|dMZdsdNZdsdOZdsdPZd}dRZ dsdSZ!dsdTZ"dsdUZ#dsdVZ$d~d\Z%ddcZ&edde            Z'eddg            Z(eddi            Z)eddk            Z* e+            Z,dS )SparkLikeExprNcall&EvalSeries[SparkLikeLazyFrame, Column]window_functionSparkWindowFunction | Noneevaluate_output_namesEvalNames[SparkLikeLazyFrame]alias_output_namesAliasNames | Noneversionr   implementationr   returnNonec               Z    || _         || _        || _        || _        || _        || _        d S N)_call_evaluate_output_names_alias_output_names_version_implementation_window_function)selfr9   r;   r=   r?   rA   rB   s          M/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_spark_like/expr.py__init__zSparkLikeExpr.__init__5   s8     
&;##5 -<K    r3   r4   r5   )minmaxaveragedenseordinalz/ClassVar[Mapping[RankMethod, NativeRankMethod]]_REMAP_RANK_METHODr!   c                6    | j                             d          S N*_FcountrM   s    rN   _count_starzSparkLikeExpr._count_starN   s    w}}S!!!rP    
descending
nulls_lastexprpartition_bySequence[str | Column]order_by
rows_start
int | Nonerows_endra   Sequence[bool] | Nonerb   c               0    | j         | }|r |j         | j        |||d }|||                    ||          }nE|!|                    | j        j        |          }n"| |                    || j        j                  }|                    |          S )Nr`   )rd   orderBy_sortrowsBetween_WindowunboundedPrecedingunboundedFollowingover)	rM   rc   rd   rf   rg   ri   ra   rb   windows	            rN   _window_expressionz SparkLikeExpr._window_expressionQ   s     #"L1 	#V^X*TTTF !h&:''
H==FF!''(GRRFF#''
DL4STTFyy   rP   strc                $    d}t          |          )Nz%`first` is not supported for PySpark.NotImplementedErrorrM   rc   rf   msgs       rN   _firstzSparkLikeExpr._firsti   s    5!#&&&rP   c                $    d}t          |          )Nz$`last` is not supported for PySpark.rw   ry   s       rN   _lastzSparkLikeExpr._lastn   s    4!#&&&rP   ignore_nullsboolc               :    | j                             ||          S )NignoreNulls)r[   	any_value)rM   rc   r~   s      rN   
_any_valuezSparkLikeExpr._any_values   s    w  < @@@rP   r$   c                `    |                      | j                            d          gg           S )N   )rr   r[   litr]   s    rN   	broadcastzSparkLikeExpr.broadcastv   s%    yy$'++a..)2...rP   c                H    t           rddlm} |S t          | j                  S )Nr   )	functions)r   sqlframe.baser   r   rK   )rM   r   s     rN   r[   zSparkLikeExpr._Fy   s3     	////// 4555rP   c                H    t           rddlm} |S t          | j                  S )Nr   )types)r   r   r   r   rK   )rM   r   s     rN   _native_dtypeszSparkLikeExpr._native_dtypes   s2     	++++++L#D$8999rP   type[Window]c                H    t           rddlm} |S t          | j                  S )Nr   )r"   )r   sqlframe.base.windowr"   r   rK   )rM   r"   s     rN   ro   zSparkLikeExpr._Window   s2     	333333MT1222rP   colsColumn | strIterator[Column]c             '     K   | j         }t          |          }t          |pd|          }t          |pd|          }|j        |j        |j        |j        dfdt          |||          D             E d {V  d S )NF))FF)FT)TF)TTc              3  F   K   | ]\  }}} ||f         |          V  d S rF   r_   ).0col_desc_nulls_lastmappings       rN   	<genexpr>z&SparkLikeExpr._sort.<locals>.<genexpr>   sQ       
 
'UK *GUK()#..
 
 
 
 
 
rP   )r[   lenr   asc_nulls_firstasc_nulls_lastdesc_nulls_firstdesc_nulls_lastr   )rM   ra   rb   r   Fnr   s         @rN   rm   zSparkLikeExpr._sort   s       GII !4ua88
 !4ua88
-+-+	
 

 
 
 
+5dJ
+S+S
 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
rP   r#   c                V     | j         j        |p| j                            d          g S )zGWraps `Window().partitionBy`, with default and `WindowInputs` handling.r   )ro   partitionByr[   r   )rM   r   s     rN   rd   zSparkLikeExpr.partition_by   s(    't|')A$'++a..1ABBrP   r-   c                <    ddl m}  || j        | j                  S )Nr   r,   )rA   rB   )narwhals._spark_like.namespacer-   rJ   rK   )rM   r-   s     rN   __narwhals_namespace__z$SparkLikeExpr.__narwhals_namespace__   s8    EEEEEE!!M$2F
 
 
 	
rP   namec                ,    |                     |          S rF   )alias)clsrc   r   s      rN   _alias_nativezSparkLikeExpr._alias_native   s    zz$rP   r   
type[Self]evaluate_column_namescontextr/   c              D    dfd} | |d |j         |j                  S )Ndfr+   rC   list[Column]c                4      fd            D             S )Nc                D    g | ]}j                             |          S r_   r[   r   )r   col_namer   s     rN   
<listcomp>zASparkLikeExpr.from_column_names.<locals>.func.<locals>.<listcomp>   s'    RRRHBEIIh''RRRrP   r_   )r   r   s   `rN   funcz-SparkLikeExpr.from_column_names.<locals>.func   s*    RRRR8M8Mb8Q8QRRRRrP   r=   r?   rA   rB   r   r+   rC   r   )rJ   rK   )r   r   r   r   s    `  rN   from_column_nameszSparkLikeExpr.from_column_names   sW    	S 	S 	S 	S 	S 	S s"7#$"2
 
 
 	
rP   column_indicesintc               j    dfd} | ||                                d |j        |j                  S )Nr   r+   rC   r   c                4      j          fdD             S )Nc                P    g | ]"}j                             |                   #S r_   r   )r   icolumnsr   s     rN   r   zCSparkLikeExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   s+    BBBaBEIIgaj))BBBrP   )r   )r   r   r   s   `@rN   r   z/SparkLikeExpr.from_column_indices.<locals>.func   s)    jGBBBBB>BBBBrP   r   r   )_eval_names_indicesrJ   rK   )r   r   r   r   s     ` rN   from_column_indicesz!SparkLikeExpr.from_column_indices   se    	C 	C 	C 	C 	C 	C s"%"9"9."I"I#$"2
 
 
 	
rP   otherc                <     d fd}                      ||          S )Nrc   r!   r   rC   c                0    t          j        | |          S rF   r   r[   rc   r   rM   s     rN   _truedivz+SparkLikeExpr.__truediv__.<locals>._truediv   s    twe444rP   rc   r!   r   r!   rC   r!   _with_binary)rM   r   r   s   `  rN   __truediv__zSparkLikeExpr.__truediv__   s9    	5 	5 	5 	5 	5 	5   5111rP   c                b     d fd}                      ||                              d          S )Nrc   r!   r   rC   c                0    t          j        ||           S rF   r   r   s     rN   	_rtruedivz-SparkLikeExpr.__rtruediv__.<locals>._rtruediv   s    twt444rP   literalr   r   r   )rM   r   r   s   `  rN   __rtruediv__zSparkLikeExpr.__rtruediv__   sG    	5 	5 	5 	5 	5 	5   E2288CCCrP   c                <     d fd}                      ||          S )Nrc   r!   r   rC   c           
         j         }|                    ||                    d          k    |                    t	          || |                                                  |                    d                     S Nr   r[   whenr   floorr   	otherwiserc   r   r   rM   s      rN   	_floordivz-SparkLikeExpr.__floordiv__.<locals>._floordiv   sc    A66q!177;q$+F+F#G#G id$$%rP   r   r   )rM   r   r   s   `  rN   __floordiv__zSparkLikeExpr.__floordiv__   s9    	% 	% 	% 	% 	% 	%   E222rP   c                b     d fd}                      ||                              d          S )Nrc   r!   r   rC   c           
         j         }|                    | |                    d          k    |                    t	          |||                                                   |                    d                     S r   r   r   s      rN   
_rfloordivz/SparkLikeExpr.__rfloordiv__.<locals>._rfloordiv   sc    A66a !''+a*E*E"F"F id$$%rP   r   r   r   )rM   r   r   s   `  rN   __rfloordiv__zSparkLikeExpr.__rfloordiv__   sG    	% 	% 	% 	% 	% 	%   U3399)DDDrP   c                `    t          dt          j                  }|                     |          S )NzCallable[..., Column])r	   operatorinvert_with_elementwise)rM   r   s     rN   
__invert__zSparkLikeExpr.__invert__   s(    -x??%%f---rP   dtyper1   c                     d
 fd}d fd}                      || j         j         j         j        	          S )Nr   r+   rC   Sequence[Column]c                    t          j        j        | j        j                  fd |           D             S )Nc                :    g | ]}|                               S r_   r	   r   rc   spark_dtypes     rN   r   z4SparkLikeExpr.cast.<locals>.func.<locals>.<listcomp>   s%    @@@tDIIk**@@@rP   )r   rJ   r   nativesparkSession)r   r   r   rM   s    @rN   r   z SparkLikeExpr.cast.<locals>.func   sK    2t}d&929;Q K A@@@ttBxx@@@@rP   inputsSparkWindowInputsc                    t          j        j        | j        j                  fd                    | |          D             S )Nc                :    g | ]}|                               S r_   r   r   s     rN   r   z8SparkLikeExpr.cast.<locals>.window_f.<locals>.<listcomp>  s%    XXXtDIIk**XXXrP   )r   rJ   r   r   r   r;   )r   r   r   r   rM   s     @rN   window_fz$SparkLikeExpr.cast.<locals>.window_f   sV     3t}d&929;Q K YXXXt7K7KBPV7W7WXXXXrP   r   )r   r+   rC   r   r   r+   r   r   rC   r   )	__class__rH   rI   rJ   rK   )rM   r   r   r   s   ``  rN   r	   zSparkLikeExpr.cast   s    	A 	A 	A 	A 	A 	A 	A	Y 	Y 	Y 	Y 	Y 	Y 	Y ~~"&"=#7M/  
 
 	
rP   c                :     d fd}                      |          S )Nrc   r!   rC   c                   j         t          j        t          j        hv rPt          j                                        dk     r.j                            |                     d          d          S j                            |           S )N)      doubleg      ?)	rK   r   PYSPARKPYSPARK_CONNECT_backend_versionr[   percentile_approxr	   medianrc   rM   s    rN   _medianz%SparkLikeExpr.median.<locals>._median  sx    #&.(   !(99;;fDDw0081D1DcJJJ7>>$'''rP   rc   r!   rC   r!   _with_callable)rM   r  s   ` rN   r  zSparkLikeExpr.median  s7    	( 	( 	( 	( 	( 	( ""7+++rP   c                :     d fd}                      |          S )Nrc   r!   rC   c                h    j                             j                             |                     S rF   )r[   count_ifisnullr  s    rN   _null_countz-SparkLikeExpr.null_count.<locals>._null_count  s'    7##DGNN4$8$8999rP   r  r  )rM   r  s   ` rN   
null_countzSparkLikeExpr.null_count  s7    	: 	: 	: 	: 	: 	: "";///rP   c                :     d fd}                      |          S )Nrc   r!   rC   c                x   j                             |            | j                             t          d                    k    z  | j                             t          d                    k    z  }j                             j                             |            |                              d           S )Ninfz-inf)r[   isnanr   floatr   r  r   )rc   is_finite_conditionrM   s     rN   
_is_finitez+SparkLikeExpr.is_finite.<locals>._is_finite$  s     t$$$47;;uU||444647;;uV}}5557  
 7<<!5!5 57JKKUU  rP   r  r   )rM   r  s   ` rN   	is_finitezSparkLikeExpr.is_finite#  s7    
	 
	 
	 
	 
	 
	 %%j111rP   Sequence[Any]c                >     d fd}                      |          S )Nrc   r!   rC   c                f    r|                                nj                            d          S )NF)isinr[   r   r   s    rN   _is_inz#SparkLikeExpr.is_in.<locals>._is_in3  s-    ',D499U###$'++e2D2DDrP   r  r  )rM   r   r  s   `` rN   is_inzSparkLikeExpr.is_in2  sD    	E 	E 	E 	E 	E 	E 	E %%f---rP   c                :     d fd}                      |          S )N_exprr!   rC   c                8    j                             d          S rX   rZ   )r  rM   s    rN   _lenzSparkLikeExpr.len.<locals>._len9  s    7==%%%rP   )r  r!   rC   r!   r  )rM   r!  s   ` rN   r   zSparkLikeExpr.len8  s7    	& 	& 	& 	& 	& 	& ""4(((rP   c                @    |                      | j        j                  S rF   )r  r[   skewnessr]   s    rN   skewzSparkLikeExpr.skew?      ""47#3444rP   c                @    |                      | j        j                  S rF   )r  r[   kurtosisr]   s    rN   r'  zSparkLikeExpr.kurtosisB  r%  rP   c                :     d fd}                      |          S )Nrc   r!   rC   c                    j                             j                             |           d                               j                             |                     S rF   )r[   r   r  r   r  r  s    rN   _is_nanz%SparkLikeExpr.is_nan.<locals>._is_nanF  sD    7<<t 4 4d;;EEdgmmTXFYFYZZZrP   r  r  )rM   r*  s   ` rN   is_nanzSparkLikeExpr.is_nanE  s=    	[ 	[ 	[ 	[ 	[ 	[ %%g...rP   valueSelf | NonestrategyFillNullStrategy | Nonelimitc                     d fd}                      |          S d fd}|J                      ||          S )Nr   r+   r   r   rC   r   c                    dk    rj         j        nj         j        dk    rj        j        n j        j        nj        j        j        j        nfd |           D             S )Nforwardc           	         g | ]X} |d                                  j        j         j         j        j                                                  YS )Tr   )rr   rd   rl   rm   rf   rn   )r   rc   endfnr   rM   starts     rN   r   zHSparkLikeExpr.fill_null.<locals>._fill_with_strategy.<locals>.<listcomp>Z  s         Bt...33!))6+>? *$*fo">@$UC00   rP   )r[   
last_valuefirst_valuero   rp   
currentRowrq   )r   r   r5  r6  r7  r0  rM   r.  s    `@@@rN   _fill_with_strategyz4SparkLikeExpr.fill_null.<locals>._fill_with_strategyP  s     ,4y+@+@TW''dgFYy((?D}DL;;SXRXE,1CC L3E=B]$,99PUC        !%R   rP   rc   r!   r,  c                :    j                             | |          S rF   )r[   ifnull)rc   r,  rM   s     rN   _fill_constantz/SparkLikeExpr.fill_null.<locals>._fill_constante  s    7>>$...rP   )r,  r   )rc   r!   r,  r!   rC   r!   )_with_window_functionr   )rM   r,  r.  r0  r;  r>  s   ` ``  rN   	fill_nullzSparkLikeExpr.fill_nullK  s            & --.ABBB	/ 	/ 	/ 	/ 	/ 	/    %%nE%BBBrP   defaultSparkLikeExpr | NoDefaultoldnewreturn_dtypeIntoDType | Nonec                  	
 t           u rd}t          |           j        t          j        u rd j         d}t          |          ddlm}  j        	t          t          ||                    }	                    	fd ||                                 D                       
d	
 fd}                     |d  j         j         j         j                  S )NzU`replace_strict` requires an explicit value for `default` for any spark-like backend.z.`replace_strict` is not (yet) implemented for .r   )chainc                :    g | ]}                     |          S r_   )r   )r   xr   s     rN   r   z0SparkLikeExpr.replace_strict.<locals>.<listcomp>  s#    $O$O$O!QUU1XX$O$O$OrP   r   r+   rC   r   c                    |                                fd 	|           D             }r6| j        j        }t          	j        	j        |          fd|D             S |S )Nc           	         g | ]X}                                                                       |          |                                                 YS r_   )r   array_containsmap_keysr   )r   rc   r   default_colmapping_exprs     rN   r   z>SparkLikeExpr.replace_strict.<locals>.func.<locals>.<listcomp>  sm         $$QZZ%=%=tDDlSWFX )K((  rP   c                :    g | ]}|                               S r_   r   )r   resultr   s     rN   r   z>SparkLikeExpr.replace_strict.<locals>.func.<locals>.<listcomp>  s%    GGGVK00GGGrP   )_evaluate_single_output_exprr   r   r   rJ   r   )
r   resultssessionrP  r   r   rA  rQ  rE  rM   s
      @@rN   r   z*SparkLikeExpr.replace_strict.<locals>.func  s    99'BBK      !DHH	  G  H)06 $-1Dg  HGGGwGGGGNrP   r   r   )r   
ValueErrorrK   r   r   rx   	itertoolsrI  r[   dictzip
create_mapitemsr   rH   rI   rJ   )rM   rA  rC  rD  rE  rz   rI  r   r   r   rQ  s   ``  `    @@rN   replace_strictzSparkLikeExpr.replace_strictk  s&    j  iCS//!>#AAAZ4CWZZZC%c***######Gs3}}%%||$O$O$O$Ouugmmoo7N$O$O$OPP	 	 	 	 	 	 	 	 	 	" ~~"&"=#7M/  
 
 	
rP   r   c                     t          |           S rF   r   r]   s    rN   ru   zSparkLikeExpr.str      +D111rP   r   c                     t          |           S rF   r
   r]   s    rN   dtzSparkLikeExpr.dt  s    -d333rP   r   c                     t          |           S rF   r   r]   s    rN   listzSparkLikeExpr.list  s    )$///rP   r   c                     t          |           S rF   r   r]   s    rN   structzSparkLikeExpr.struct  r_  rP   rF   )r9   r:   r;   r<   r=   r>   r?   r@   rA   r   rB   r   rC   rD   )rC   r!   )r_   r_   NN)rc   r!   rd   re   rf   re   rg   rh   ri   rh   ra   rj   rb   rj   rC   r!   )rc   r!   rf   ru   rC   r!   )rc   r!   r~   r   rC   r!   )rC   r$   )rC   r   )r   r   ra   rj   rb   rj   rC   r   )r   r   rC   r#   )rC   r-   )rc   r!   r   ru   rC   r!   )r   r   r   r>   r   r/   rC   r$   )r   r   r   r/   rC   r$   )r   r$   rC   r$   )r   r1   rC   r$   )r   r  rC   r$   )r,  r-  r.  r/  r0  rh   rC   r$   )
rA  rB  rC  r  rD  r  rE  rF  rC   r$   )rC   r   )rC   r   )rC   r   )rC   r   )-__name__
__module____qualname__rO   rV   __annotations__r^   rt   r{   r}   r   r   propertyr[   r   ro   rm   rd   r   classmethodr   r   r   r   r   r   r   r   r	   r  r  r  r  r   r$  r'  r+  r@  r]  ru   ra  rc  re  r   quantiler_   rP   rN   r8   r8   4   s         7;L L L L L$ K K    " " " " 02+-!%#! -1,0! ! ! ! ! !0' ' ' '
' ' ' '
A A A A/ / / / 6 6 X6 : : X: 3 3 3 X3 -1,0	
 
 
 
 
 
*C C C C
 
 
 
       [  
 
 
 [
$ 
 
 
 [
2 2 2 2D D D D3 3 3 3E E E E. . . .
 
 
 
0, , , ,0 0 0 02 2 2 2. . . .) ) ) )5 5 5 55 5 5 5/ / / /C C C C@/
 /
 /
 /
b 2 2 2 X2 4 4 4 X4 0 0 0 X0 2 2 2 X2   HHHrP   r8   )r+   r!   )D
__future__r   r   typingr   r   r   r   r   r	   narwhals._spark_like.expr_dtr   narwhals._spark_like.expr_listr   narwhals._spark_like.expr_strr    narwhals._spark_like.expr_structr   narwhals._spark_like.utilsr   r   r   r   r   narwhals._sql.exprr   narwhals._utilsr   r   r   r   r   r   collections.abcr   r   r    sqlframe.base.columnr!   r   r"   r#   typing_extensionsr$   r%   narwhals._compliantr&   narwhals._compliant.typingr'   r(   r)   r*   narwhals._spark_like.dataframer+   r   r-   narwhals._typingr.   r/   narwhals.typingr0   r1   r2   r6   ri  SparkWindowFunctionr   r8   r_   rP   rN   <module>r     s   " " " " " " "  H H H H H H H H H H H H H H H H G G G G G G E E E E E E F F F F F F I I I I I I              ' & & & & &                 -;;;;;;;;;;++++++7777777711111111000000            BAAAAAAAAAAA******//////GGGGGGGGGG")*L"MMMMM();V)CD$V,x! x! x! x! x!G:; x! x! x! x! x!rP   