
    O3j1>                       U 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	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 errd dlmZm Z m!Z!m"Z" d dlm#Z# d dl$m%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/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dlm8Z8 d dl9m:Z:m;Z;m<Z<m=Z= ed   Z>de?d<   e1e3e%f   Z@e,e%   ZA G d ded         ZBy)    )annotationsN)TYPE_CHECKINGAnyClassVarLiteralcastSparkLikeExprDateTimeNamespaceSparkLikeExprListNamespaceSparkLikeExprStringNamespaceSparkLikeExprStructNamespace)import_functionsimport_native_dtypesimport_windownarwhals_to_native_dtypetrue_divide)SQLExpr)
NO_DEFAULTImplementationVersionextend_bool)CallableIteratorMappingSequence)	TypeAlias)Column)Window
WindowSpec)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)SparkLikeLazyFrameSparkLikeNamespace)	NoDefault)_LimitedContext)FillNullStrategy	IntoDType
RankMethodRollingInterpolationMethod)rank
dense_rank
row_numberr   NativeRankMethodc                  \   e Zd ZU 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 d0dZddddddZded<   d1d	Z	 	 	 	 d2ddd
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3dZd4dZd4dZ	d5dZ
d6dZed        Zed        Zed7d       Zddd
	 	 	 	 	 	 	 d8dZd9dZd:dZed;d       Ze	 	 	 	 	 	 	 	 d<d       Zed=d       Zd>dZd>dZd>dZd>dZd6dZd6dZd?dZd6d Zd6d!Zd6d"Z d@d#Z!d6d$Z"d6d%Z#d6d&Z$d6d'Z%	 	 	 	 	 	 	 	 dAd(Z&	 	 	 	 	 	 	 	 	 	 dBd)Z'edCd*       Z(edDd+       Z)edEd,       Z*edFd-       Z+	 	 	 	 	 	 dGd.Z,y)HSparkLikeExprNc               X    || _         || _        || _        || _        || _        || _        y N)_call_evaluate_output_names_alias_output_names_version_implementation_window_function)selfcallwindow_functionevaluate_output_namesalias_output_namesversionimplementations          F/DATA/.local/lib/python3.12/site-packages/narwhals/_spark_like/expr.py__init__zSparkLikeExpr.__init__4   s2     
&;##5 -<K    r2   r3   r4   )minmaxaveragedenseordinalz/ClassVar[Mapping[RankMethod, NativeRankMethod]]_REMAP_RANK_METHODc                8    | j                   j                  d      S N*_Fcountr@   s    rG   _count_starzSparkLikeExpr._count_starM   s    ww}}S!!rI   
descending
nulls_lastc               V    | j                   | }|r  |j                   | j                  |||d }|||j                  ||      }nQ|'|j                  | j                  j
                  |      }n(|&|j                  || j                  j                        }|j                  |      S )NrX   )partition_byorderBy_sortrowsBetween_WindowunboundedPrecedingunboundedFollowingover)	r@   exprr\   order_by
rows_startrows_endrY   rZ   windows	            rG   _window_expressionz SparkLikeExpr._window_expressionP   s     #""L1#V^^X*TF !h&:''
H=F!''(G(GRF#''
DLL4S4STFyy  rI   c                    d}t        |      )Nz%`first` is not supported for PySpark.NotImplementedErrorr@   rd   re   msgs       rG   _firstzSparkLikeExpr._firsth   s    5!#&&rI   c                    d}t        |      )Nz$`last` is not supported for PySpark.rk   rm   s       rG   _lastzSparkLikeExpr._lastm   s    4!#&&rI   c               <    | j                   j                  ||      S )NignoreNulls)rT   	any_value)r@   rd   ignore_nullss      rG   
_any_valuezSparkLikeExpr._any_valuer   s    ww  < @@rI   c                Z    | j                  | j                  j                  d      gg       S )N   )rc   rT   litrV   s    rG   	broadcastzSparkLikeExpr.broadcastu   s"    yy$''++a.)2..rI   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baser}   r   r>   )r@   r}   s     rG   rT   zSparkLikeExpr._Fx   s    / 4 455rI   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   r~   r   r   r>   )r@   r   s     rG   _native_dtypeszSparkLikeExpr._native_dtypes   s    +L#D$8$899rI   c                H    t         rddlm} |S t        | j                        S )Nr   )r!   )r   sqlframe.base.windowr!   r   r>   )r@   r!   s     rG   r`   zSparkLikeExpr._Window   s    3MT1122rI   c             '    K   | j                   }t        |      }t        |xs d|      }t        |xs d|      }|j                  |j                  |j
                  |j                  dfdt        |||d      D        E d {    y 7 w)NF))FF)FT)TF)TTc              3  @   K   | ]  \  }}} ||f   |        y wr9    ).0col_desc_nulls_lastmappings       rG   	<genexpr>z&SparkLikeExpr._sort.<locals>.<genexpr>   s1      
+Y'UK *GUK()#.+Ys   Tstrict)rT   lenr   asc_nulls_firstasc_nulls_lastdesc_nulls_firstdesc_nulls_lastzip)r@   rY   rZ   colsFnr   s         @rG   r^   zSparkLikeExpr._sort   s      GGI !4ua8
 !4ua8
--++--++	

+.tZTX+Y
 	
 	
s   BBBBc                p     | j                   j                  |xs | j                  j                  d      g S )zGWraps `Window().partitionBy`, with default and `WindowInputs` handling.ry   )r`   partitionByrT   rz   )r@   r   s     rG   r\   zSparkLikeExpr.partition_by   s-    't||'')A$''++a.1ABBrI   c                J    ddl m}  || j                  | j                        S )Nr   r*   )rE   rF   )narwhals._spark_like.namespacer+   r=   r>   )r@   r+   s     rG   __narwhals_namespace__z$SparkLikeExpr.__narwhals_namespace__   s!    E!MM$2F2F
 	
rI   c                $    |j                  |      S r9   )alias)clsrd   names      rG   _alias_nativezSparkLikeExpr._alias_native   s    zz$rI   c              R    dfd} | |d |j                   |j                        S )Nc                l     |       D cg c]  }| j                   j                  |       c}S c c}w r9   )rT   r   )dfcol_nameevaluate_column_namess     rG   funcz-SparkLikeExpr.from_column_names.<locals>.func   s/    8Mb8QR8QHBEEIIh'8QRRRs   "1rC   rD   rE   rF   r   r)   returnzlist[Column])r=   r>   )r   r   contextr   s    `  rG   from_column_nameszSparkLikeExpr.from_column_names   s3    	S "7#$$"22
 	
rI   c               p    dfd} | || j                        d |j                  |j                        S )Nc                ~    | j                   }D cg c]   }| j                  j                  ||         " c}S c c}w r9   )columnsrT   r   )r   r   icolumn_indicess      rG   r   z/SparkLikeExpr.from_column_indices.<locals>.func   s5    jjG3AB>aBEEIIgaj)>BBBs   %:r   r   )_eval_names_indicesr=   r>   )r   r   r   r   s     ` rG   from_column_indicesz!SparkLikeExpr.from_column_indices   s>    	C "%"9"9."I#$$"22
 	
rI   c                4     d fd} j                  ||      S )Nc                2    t        j                  | |      S r9   r   rT   rd   otherr@   s     rG   _truedivz+SparkLikeExpr.__truediv__.<locals>._truediv   s    twwe44rI   rd   r    r   r    r   r    _with_binary)r@   r   r   s   `  rG   __truediv__zSparkLikeExpr.__truediv__   s    	5   511rI   c                R     d fd} j                  ||      j                  d      S )Nc                2    t        j                  ||       S r9   r   r   s     rG   	_rtruedivz-SparkLikeExpr.__rtruediv__.<locals>._rtruediv   s    twwt44rI   literalr   r   r   )r@   r   r   s   `  rG   __rtruediv__zSparkLikeExpr.__rtruediv__   s(    	5   E288CCrI   c                4     d fd} j                  ||      S )Nc           
         j                   }|j                  ||j                  d      k7  |j                  t	        || |                  j                  |j                  d             S Nr   rT   whenrz   floorr   	otherwiserd   r   r   r@   s      rG   	_floordivz-SparkLikeExpr.__floordiv__.<locals>._floordiv   sS    A66q!177;q$+F#Gid$%rI   r   r   )r@   r   r   s   `  rG   __floordiv__zSparkLikeExpr.__floordiv__   s    	%   E22rI   c                R     d fd} j                  ||      j                  d      S )Nc           
         j                   }|j                  | |j                  d      k7  |j                  t	        |||                   j                  |j                  d             S r   r   r   s      rG   
_rfloordivz/SparkLikeExpr.__rfloordiv__.<locals>._rfloordiv   sS    A66a !''+a*E"Fid$%rI   r   r   r   )r@   r   r   s   `  rG   __rfloordiv__zSparkLikeExpr.__rfloordiv__   s(    	%   U399)DDrI   c                X    t        dt        j                        }| j                  |      S NzCallable[..., Column])r   operatorinvert_with_elementwise)r@   r   s     rG   
__invert__zSparkLikeExpr.__invert__   s$    -x?%%f--rI   c                X    t        dt        j                        }| j                  |      S r   )r   r   negr   )r@   r   s     rG   __neg__zSparkLikeExpr.__neg__   s$    *HLL9%%c**rI   c                     d fd}	 	 	 	 	 	 d fd} j                  || j                   j                   j                   j                        S )Nc                    t        j                  j                  | j                  j                        } |       D cg c]  }|j                  |       c}S c c}w r9   )r   r=   r   nativesparkSessionr   )r   spark_dtyperd   dtyper@   s      rG   r   z SparkLikeExpr.cast.<locals>.func   sQ    2t}}d&9&9299;Q;QK 8<Bx@xtDIIk*x@@@s   Ac                    t        j                  j                  | j                  j                        }j                  | |      D cg c]  }|j                  |       c}S c c}w r9   )r   r=   r   r   r   rB   r   )r   inputsr   rd   r   r@   s       rG   window_fz$SparkLikeExpr.cast.<locals>.window_f  s_     3t}}d&9&9299;Q;QK 8<7K7KBPV7WX7WtDIIk*7WXXXs   A'r   )r   r)   r   Sequence[Column]r   r)   r   SparkWindowInputsr   r   )	__class__r;   r<   r=   r>   )r@   r   r   r   s   ``  rG   r   zSparkLikeExpr.cast   sj    	A	Y"	Y,=	Y	Y ~~"&"="=#77MM//  
 	
rI   c                2     d fd} j                  |      S )Nc                *   j                   t        j                  t        j                  hv rLt        j                  j	                         dk  r+j
                  j                  | j                  d      d      S j
                  j                  |       S )N)      doubleg      ?)	r>   r   PYSPARKPYSPARK_CONNECT_backend_versionrT   percentile_approxr   medianrd   r@   s    rG   _medianz%SparkLikeExpr.median.<locals>._median  st    ##&&..(  !((99;fDww0081DcJJ77>>$''rI   rd   r    r   r    _with_callable)r@   r   s   ` rG   r   zSparkLikeExpr.median  s    	( ""7++rI   c                2     d fd} j                  |      S )Nc                l    j                   j                  j                   j                  |             S r9   )rT   count_ifisnullr   s    rG   _null_countz-SparkLikeExpr.null_count.<locals>._null_count!  s%    77##DGGNN4$899rI   r   r   )r@   r   s   ` rG   
null_countzSparkLikeExpr.null_count   s    	: "";//rI   c                2     d fd} j                  |      S )Nc                f   j                   j                  |        | j                   j                  t        d            k7  z  | j                   j                  t        d            k7  z  }j                   j	                  j                   j                  |        |      j                  d       S )Ninfz-inf)rT   isnanrz   floatr   r   r   )rd   is_finite_conditionr@   s     rG   
_is_finitez+SparkLikeExpr.is_finite.<locals>._is_finite'  s     t$$477;;uU|446477;;uV}557  
 77<<!5 57JKUU rI   r   r   )r@   r  s   ` rG   	is_finitezSparkLikeExpr.is_finite&  s    
	 %%j11rI   c                6     d fd} j                  |      S )Nc                `    r| j                        S j                  j                  d      S )NF)isinrT   rz   r   s    rG   _is_inz#SparkLikeExpr.is_in.<locals>._is_in6  s&    ',499U#D$''++e2DDrI   r   r  )r@   r   r	  s   `` rG   is_inzSparkLikeExpr.is_in5  s    	E %%f--rI   c                2     d fd} j                  |      S )Nc                :    j                   j                  d      S rQ   rS   )_exprr@   s    rG   _lenzSparkLikeExpr.len.<locals>._len<  s    77==%%rI   )r  r    r   r    r   )r@   r  s   ` rG   r   zSparkLikeExpr.len;  s    	& ""4((rI   c                L    | j                  | j                  j                        S r9   )r   rT   skewnessrV   s    rG   skewzSparkLikeExpr.skewB      ""477#3#344rI   c                L    | j                  | j                  j                        S r9   )r   rT   kurtosisrV   s    rG   r  zSparkLikeExpr.kurtosisE  r  rI   c                2     d fd} j                  |      S )Nc                    j                   j                  j                   j                  |       d       j                  j                   j	                  |             S r9   )rT   r   r   r   r   r   s    rG   _is_nanz%SparkLikeExpr.is_nan.<locals>._is_nanI  s>    77<<t 4d;EEdggmmTXFYZZrI   r   r  )r@   r  s   ` rG   is_nanzSparkLikeExpr.is_nanH  s    	[ %%g..rI   c                     	 	 	 	 	 	 d fd} j                  |      S d fd}|J  j                  ||      S )Nc           
     .   dk(  rj                   j                  nj                   j                  }dk(  r2j                  j                  n }j                  j
                  }n0j                  j
                  }j                  j                  n} |       D cg c]f  } ||d      j                    j                  |j                   j                   j                  |j                    j                  ||            h c}S c c}w )NforwardTrs   )rT   
last_valuefirst_valuer`   ra   
currentRowrb   rc   r\   r]   r^   re   r_   )	r   r   fnstartendrd   limitr@   strategys	         rG   _fill_with_strategyz4SparkLikeExpr.fill_null.<locals>._fill_with_strategyS  s     ,4y+@TWW''dggFYFYy(?D}DLL;;SXRXE,,11C LL33E=B]$,,99PUC !%R !) t.33!)))6+>+>? *$**foo">@$UC0
 !)  s   $A+Dc                <    j                   j                  | |      S r9   )rT   ifnull)rd   valuer@   s     rG   _fill_constantz/SparkLikeExpr.fill_null.<locals>._fill_constanth  s    77>>$..rI   )r'  r   )rd   r    r'  r    r   r    )_with_window_functionr   )r@   r'  r#  r"  r$  r(  s   ` ``  rG   	fill_nullzSparkLikeExpr.fill_nullN  se     &0A!& --.ABB	/    %%nE%BBrI   c                  
 t         u rd}t        |       j                  t        j                  u rd j                   d}t        |      ddlm}  j                  
t        t        ||d            }
j                   ||j                          D cg c]  }
j                  |       c}      d

 fd}	 j                  |	d  j                   j                    j"                   j                  	      S c c}w )NzU`replace_strict` requires an explicit value for `default` for any spark-like backend.z.`replace_strict` is not (yet) implemented for .r   )chainFr   c           
        | j                        } |       D cg c]E  }j                  j                  j                  	      |      	|         j	                  |      G }}
rW| j
                  j                  }t        
j                  j                  |      }|D cg c]  }|j                  |       c}S |S c c}w c c}w r9   )_evaluate_single_output_exprr   array_containsmap_keysr   r   r   r   r=   r   r   )r   default_colrd   resultssessionr   resultr   defaultmapping_exprreturn_dtyper@   s          rG   r   z*SparkLikeExpr.replace_strict.<locals>.func  s    99'BK !H	 %D $$QZZ%=tDlSWFX)K() %	   ))006 $--1D1Dg @GGwVK0wGGN Hs   A
C'C	r   r   )r   
ValueErrorr>   r   r   rl   	itertoolsr-  rT   dictr   
create_mapitemsrz   r   r;   r<   r=   )r@   r6  oldnewr8  rn   r-  r   xr   r   r7  s   ``  `     @@rG   replace_strictzSparkLikeExpr.replace_strictn  s     j iCS/!>#A#AAB4CWCWBXXYZC%c**#GGs3E23||ugmmo7N$O7N!QUU1X7N$OP	 	" ~~"&"="=#77MM//  
 	
' %Ps   Dc                    t        |       S r9   r   rV   s    rG   strzSparkLikeExpr.str      +D11rI   c                    t        |       S r9   r	   rV   s    rG   dtzSparkLikeExpr.dt  s    -d33rI   c                    t        |       S r9   r   rV   s    rG   listzSparkLikeExpr.list  s    )$//rI   c                    t        |       S r9   r   rV   s    rG   structzSparkLikeExpr.struct  rD  rI   c                Z     |dk7  rd}t        |      d fd} j                  |      S )NlinearzJOnly linear interpolation methods are supported for PySpark-like quantile.c                <    j                   j                  |       S r9   )rT   
percentile)rd   quantiler@   s    rG   	_quantilez)SparkLikeExpr.quantile.<locals>._quantile  s    77%%dH55rI   r   )rl   r   )r@   rO  interpolationrn   rP  s   ``   rG   rO  zSparkLikeExpr.quantile  s5     H$^C%c**	6 ""9--rI   r9   )rA   z&EvalSeries[SparkLikeLazyFrame, Column]rB   zSparkWindowFunction | NonerC   EvalNames[SparkLikeLazyFrame]rD   zAliasNames | NonerE   r   rF   r   r   None)r   r    )r   r   NN)rd   r    r\   Sequence[str | Column]re   rT  rf   
int | Nonerg   rU  rY   Sequence[bool] | NonerZ   rV  r   r    )rd   r    re   rC  r   r    )rd   r    rv   boolr   r    )r   r#   )r   ztype[Window])r   Column | strrY   rV  rZ   rV  r   zIterator[Column])r   rX  r   r"   )r   r+   )rd   r    r   rC  r   r    )r   z
type[Self]r   rR  r   r-   r   r#   )r   intr   r-   r   r#   )r   r#   r   r#   )r   r/   r   r#   )r   Sequence[Any]r   r#   )r'  zSelf | Noner#  zFillNullStrategy | Noner"  rU  r   r#   )
r6  zSparkLikeExpr | NoDefaultr>  rZ  r?  rZ  r8  zIntoDType | Noner   r#   )r   r   )r   r
   )r   r   )r   r   )rO  r  rQ  r1   r   r#   )-__name__
__module____qualname__rH   rO   __annotations__rW   ri   ro   rq   rw   r{   propertyrT   r   r`   r^   r\   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r  r
  r   r  r  r  r*  rA  rC  rF  rH  rJ  rO  r   rI   rG   r7   r7   3   s    7;L4L 4L
  =L .L L 'L 
L$ KG " 02+-!%#! -1,0!! -! )	!
 ! ! *! *! 
!0'
'
A/ 6 6 : : 3 3 -1,0	

 *
 *	

 

*C
     

<

 !
 

 
$ 
 
2D3E.+
0,02.)55/C C,CCLVC	C@/
*/
 /
 	/
 '/
 
/
b 2 2 4 4 0 0 2 2
.
..H
.	
.rI   r7   )r)   r    )C
__future__r   r   typingr   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   collections.abcr   r   r   r   r   sqlframe.base.columnr    r   r!   r"   typing_extensionsr#   narwhals._compliantr$   narwhals._compliant.typingr%   r&   r'   r(   narwhals._spark_like.dataframer)   r   r+   narwhals._typingr,   r-   narwhals.typingr.   r/   r0   r1   r5   r^  SparkWindowFunctionr   r7   r   rI   rG   <module>rs     s    "  > > G E F I  ' L LEE +7&0  BA*/  #**L"MiM();V)CD$V,F.G:; F.rI   