
    }i                    P   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mZmZmZmZ d dlmZ d dlmZ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  er0d 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* d dl+m,Z,m-Z-m.Z.  G d deeef         e	eef                   Z/dS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralProtocol)LazyExpr)
AliasNames	EvalNames
EvalSeriesNativeExprTWindowFunction)WindowInputs)combine_alias_output_namescombine_evaluate_output_names)SQLLazyFrameT)ImplementationVersionextend_boolis_pyspark_pre_4not_implemented)InvalidOperationError)Sequence)Self)r
   r   )SQLExprDateTimeNamesSpace)SQLExprStringNamespace)SQLNamespace)ModeKeepStrategyPythonLiteral
RankMethodc                     e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   	 dej        dddZddZddZdd!Z	dd#Z
dd$Z	 ddd&Zdd'Zdd*Zdd,Zedd-            Zdd3Zdd6Zdd8Zdd9Zdd;Zdd<Zdd?Z	 dddCZ	 	 	 	 ddddEddNZddRZ	 dddYZedd[            Zedd\            Zedd_            Z dd`Z!ddaZ"ddbZ#ddcZ$dddZ%ddeZ&ddfZ'ddgZ(ddhZ)ddiZ*ddjZ+ddkZ,ddlZ-ddmZ.ddnZ/ddoZ0ddpZ1ddqZ2ddrZ3ddsZ4ddtZ5dduZ6ddvZ7ddwZ8ddxZ9ddyZ:ddzZ;dd{Z<dd}Z=dd~Z>ddZ?ddZ@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXddZYddZZddZ[dddZ\dddZ]ddZ^ddZ_ddZ`ddZaddZbedd            Zcedd            Zd ee            Zf ee            Zg ee            ZhdS )SQLExpr&EvalSeries[SQLLazyFrameT, NativeExprT]_callEvalNames[SQLLazyFrameT]_evaluate_output_namesAliasNames | None_alias_output_namesr   _versionr   _implementation1WindowFunction[SQLLazyFrameT, NativeExprT] | None_window_functionN)implementationcallwindow_functionevaluate_output_namesalias_output_namesversionr-   returnNonec                   d S N )selfr.   r/   r0   r1   r2   r-   s          F/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_sql/expr.py__init__zSQLExpr.__init__1   s	     s    dfr   Sequence[NativeExprT]c                ,    |                      |          S r6   )r$   )r8   r<   s     r9   __call__zSQLExpr.__call__<   s    zz"~~r;   3SQLNamespace[SQLLazyFrameT, Self, Any, NativeExprT]c                    d S r6   r7   r8   s    r9   __narwhals_namespace__zSQLExpr.__narwhals_namespace__?   s    >Acr;   Callable[..., NativeExprT]expressifiable_argsr   c                    d fd}|S )Nr<   r   r3   list[NativeExprT]c                |                 } fd                                 D             fd|D             S )Nc                B    i | ]\  }}|                     |          S r7   )_evaluate_single_output_expr).0keyvaluer<   s      r9   
<dictcomp>zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<dictcomp>H   s=     # # #C R44U;;# # #r;   c                "    g | ]} |fi S r7   r7   rK   native_seriesr.   other_native_seriess     r9   
<listcomp>zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<listcomp>L   <       ! ]::&9::  r;   )items)r<   native_series_listrR   r.   rE   r8   s   ` @r9   funcz.SQLExpr._callable_to_eval_series.<locals>.funcF   sx    !%b# # # #"5";";"="=# # #    %7   r;   )r<   r   r3   rG   r7   )r8   r.   rE   rW   s   ``` r9   _callable_to_eval_seriesz SQLExpr._callable_to_eval_seriesC   s4    		 		 		 		 		 		 		 		 r;   *WindowFunction[SQLLazyFrameT, NativeExprT]c                    d fd}|S )	Nr<   r   window_inputsWindowInputs[NativeExprT]r3   r=   c                                                     } fd                                D             fd|D             S )Nc                D    i | ]\  }}|                     |          S r7   )_evaluate_window_expr)rK   rL   rM   r<   r[   s      r9   rN   zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<dictcomp>_   s?     # # #C R--e]CC# # #r;   c                "    g | ]} |fi S r7   r7   rP   s     r9   rS   zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<listcomp>c   rT   r;   )r/   rU   )r<   r[   rV   rR   r.   rE   r8   s   `` @r9   window_fz4SQLExpr._push_down_window_function.<locals>.window_fV   s     "&!5!5b-!H!H# # # # #"5";";"="=# # #    %7   r;   r<   r   r[   r\   r3   r=   r7   )r8   r.   rE   ra   s   ``` r9   _push_down_window_functionz"SQLExpr._push_down_window_functionS   s4    	 	 	 	 	 	 	 	$ r;   c                j    |                      | j        || j        | j        | j        | j                  S Nr0   r1   r2   r-   )	__class__r$   r&   r(   r)   r*   )r8   r/   s     r9   _with_window_functionzSQLExpr._with_window_functionj   s>     ~~J"&"=#7M/  
 
 	
r;   window_funcc               x    |                       | j        |fi ||| j        | j        | j        | j                  S re   )rg   rX   r&   r(   r)   r*   )r8   r.   ri   rE   s       r9   _with_callablezSQLExpr._with_callablev   sR     ~~)D)$FF2EFF"&"=#7M/  
 
 	
r;   c                   |                       | j        |fi | | j        |fi || j        | j        | j        | j                  S re   rg   rX   rc   r&   r(   r)   r*   )r8   r.   rE   s      r9   _with_elementwisezSQLExpr._with_elementwise   sh     ~~)D)$FF2EFF+D+DHH4GHH"&"=#7M/  
 
 	
r;   opotherc                    |                      |                     ||          |                     ||          | j        | j        | j        | j                  S )Nrp   rf   rm   )r8   ro   rp   s      r9   _with_binaryzSQLExpr._with_binary   s`    ~~))"E)::++Be+<<"&"=#7M/  
 
 	
r;   rW   c                   | j         d n	nfd} t          |           | j        | j        | j        || j        | j                  S )Nc                ,      |                     S r6   r7   )output_namescurrent_alias_output_namesrW   s    r9   <lambda>z2SQLExpr._with_alias_output_names.<locals>.<lambda>   s    dd+E+El+S+S&T&T r;   rf   )r(   typer$   r,   r&   r)   r*   )r8   rW   r1   rw   s    ` @r9   _with_alias_output_namesz SQLExpr._with_alias_output_names   s~    %)%=" | D *1 TTTTT 	 tDzzJ!"&"=1M/
 
 
 	
r;   c                "     d fd} j         p|S )	Nr<   r   inputsr\   r3   r=   c                H    j         rJ fd |           D             S )Nc                F    g | ]}                     |j                  S r7   )_window_expressionpartition_byrK   exprr|   r8   s     r9   rS   zHSQLExpr.window_function.<locals>.default_window_func.<locals>.<listcomp>   s9       GK''f.ABB  r;   order_byr<   r|   r8   s    `r9   default_window_funcz4SQLExpr.window_function.<locals>.default_window_func   sM     &&&    OStTVxx   r;   r<   r   r|   r\   r3   r=   )r,   )r8   r   s   ` r9   r/   zSQLExpr.window_function   s2    	 	 	 	 	 	 $;(;;r;   namestrargsNativeExprT | PythonLiteralr   c                B     |                                  j        |g|R  S r6   )rC   	_function)r8   r   r   s      r9   r   zSQLExpr._function   s)    6t**,,6tCdCCCCr;   rM   r   c                P    |                                                      |          S r6   )rC   _lit)r8   rM   s     r9   r   zSQLExpr._lit   s"    **,,11%888r;   r   c                :     |                                  j        | S r6   )rC   	_coalesce)r8   r   s     r9   r   zSQLExpr._coalesce   s    6t**,,6==r;   c                    d S r6   r7   rB   s    r9   _count_starzSQLExpr._count_star         r;   r   c                    d S r6   r7   r8   r   r   s      r9   _firstzSQLExpr._first   r   r;   c                    d S r6   r7   r   s      r9   _lastzSQLExpr._last   r   r;   ignore_nullsboolc                   d S r6   r7   )r8   r   r   s      r9   
_any_valuezSQLExpr._any_value   r   r;   	condition	otherwiseNativeExprT | Nonec                T    |                                                      |||          S r6   )rC   _when)r8   r   rM   r   s       r9   r   zSQLExpr._when   s(     **,,229eYOOOr;   r7   
descending
nulls_lastr   Sequence[str | NativeExprT]
rows_start
int | Nonerows_endr   Sequence[bool] | Noner   c                   d S r6   r7   )r8   r   r   r   r   r   r   r   s           r9   r   zSQLExpr._window_expression   s	     cr;   	func_name'Literal['sum', 'max', 'min', 'product']reversec                    d fd}|S )	Nr<   r   r|   r\   r3   r=   c                    t          t          j                            fd |           D             S )Nc                    g | ]d}                                         d |                                                   |          j        j        d                    eS )isnullr   r   r   r   )r   r   r   r   r   )rK   r   flagsr   r|   r8   s     r9   rS   z:SQLExpr._cum_window_func.<locals>.func.<locals>.<listcomp>   s         

^^Hd333++y$77+#(#(!" ,  
 
  r;   r   lenr   )r<   r|   r   r   r   r8   s    `@r9   rW   z&SQLExpr._cum_window_func.<locals>.func   sd      V_)=)=>>E       !DHH   r;   r   r7   )r8   r   r   rW   s   ``` r9   _cum_window_funczSQLExpr._cum_window_func   s4    	 	 	 	 	 	 	 	& r;   $Literal['sum', 'mean', 'std', 'var']window_sizeintmin_samplesddofcenterc               z    	
 g d|r|dz
  dz  }|dz
  dz  }||z    
|	n|dz
   
d	d	 
fd}|S )N)summeanstdvar      r   r<   r   r|   r\   r3   r=   c                B   dv rnkdk    r	dk    rdn\dv r	dk    rdnOdk    r	dk    rdn@dk    r	dk    rd	n1d
v rd d}t          |          d d d}t          |          |j        |j        
d	fd 	|           D             S )N>   r   r   r   r   var_popr   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: )r   r   r   r   c                    g | ]o}                      j                            d |          fi                               k     j                            |          fi           pS )count)r   r   r   r   )rK   r   func_r   r8   window_kwargss     r9   rS   z>SQLExpr._rolling_window_func.<locals>.func.<locals>.<listcomp>  s     	 	 	  

+D+w55 9F  yy--. ,D+DNN5$,G,GYY=YY 	 	 	r;   )
ValueErrorr   r   )r<   r|   msgr   r   r   endr   r   r8   startsupported_funcss      @@r9   rW   z*SQLExpr._rolling_window_func.<locals>.func  s/    O++&e##		!e##		"e##		$e##		%n,,`T]``` oo%j_jj^gjjj oo% & 3"O#	" "M	 	 	 	 	 	 	 !DHH	 	 	 	r;   r   r7   )r8   r   r   r   r   r   half	remainderrW   r   r   r   s   `` ``    @@@r9   _rolling_window_funczSQLExpr._rolling_window_func   s     877 	!O)D$qA-IY&'ECC!Ao&EC"	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	H r;   tuple[int, ...]c                4    | j                                         S r6   )r*   _backend_versionrB   s    r9   r   zSQLExpr._backend_version,  s    #44666r;   c                   d S r6   r7   )clsr   r   s      r9   _alias_nativezSQLExpr._alias_native0  s    LOCr;   *Callable[[list[NativeExprT]], NativeExprT]exprsc                    dfd}dfd}d	         } | ||t           t           |j        |j        
          S )Nr<   r   r3   r=   c                6       fdD                       gS )Nc                0    g | ]} |          D ]}|S r7   r7   )rK   r   er<   s      r9   rS   zISQLExpr._from_elementwise_horizontal_op.<locals>.call.<locals>.<listcomp>8  s.    @@@ttBxx@@!!@@@@r;   r7   )r<   r   rW   s   `r9   r.   z5SQLExpr._from_elementwise_horizontal_op.<locals>.call7  s,    D@@@@@@@AABBr;   r[   r\   c                >      fdD             } |          gS )Nc                F    g | ]}|                               D ]}|S r7   )r/   )rK   r   r   r<   r[   s      r9   rS   zTSQLExpr._from_elementwise_horizontal_op.<locals>.window_function.<locals>.<listcomp>=  s6    XXX0D0DR0W0WXX11XXXXr;   r7   )r<   r[   lstr   rW   s   `` r9   r/   z@SQLExpr._from_elementwise_horizontal_op.<locals>.window_function:  s4     YXXXXXXXCDII;r;   r   )r/   r0   r1   r2   r-   r<   r   r3   r=   rb   )r   r   r)   r*   )r   rW   r   r.   r/   contexts    ``   r9   _from_elementwise_horizontal_opz'SQLExpr._from_elementwise_horizontal_op3  s    	C 	C 	C 	C 	C 	C 	C	 	 	 	 	 	 	 (s+"?"G95A$"2
 
 
 	
r;   c                >    | j         j                                        S )a	  Return `True` for multi-output aggregations without names.

        For example, column `'a'` only appears in the output as a grouping key:

            df.group_by('a').agg(nw.all().sum())

        It does not get included in:

            nw.all().sum().
        )	_metadataexpansion_kindis_multi_unnamedrB   s    r9   _is_multi_output_unnamedz SQLExpr._is_multi_output_unnamedJ  s     ~,==???r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__eq__r   rp   s     r9   rx   z SQLExpr.__eq__.<locals>.<lambda>Y      T[[5G5G r;   rs   r8   rp   s     r9   r   zSQLExpr.__eq__X        !G!GOOOr;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__ne__r   s     r9   rx   z SQLExpr.__ne__.<locals>.<lambda>\  r   r;   r   r   s     r9   r   zSQLExpr.__ne__[  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__add__r   s     r9   rx   z!SQLExpr.__add__.<locals>.<lambda>_      T\\%5H5H r;   r   r   s     r9   r   zSQLExpr.__add__^        !H!H%PPPr;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__sub__r   s     r9   rx   z!SQLExpr.__sub__.<locals>.<lambda>b  r   r;   r   r   s     r9   r   zSQLExpr.__sub__a  r   r;   c                V    |                      d |                              d          S )Nc                    || z
  S r6   r7   r   s     r9   rx   z"SQLExpr.__rsub__.<locals>.<lambda>e  
    UT\ r;   literalrs   aliasr   s     r9   __rsub__zSQLExpr.__rsub__d  +      !A!A5IIOOPYZZZr;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__mul__r   s     r9   rx   z!SQLExpr.__mul__.<locals>.<lambda>h  r   r;   r   r   s     r9   r  zSQLExpr.__mul__g  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__truediv__r   s     r9   rx   z%SQLExpr.__truediv__.<locals>.<lambda>k  s    T5E5Ee5L5L r;   r   r   s     r9   r  zSQLExpr.__truediv__j  s      !L!LeTTTr;   c                V    |                      d |                              d          S )Nc                    || z  S r6   r7   r   s     r9   rx   z&SQLExpr.__rtruediv__.<locals>.<lambda>n  r  r;   r  r  r   s     r9   __rtruediv__zSQLExpr.__rtruediv__m  r  r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__pow__r   s     r9   rx   z!SQLExpr.__pow__.<locals>.<lambda>q  r   r;   r   r   s     r9   r  zSQLExpr.__pow__p  r   r;   c                V    |                      d |                              d          S )Nc                    || z  S r6   r7   r   s     r9   rx   z"SQLExpr.__rpow__.<locals>.<lambda>t  s
    UD[ r;   r  r  r   s     r9   __rpow__zSQLExpr.__rpow__s  s*      !@!@%HHNNyYYYr;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__mod__r   s     r9   rx   z!SQLExpr.__mod__.<locals>.<lambda>w  r   r;   r   r   s     r9   r  zSQLExpr.__mod__v  r   r;   c                V    |                      d |                              d          S )Nc                    || z  S r6   r7   r   s     r9   rx   z"SQLExpr.__rmod__.<locals>.<lambda>z  r  r;   r  r  r   s     r9   __rmod__zSQLExpr.__rmod__y  r  r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__ge__r   s     r9   rx   z SQLExpr.__ge__.<locals>.<lambda>}  r   r;   r   r   s     r9   r   zSQLExpr.__ge__|  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__gt__r   s     r9   rx   z SQLExpr.__gt__.<locals>.<lambda>  r   r;   r   r   s     r9   r#  zSQLExpr.__gt__  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__le__r   s     r9   rx   z SQLExpr.__le__.<locals>.<lambda>  r   r;   r   r   s     r9   r&  zSQLExpr.__le__  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__lt__r   s     r9   rx   z SQLExpr.__lt__.<locals>.<lambda>  r   r;   r   r   s     r9   r)  zSQLExpr.__lt__  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__and__r   s     r9   rx   z!SQLExpr.__and__.<locals>.<lambda>  r   r;   r   r   s     r9   r,  zSQLExpr.__and__  r   r;   c                0    |                      d |          S )Nc                ,    |                      |          S r6   )__or__r   s     r9   rx   z SQLExpr.__or__.<locals>.<lambda>  r   r;   r   r   s     r9   r/  zSQLExpr.__or__  r   r;   c                >     d fd}                      ||          S )Nr   r   rp   r3   c                                         |                    d          k    t          j        | |                              d                     S Nr   r   r   ro   floordivr   rp   r8   s     r9   rW   z"SQLExpr.__floordiv__.<locals>.func  sE    ::1%r{4'?'?4  r;   rr   r   r   rp   r   r3   r   r   r8   rp   rW   s   `  r9   __floordiv__zSQLExpr.__floordiv__  s<    	 	 	 	 	 	
   U 333r;   c                d     d fd}                      ||                              d          S )	Nr   r   rp   r3   c                                         |                     d          k    t          j        ||                               d                     S r2  r3  r5  s     r9   rW   z#SQLExpr.__rfloordiv__.<locals>.func  sE    ::		!$bk%&>&>		$  r;   rr   r  r6  r  r7  s   `  r9   __rfloordiv__zSQLExpr.__rfloordiv__  sJ    	 	 	 	 	 	
   U 3399)DDDr;   c                H     d fd}d fd
}                      ||          S )Nr   r   r3   c                ~                                             d|                               d                    S )Nbool_andTr   r   r   r   r8   s    r9   fzSQLExpr.all.<locals>.f  s/    >>$..T"B"BDIIdOOTTTr;   r<   r   r|   r\   r=   c                6    fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )r>  Tr   r   r   r   r   r   s     r9   rS   z1SQLExpr.all.<locals>.window_f.<locals>.<listcomp>  sq         ++z488&:M  IIdOO	   r;   r7   r   s    `r9   ra   zSQLExpr.all.<locals>.window_f  >         !DHH   r;   r   r   r3   r   r   rk   r8   rA  ra   s   `  r9   allzSQLExpr.all  ]    	U 	U 	U 	U 	U 	U	 	 	 	 	 	 ""1h///r;   c                H     d fd}d fd
}                      ||          S )Nr   r   r3   c                ~                                             d|                               d                    S )Nbool_orFr?  r@  s    r9   rA  zSQLExpr.any.<locals>.f  s1    >>$..D"A"A499UCSCSTTTr;   r<   r   r|   r\   r=   c                6    fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )rM  FrD  r   s     r9   rS   z1SQLExpr.any.<locals>.window_f.<locals>.<listcomp>  ss         ++y$779L  IIe$$	   r;   r7   r   s    `r9   ra   zSQLExpr.any.<locals>.window_f  rE  r;   rF  r   rG  rH  s   `  r9   anyzSQLExpr.any  rJ  r;   c                4                            fd          S )Nc                0                         d|           S )Nmaxr   r@  s    r9   rx   zSQLExpr.max.<locals>.<lambda>      ud0K0K r;   rG  rB   s   `r9   rS  zSQLExpr.max  !    ""#K#K#K#KLLLr;   c                4                            fd          S )Nc                0                         d|           S )Nr   rT  r@  s    r9   rx   zSQLExpr.mean.<locals>.<lambda>      vt0L0L r;   rG  rB   s   `r9   r   zSQLExpr.mean  s!    ""#L#L#L#LMMMr;   c               >     d fd}                      |          S )Nr   r   r3   c                l   dk    r                     d|           S dk    r                     d|           S                      d|           }t          j                             d|                                dt          j        |d          t          j        |          z                      S )Nr   r   r   r   r   sqrtr   ro   mulsubr   	n_samplesr   r8   s     r9   rW   zSQLExpr.std.<locals>.func  s    qyy~~lD999qyy~~mT:::w55I6}d33vy!(<(<yRV@W@W'WXX  r;   rF  rG  r8   r   rW   s   `` r9   r   zSQLExpr.std  =    		 		 		 		 		 		 		 ""4(((r;   c               >     d fd}                      |          S )Nr   r   r3   c                D   dk    r                     d|           S dk    r                     d|           S                      d|           }t          j                             d|           t          j        |d          t          j        |          z            S )Nr   r   r   r   r   r]  r`  s     r9   rW   zSQLExpr.var.<locals>.func  s    qyy~~i666qyy~~j$777w55I6z400y!$$rvi'>'>>  r;   rF  rG  rb  s   `` r9   r   zSQLExpr.var  rc  r;   c                4                            fd          S )Nc                0                         d|           S )NmedianrT  r@  s    r9   rx   z SQLExpr.median.<locals>.<lambda>  s    x0N0N r;   rG  rB   s   `r9   rh  zSQLExpr.median  s!    ""#N#N#N#NOOOr;   float | Nonec                >     d fd}                      |          S )Nr   r   r3   c                                                             d|                                         |           S )Nisnan)r   r   r   )r   r8   rM   s    r9   	_fill_nanz#SQLExpr.fill_nan.<locals>._fill_nan  s3    ::dnnWd;;TYYu=M=MtTTTr;   rF  rn   )r8   rM   rm  s   `` r9   fill_nanzSQLExpr.fill_nan  sD    	U 	U 	U 	U 	U 	U 	U %%i000r;   c                4                            fd          S )Nc                0                         d|           S )NminrT  r@  s    r9   rx   zSQLExpr.min.<locals>.<lambda>  rU  r;   rG  rB   s   `r9   rr  zSQLExpr.min  rV  r;   c                4                            fd          S )Nc                0                         d|           S )Nr   rT  r@  s    r9   rx   zSQLExpr.count.<locals>.<lambda>  s    w0M0M r;   rG  rB   s   `r9   r   zSQLExpr.count  s!    ""#M#M#M#MNNNr;   c                H     d fd}d fd
}                      ||          S )Nr   r   r3   c                ~                                             d|                               d                    S )Nr   r   r?  r@  s    r9   rA  zSQLExpr.sum.<locals>.f  s/    >>$.."="=tyy||LLLr;   r<   r   r|   r\   r=   c                H    j         rJ fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )r   r   rD  r   s     r9   rS   z1SQLExpr.sum.<locals>.window_f.<locals>.<listcomp>  sq         ++ud33V5H  IIaLL	   r;   r   r   s    `r9   ra   zSQLExpr.sum.<locals>.window_f  sN     &&&     !DHH   r;   rF  r   rG  rH  s   `  r9   r   zSQLExpr.sum  s]    	M 	M 	M 	M 	M 	M	 	 	 	 	 	 ""1h///r;   c                      j          j                             d                               d          cd fd}d fd}                     ||          S )Nr   r   r   r   r3   c                    t          j         d|            d                     d|                                         S )Ncount_distinctrS  r   )ro   addr   )r   Foner8   zeros    r9   rW   zSQLExpr.n_unique.<locals>.func  sR    6"D))%AAh$5$5sDAABB  r;   r<   r   r|   r\   r=   c                >    fd |           D             S )Nc                    g | ]h}t          j          d |          j                    d                     d|                              j                            iS )r{  rS  r   )ro   r|  r   r   )rK   r   r}  Wr|   r~  r8   r  s     r9   rS   z6SQLExpr.n_unique.<locals>.window_f.<locals>.<listcomp>  s     	 	 	  Aaa($//1DEEA%AAh,=,=sD!I!IJJ+  	 	 	r;   r7   )r<   r|   r}  r  r~  r8   r  s    `r9   ra   z"SQLExpr.n_unique.<locals>.window_f  sR    	 	 	 	 	 	 	 	 	 !DHH	 	 	 	r;   rF  r   )r   r   r   rk   )r8   rW   ra   r}  r  r~  r  s   `  @@@@r9   n_uniquezSQLExpr.n_unique
  s    N#IIaLL$))A,,	c	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 ""4222r;   c                4                            fd          S )Nc                0                         d|           S )NabsrT  r@  s    r9   rx   zSQLExpr.abs.<locals>.<lambda>'      4>>%3N3N r;   rn  rB   s   `r9   r  zSQLExpr.abs&  !    %%&N&N&N&NOOOr;   lower_boundupper_boundc                @     d fd}                      |||          S )	Nr   r   r  r  r3   c                \                         d                     d| |          |          S )NgreatestleastrT  )r   r  r  r8   s      r9   _clipzSQLExpr.clip.<locals>._clip*  s2     >>DNN7D+FF  r;   )r  r  )r   r   r  r   r  r   r3   r   rn  )r8   r  r  r  s   `   r9   clipzSQLExpr.clip)  sG    	 	 	 	 	 	 %%{ & 
 
 	
r;   c                >     d fd}                      ||          S )Nr   r   r  r3   c                2                         d| |          S )Nr  rT  )r   r  r8   s     r9   r  z!SQLExpr.clip_lower.<locals>._clip6  s    >>*dK@@@r;   )r  )r   r   r  r   r3   r   rn  )r8   r  r  s   `  r9   
clip_lowerzSQLExpr.clip_lower5  sB    	A 	A 	A 	A 	A 	A %%e%EEEr;   c                >     d fd}                      ||          S )Nr   r   r  r3   c                2                         d| |          S )Nr  rT  )r   r  r8   s     r9   r  z!SQLExpr.clip_upper.<locals>._clip<  s    >>'4===r;   )r  )r   r   r  r   r3   r   rn  )r8   r  r  s   `  r9   
clip_upperzSQLExpr.clip_upper;  s<    	> 	> 	> 	> 	> 	> %%e%EEEr;   c                4                            fd          S )Nc                0                         d|           S )Nr   rT  r@  s    r9   rx   z!SQLExpr.is_null.<locals>.<lambda>B  s    4>>(D3Q3Q r;   rn  rB   s   `r9   is_nullzSQLExpr.is_nullA  s!    %%&Q&Q&Q&QRRRr;   decimalsc                     t           j                  }|r|n                     |                                fd          S )Nc                2                         d|           S )NroundrT  )r   round_decimalsr8   s    r9   rx   zSQLExpr.round.<locals>.<lambda>J  s    ~FF r;   )r   r*   r   rn   )r8   r  _is_pre4r  s   `  @r9   r  zSQLExpr.roundD  sW     $D$899%-F499X3F3F%%FFFFF
 
 	
r;   c                4                            fd          S )Nc                0                         d|           S )NfloorrT  r@  s    r9   rx   zSQLExpr.floor.<locals>.<lambda>N  s    4>>'43P3P r;   rn  rB   s   `r9   r  zSQLExpr.floorM  s!    %%&P&P&P&PQQQr;   c                4                            fd          S )Nc                0                         d|           S )NceilrT  r@  s    r9   rx   zSQLExpr.ceil.<locals>.<lambda>Q  s    4>>&$3O3O r;   rn  rB   s   `r9   r  zSQLExpr.ceilP  s!    %%&O&O&O&OPPPr;   c                4                            fd          S )Nc                0                         d|           S )NsinrT  r@  s    r9   rx   zSQLExpr.sin.<locals>.<lambda>T  r  r;   rn  rB   s   `r9   r  zSQLExpr.sinS  r  r;   c                4                            fd          S )Nc                0                         d|           S )NcosrT  r@  s    r9   rx   zSQLExpr.cos.<locals>.<lambda>W  r  r;   rn  rB   s   `r9   r  zSQLExpr.cosV  r  r;   c                :     d fd}                      |          S )Nr   r   r3   c                                         |                     d          k                         t          d                                        d|                     S )Nr   nanr\  )r   r   floatr   r@  s    r9   _sqrtzSQLExpr.sqrt.<locals>._sqrtZ  sP    ::tyy||#TYYuU||%<%<dnnVUY>Z>Z  r;   rF  rn  )r8   r  s   ` r9   r\  zSQLExpr.sqrtY  s7    	 	 	 	 	 	
 %%e,,,r;   c                4                            fd          S )Nc                0                         d|           S )NexprT  r@  s    r9   rx   zSQLExpr.exp.<locals>.<lambda>b  r  r;   rn  rB   s   `r9   r  zSQLExpr.expa  r  r;   baser  c                >     d fd}                      |          S )Nr   r   r3   c                   j         }                    |                     d          k                         t          d                                        |                     d          k                        t          d                    t	          j         |d|            |d                                                                      S )Nr   r  z-inflog)r   r   r   r  ro   truediv)r   r}  r  r8   s     r9   _logzSQLExpr.log.<locals>._loge  s    A::tyy||#		%,,''

DIIaLL(IIeFmm,,Jqq~~qq		$/H/HII   r;   rF  rn  )r8   r  r  s   `` r9   r  zSQLExpr.logd  s=    
	 
	 
	 
	 
	 
	 
	 %%d+++r;   c               V    |                      |                     d|                    S )Nr   r   rh   r   r8   r   s     r9   cum_sumzSQLExpr.cum_sumt  )    ))$*?*?w*?*W*WXXXr;   c               V    |                      |                     d|                    S )NrS  r  r  r  s     r9   cum_maxzSQLExpr.cum_maxw  r  r;   c               V    |                      |                     d|                    S )Nrr  r  r  r  s     r9   cum_minzSQLExpr.cum_minz  r  r;   c               >     d fd}                      |          S )	Nr<   r   r|   r\   r3   r=   c                ~    t          t          j                            fd |           D             S )Nc           
         g | ];}                                         d |          j        j        d          <S )r   r   r   r   r   r   r   rK   r   r   r|   r8   s     r9   rS   z3SQLExpr.cum_count.<locals>.func.<locals>.<listcomp>  se     
 
 
  ''NN7D11'O$$ (  
 
 
r;   r   )r<   r|   r   r   r8   s    `@r9   rW   zSQLExpr.cum_count.<locals>.func~  s_      V_)=)=>>E
 
 
 
 
 
 !DHH
 
 
 
r;   r   rh   )r8   r   rW   s   `` r9   	cum_countzSQLExpr.cum_count}  s=    	 	 	 	 	 	 	  ))$///r;   c               V    |                      |                     d|                    S )Nproductr  r  r  s     r9   cum_prodzSQLExpr.cum_prod  s0    ))!!)W!==
 
 	
r;   c               Z    |                      |                     d|||                    S )Nr   r   rh   r   r8   r   r   r   s       r9   rolling_sumzSQLExpr.rolling_sum  s4    ))%%e[+f%UU
 
 	
r;   c               Z    |                      |                     d|||                    S )Nr   r  r  r  s       r9   rolling_meanzSQLExpr.rolling_mean  s4    ))%%fk;v%VV
 
 	
r;   c          	     \    |                      |                     d||||                    S )Nr   r   r   r  r8   r   r   r   r   s        r9   rolling_varzSQLExpr.rolling_var  ?     ))%%{Kd6 &  
 
 	
r;   c          	     \    |                      |                     d||||                    S )Nr   r  r  r  s        r9   rolling_stdzSQLExpr.rolling_std  r  r;   c                :     d fd}                      |          S )	Nr<   r   r|   r\   r3   r=   c                X    j         j        fd |           D             S )Nc                x    g | ]6}t          j        |  d |          j        j                            7S lag)ro   r_  r   r   )rK   r   r}  r|   windows     r9   rS   z.SQLExpr.diff.<locals>.func.<locals>.<listcomp>  sR        tVVAAeTNNF4GYYZZ  r;   )r   r   )r<   r|   r}  r  r8   s    `@@r9   rW   zSQLExpr.diff.<locals>.func  sT     A,F      DHH   r;   r   r  r8   rW   s   ` r9   diffzSQLExpr.diff  s7    	 	 	 	 	 	 ))$///r;   nc                >     d fd}                      |          S )	Nr<   r   r|   r\   r3   r=   c                8    fd |           D             S )Nc           	     |    g | ]8}                                         d |          j        j                  9S r  r  )rK   r   r|   r  r8   s     r9   rS   z/SQLExpr.shift.<locals>.func.<locals>.<listcomp>  sW         ''NN5$22F4G   r;   r7   )r<   r|   r  r8   s    `r9   rW   zSQLExpr.shift.<locals>.func  sC          !DHH	   r;   r   r  )r8   r  rW   s   `` r9   shiftzSQLExpr.shift  s=    	 	 	 	 	 	 	 ))$///r;   c                :     d fd}                      |          S )	Nr<   r   r|   r\   r3   r=   c                6    fd |           D             S )Nc                    g | ]R}                                         d           g j        |R j                                      d          k    SS )
row_numberr   r   r   r   r   r   r   s     r9   rS   z;SQLExpr.is_first_distinct.<locals>.func.<locals>.<listcomp>  sv         ''NN<000f)0400O 
 99Q<<   r;   r7   r   s    `r9   rW   z'SQLExpr.is_first_distinct.<locals>.func  s>         !DHH   r;   r   r  r  s   ` r9   is_first_distinctzSQLExpr.is_first_distinct  s7    	 	 	 	 	 	 ))$///r;   c                :     d fd}                      |          S )	Nr<   r   r|   r\   r3   r=   c                ~    t          dt          j                            fd |           D             S )NTc           	         g | ]U}                                         d           g j        |R j                                      d          k    VS )r  r   r   r  r  s     r9   rS   z:SQLExpr.is_last_distinct.<locals>.func.<locals>.<listcomp>  s     
 
 
  ''NN<000f)0400O$$ (   99Q<< 
 
 
r;   r   )r<   r|   r   r8   s    `@r9   rW   z&SQLExpr.is_last_distinct.<locals>.func  s_      c&/&:&:;;E
 
 
 
 
 
 !DHH
 
 
 
r;   r   r  r  s   ` r9   is_last_distinctzSQLExpr.is_last_distinct  s7    	 	 	 	 	 	  ))$///r;   Sequence[str]c                N     d fd}d fd
}                      ||          S )Nr   r   r3   c                F    sd}t          |           j        | gR  S Nz#Expected `order_by` to be specified)r   r   r   r   r   r8   s     r9   rA  zSQLExpr.first.<locals>.f  s8     1;+C0004;t/h////r;   r<   r   r|   r\   r=   c                    rj         rd}t          |          sj         sd}t          |          fd |           D             S )Nz4Can't specify both `order_by` in `over` and `first`.z4Must specify `order_by` either in `over` or `first`.c                l    g | ]0}                      j        |gj        pR  j                  1S r7   )r   r   r   r   rK   r   r|   r   r8   s     r9   rS   z3SQLExpr.first.<locals>.window_f.<locals>.<listcomp>  s^         ''DKE(C8EEEvGZ   r;   r   r   r<   r|   r   r   r8   s    ` r9   ra   zSQLExpr.first.<locals>.window_f  s      1FO 1L+C000 1FO 1L+C000      !DHH	   r;   rF  r   rG  r8   r   rA  ra   s   ``  r9   firstzSQLExpr.first  sb    	0 	0 	0 	0 	0 	0 	0	 	 	 	 	 	 	  ""1h///r;   c                N     d fd}d fd
}                      ||          S )Nr   r   r3   c                F    sd}t          |           j        | gR  S r  )r   r   r  s     r9   rA  zSQLExpr.last.<locals>.f  s8     1;+C0004:d.X....r;   r<   r   r|   r\   r=   c                    rj         rd}t          |          sj         sd}t          |          fd |           D             S )Nz3Can't specify both `order_by` in `over` and `last`.z3Must specify `order_by` either in `over` or `last`.c                l    g | ]0}                      j        |gj        pR  j                  1S r7   )r   r   r   r   r  s     r9   rS   z2SQLExpr.last.<locals>.window_f.<locals>.<listcomp>  s^         ''DJtDv'B(DDDfFY   r;   r  r  s    ` r9   ra   zSQLExpr.last.<locals>.window_f  s      1FO 1K+C000 1FO 1K+C000      !DHH	   r;   rF  r   rG  r  s   ``  r9   lastzSQLExpr.last
  sb    	/ 	/ 	/ 	/ 	/ 	/ 	/	 	 	 	 	 	 	  ""1h///r;   c               8                            fd          S )Nc                2                         |           S )N)r   )r   )r   r   r8   s    r9   rx   z#SQLExpr.any_value.<locals>.<lambda>%  s    LII r;   rG  )r8   r   s   ``r9   	any_valuezSQLExpr.any_value#  s+    ""IIIII
 
 	
r;   methodr    c                    dv r                      d          n1dk    r                      d          n                      d          	 dd fddfd}d fd}                     ||          S )N>   rS  rr  averagerankdense
dense_rankr  r7   r   r   r   r   r   r   r3   c               N                                    }|| f|gdgd}dg || R i}j        }j        }
dk    rJt          j        t          j         |	fi | ||fi |                              d                    }n
dk    rpt          j         |	fi |t          j        t          j         ||fi |                    d                                        d                              }n	 |	fi |}                     |d|            |          S )	NT)r   r   r   r   r   rS  r   r	  g       @r   )	r   r   r   ro   r_  r|  r   r  r   )r   r   r   
count_exprr   count_window_kwargsr  r}  	rank_exprrW   r  r8   s            r9   _rankzSQLExpr.rank.<locals>._rank0  s    ))++J ,!G)l#f	- -M 4BCX\CXSWCXCX2Y,FAFFt55}55zAA-@AA  IIaLL 		 9$$FF411=11JvvjHH4GHH$))TU,,WW		#  		 #F499=99	::qq4000)<<<r;   c                     |           S )Nr   r7   )r   r  r   s    r9   _unpartitioned_rankz)SQLExpr.rank.<locals>._unpartitioned_rankT  s    5*5555r;   r<   r   r|   r\   r=   c                h    j         rd}t          |          fd |           D             S )Nz[`rank` followed by `over` with `order_by` specified is not supported for SQL-like backends.c                6    g | ]} |j                    S )r  r   )rK   r   r  r   r|   s     r9   rS   z;SQLExpr.rank.<locals>._partitioned_rank.<locals>.<listcomp>]  s=        dF/JGGG  r;   )r   NotImplementedError)r<   r|   r   r  r   r8   s    ` r9   _partitioned_rankz'SQLExpr.rank.<locals>._partitioned_rankW  s`      /s)#...      DHH   r;   r7   )r   r   r   r   r   r   r3   r   rF  r   )r   rk   )r8   r  r   r  r  r  rW   s   ```  @@r9   r
  zSQLExpr.rank(  s    ...>>&))DDw>>,//DD>>,//D 9;"	= "	= "	= "	= "	= "	= "	= "	= "	=H	6 	6 	6 	6 	6 	6 	6		 		 		 		 		 		 		 		 ""#68IJJJr;   c                |     d fddfd}d fd}                      |                              |          S )Nr   r   r   str | NativeExprTr3   c                                                                         | g|R                               d          k    S )Nr   )r   r   r   )r   r   r8   s     r9   
_is_uniquez%SQLExpr.is_unique.<locals>._is_uniquee  sK     **  ""T$9L$9$9 1 r;   c                     |           S r6   r7   )r   r  s    r9   _unpartitioned_is_uniquez3SQLExpr.is_unique.<locals>._unpartitioned_is_uniquel  s    :d###r;   r<   r   r|   r\   r=   c                H    j         rJ fd |           D             S )Nc                ,    g | ]} |gj         R  S r7   r  )rK   r   r  r|   s     r9   rS   zESQLExpr.is_unique.<locals>._partitioned_is_unique.<locals>.<listcomp>s  s.    PPPtJJt:f&9:::PPPr;   r   )r<   r|   r  r8   s    `r9   _partitioned_is_uniquez1SQLExpr.is_unique.<locals>._partitioned_is_uniqueo  s9     &&&PPPPPttBxxPPPPr;   )r   r   r   r  r3   r   rF  r   )rk   rh   )r8   r   r#  r  s   `  @r9   	is_uniquezSQLExpr.is_uniqued  s    	 	 	 	 	 		$ 	$ 	$ 	$ 	$ 	$	Q 	Q 	Q 	Q 	Q 	Q 	Q ""#;<<RR"
 
 	
r;   c                t     d fd}                      | j         j         j         j                  S )Nr<   r   r3   r=   c                L                         | t                              S r6   )r/   r   )r<   r   r   r8   s    r9   rW   zSQLExpr.over.<locals>.func}  s#    ''Lx,P,PQQQr;   rf   r   )rg   r&   r(   r)   r*   )r8   r   r   rW   s   ``` r9   overzSQLExpr.overz  sl    	R 	R 	R 	R 	R 	R 	R 	R ~~"&"=#7M/  
 
 	
r;   keepr   c               z     |dk    rd| d j          d}t          |                                fd          S )NrP  z`Expr.mode(keep='z#')` is not implemented for backend z3

Hint: Use `nw.col(...).mode(keep='any')` instead.c                0                         d|           S )NmoderT  r@  s    r9   rx   zSQLExpr.mode.<locals>.<lambda>  rY  r;   )r*   r  rk   )r8   r(  r   s   `  r9   r+  zSQLExpr.mode  sj    5==DD D DTMa D D D  &c***""#L#L#L#LMMMr;   SQLExprStringNamespace[Self]c                    d S r6   r7   rB   s    r9   r   zSQLExpr.str  s    363r;   SQLExprDateTimeNamesSpace[Self]c                    d S r6   r7   rB   s    r9   dtz
SQLExpr.dt  s    58Sr;   r6   )r.   r#   r/   r+   r0   r%   r1   r'   r2   r   r-   r   r3   r4   r   )r3   r@   )r.   rD   rE   r   r3   r#   )r.   rD   rE   r   r3   rY   )r/   rY   r3   r   )r.   rD   ri   r+   rE   r   r3   r   )r.   rD   rE   r   r3   r   )ro   rD   rp   r   r3   r   )rW   r'   r3   r   )r3   rY   )r   r   r   r   r3   r   )rM   r   r3   r   rF  )r3   r   )r   r   r   r   r3   r   )r   r   r   r   r3   r   )r   r   rM   r   r   r   r3   r   )r7   r7   NN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   )r   r   r   r   r3   rY   )r   r   r   r   r   r   r   r   r   r   r3   rY   )r3   r   )r   r   r   r   r3   r   )rW   r   r   r   r3   r   )r3   r   )rp   r   r3   r   )r3   r   )r   r   r3   r   )rM   ri  r3   r   )r  r   r  r   r3   r   )r  r   r3   r   )r  r   r3   r   )r  r   r3   r   )r  r  r3   r   )r   r   r3   r   )r   r   r   r   r   r   r3   r   )
r   r   r   r   r   r   r   r   r3   r   )r  r   r3   r   r  )r   r  r3   r   )r   r   r3   r   )r  r    r   r   r3   r   )r   r   r   r  r3   r   )r(  r   r3   r   )r3   r,  )r3   r.  )i__name__
__module____qualname____annotations__r   DUCKDBr:   r?   rC   rX   rc   rh   rk   rn   rs   rz   propertyr/   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r#  r&  r)  r,  r/  r8  r;  rI  rP  rS  r   r   r   rh  ro  rr  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   r0  r   
drop_nullsfilteruniquer7   r;   r9   r"   r"   )   s        11114444****####GGGG
 NR	 *8)>	 	 	 	 	 	   B B B B       .

 

 

 

 JN
 
 
 
 
 

 

 

 


 
 
 

 
 
 
$ 	< 	< 	< X	<D D D D9 9 9 9> > > > .---KKKKJJJJVVVV
 )-	P P P P P 5702!%#
 -1,0
 
 
 
 
 
   :  7 7 7 7 7r 7 7 7 X7 OOO [O
 
 
 [
,@ @ @ @P P P PP P P PQ Q Q QQ Q Q Q[ [ [ [Q Q Q QU U U U[ [ [ [Q Q Q QZ Z Z ZQ Q Q Q[ [ [ [P P P PP P P PP P P PP P P PQ Q Q QP P P P4 4 4 4E E E E0 0 0 0&0 0 0 0&M M M MN N N N) ) ) )) ) ) )P P P P1 1 1 1M M M MO O O O0 0 0 0(3 3 3 38P P P P

 

 

 

F F F FF F F FS S S S
 
 
 
R R R RQ Q Q QP P P PP P P P- - - -P P P P, , , , Y Y Y YY Y Y YY Y Y Y0 0 0 0&
 
 
 

 
 
 


 
 
 


 
 
 

 
 
 
0 0 0 00 0 0 00 0 0 0"0 0 0 0&0 0 0 0 020 0 0 0 02
 
 
 

:K :K :K :Kx
 
 
 
,
 
 
 
N N N N 666 X6888 X8 ""J_F_FFFr;   r"   )0
__future__r   operatorro   typingr   r   r   r   r   narwhals._compliant.exprr	   narwhals._compliant.typingr
   r   r   r   r   narwhals._compliant.windowr   narwhals._expression_parsingr   r   narwhals._sql.typingr   narwhals._utilsr   r   r   r   r   narwhals.exceptionsr   collections.abcr   typing_extensionsr   narwhals._sql.expr_dtr   narwhals._sql.expr_strr   narwhals._sql.namespacer   narwhals.typingr   r   r    r"   r7   r;   r9   <module>rK     s<   " " " " " "     B B B B B B B B B B B B B B - - - - - -              4 3 3 3 3 3        / . . . . .              6 5 5 5 5 5 	L((((((&&&&&&EEEEEEEE??????======444444KKKKKKKKKKr r r r rh}k12H]K=W4X r r r r rr;   