
    hh|                    \   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 er>d d
lmZm Z  d dl!m"Z"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* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0  G d deeef         e	eef                   Z1d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not_implemented)IterableSequence)SelfTypeIs)r
   r   )ExprMetadata)SQLExprDateTimeNamesSpace)SQLExprStringNamespace)SQLNamespace)ModeKeepStrategyNumericLiteralPythonLiteral
RankMethodTemporalLiteralc                     e Zd ZU ded<   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dd0            Zdd6Zdd9Zdd;Zdd<Zdd>Zdd?Z	 dddCZ	 	 	 	 ddddEddNZddSZ	 dddZZedd]            Zedd_            Zedd`            Ze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Z,ddpZ-ddqZ.ddrZ/ddsZ0ddtZ1dduZ2ddvZ3ddwZ4ddxZ5ddyZ6ddzZ7dd{Z8dd|Z9dd}Z:dd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[edd            Z\edd            Z] e^            Z_ e^            Z`dS )SQLExpr&EvalSeries[SQLLazyFrameT, NativeExprT]_callEvalNames[SQLLazyFrameT]_evaluate_output_namesAliasNames | None_alias_output_namesr   _versionr   _implementationzExprMetadata | None	_metadata1WindowFunction[SQLLazyFrameT, NativeExprT] | None_window_functionN)implementationcallwindow_functionevaluate_output_namesalias_output_namesversionr1   returnNonec                   d S N )selfr2   r3   r4   r5   r6   r1   s          I/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_sql/expr.py__init__zSQLExpr.__init__2   s	     s    dfr   Sequence[NativeExprT]c                ,    |                      |          S r:   )r'   )r<   r@   s     r=   __call__zSQLExpr.__call__=   s    zz"~~r?   3SQLNamespace[SQLLazyFrameT, Self, Any, NativeExprT]c                    d S r:   r;   r<   s    r=   __narwhals_namespace__zSQLExpr.__narwhals_namespace__@   s    >Acr?   Callable[..., NativeExprT]expressifiable_args
Self | Anyc                    d fd}|S )Nr@   r   r7   list[NativeExprT]c                ~                 } fd                                 D             fd|D             S )Nc                    i | ]E\  }}|                     |          r                    |          n                    |          FS r;   )_is_expr_evaluate_expr_lit).0keyvaluer@   r<   s      r=   
<dictcomp>zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<dictcomp>I   se     # # # C ==''&R&&u---YYu%%# # #r?   c                "    g | ]} |fi S r;   r;   rR   native_seriesr2   other_native_seriess     r=   
<listcomp>zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<listcomp>O   <       ! ]::&9::  r?   )items)r@   native_series_listrY   r2   rI   r<   s   ` @r=   funcz.SQLExpr._callable_to_eval_series.<locals>.funcG   s    !%b# # # # # #6";";"="=	# # #    %7   r?   )r@   r   r7   rL   r;   )r<   r2   rI   r^   s   ``` r=   _callable_to_eval_seriesz SQLExpr._callable_to_eval_seriesD   s4    	 	 	 	 	 	 	 	 r?   *WindowFunction[SQLLazyFrameT, NativeExprT]c                    d fd}|S )	Nr@   r   window_inputsWindowInputs[NativeExprT]r7   rA   c                                                     } fd                                D             fd|D             S )Nc                    i | ]F\  }}|                     |          r                    |          n                    |          GS r;   )rO   _evaluate_window_exprrQ   )rR   rS   rT   r@   r<   rb   s      r=   rU   zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<dictcomp>b   sg     # # # C ==''&R--e]CCCYYu%%# # #r?   c                "    g | ]} |fi S r;   r;   rW   s     r=   rZ   zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<listcomp>h   r[   r?   )r3   r\   )r@   rb   r]   rY   r2   rI   r<   s   `` @r=   window_fz4SQLExpr._push_down_window_function.<locals>.window_fY   s     "&!5!5b-!H!H# # # # # # #6";";"="=	# # #    %7   r?   r@   r   rb   rc   r7   rA   r;   )r<   r2   rI   rh   s   ``` r=   _push_down_window_functionz"SQLExpr._push_down_window_functionV   s4    	 	 	 	 	 	 	 	( r?   r   c                j    |                      | j        || j        | j        | j        | j                  S Nr4   r5   r6   r1   )	__class__r'   r)   r+   r,   r-   )r<   r3   s     r=   _with_window_functionzSQLExpr._with_window_functiono   s>     ~~J"&"=#7M/  
 
 	
r?   window_funcc               x    |                       | j        |fi ||| j        | j        | j        | j                  S rl   )rn   r_   r)   r+   r,   r-   )r<   r2   rp   rI   s       r=   _with_callablezSQLExpr._with_callable{   sR     ~~)D)$FF2EFF"&"=#7M/  
 
 	
r?   c                   |                       | j        |fi | | j        |fi || j        | j        | j        | j                  S rl   rn   r_   rj   r)   r+   r,   r-   )r<   r2   rI   s      r=   _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rw   rm   rt   )r<   rv   rw   s      r=   _with_binaryzSQLExpr._with_binary   s`    ~~))"E)::++Be+<<"&"=#7M/  
 
 	
r?   r^   c                   | j         d n	nfd} t          |           | j        | j        | j        || j        | j                  S )Nc                ,      |                     S r:   r;   )output_namescurrent_alias_output_namesr^   s    r=   <lambda>z2SQLExpr._with_alias_output_names.<locals>.<lambda>   s    dd+E+El+S+S&T&T r?   rm   )r+   typer'   r0   r)   r,   r-   )r<   r^   r5   r~   s    ` @r=   _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   inputsrc   r7   rA   c                H    j         rJ fd |           D             S )Nc                R    g | ]#}                     |j        j                  $S r;   )_window_expressionpartition_byorder_byrR   exprr   r<   s     r=   rZ   zHSQLExpr.window_function.<locals>.default_window_func.<locals>.<listcomp>   s@        ''f.A6?SS  r?   r   r@   r   r<   s    `r=   default_window_funcz4SQLExpr.window_function.<locals>.default_window_func   sL     &&&     DHH   r?   r@   r   r   rc   r7   rA   )r0   )r<   r   s   ` r=   r3   zSQLExpr.window_function   s2    	 	 	 	 	 	 $;(;;r?   namestrargsNativeExprT | PythonLiteralr   c                B     |                                  j        |g|R  S r:   )rG   	_function)r<   r   r   s      r=   r   zSQLExpr._function   s)    6t**,,6tCdCCCCr?   rT   r   c                P    |                                                      |          S r:   )rG   rQ   )r<   rT   s     r=   rQ   zSQLExpr._lit   s"    **,,11%888r?   r   c                :     |                                  j        | S r:   )rG   	_coalesce)r<   r   s     r=   r   zSQLExpr._coalesce   s    6t**,,6==r?   c                    d S r:   r;   rF   s    r=   _count_starzSQLExpr._count_star         r?   r   c                    d S r:   r;   r<   r   r   s      r=   _firstzSQLExpr._first   r   r?   c                    d S r:   r;   r   s      r=   _lastzSQLExpr._last   r   r?   	condition	otherwiseNativeExprT | Nonec                T    |                                                      |||          S r:   )rG   _when)r<   r   rT   r   s       r=   r   zSQLExpr._when   s(     **,,229eYOOOr?   r;   
descending
nulls_lastr   Sequence[str | NativeExprT]
rows_start
int | Nonerows_endr   Sequence[bool] | Noner   c                   d S r:   r;   )r<   r   r   r   r   r   r   r   s           r=   r   zSQLExpr._window_expression   s	     cr?   	func_name'Literal['sum', 'max', 'min', 'product']reverseboolc                    d fd}|S )	Nr@   r   r   rc   r7   rA   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   )rR   r   flagsr   r   r<   s     r=   rZ   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   r<   s    `@r=   r^   z&SQLExpr._cum_window_func.<locals>.func   sd      V_)=)=>>E       !DHH   r?   r   r;   )r<   r   r   r^   s   ``` r=   _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   rc   r7   rA   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   rQ   )rR   r   func_r   r<   window_kwargss     r=   rZ   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   r<   startsupported_funcss      @@r=   r^   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   r;   )r<   r   r   r   r   r   half	remainderr^   r   r   r   s   `` ``    @@@r=   _rolling_window_funczSQLExpr._rolling_window_func   s     877 	!O)D$qA-IY&'ECC!Ao&EC"	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	H r?   objTypeIs[Self]c                "    t          |d          S )N__narwhals_expr__)hasattr)clsr   s     r=   rO   zSQLExpr._is_expr2  s    s/000r?   tuple[int, ...]c                4    | j                                         S r:   )r-   _backend_versionrF   s    r=   r   zSQLExpr._backend_version6  s    #44666r?   c                   d S r:   r;   )r   r   r   s      r=   _alias_nativezSQLExpr._alias_native:  s    LOCr?   .Callable[[Iterable[NativeExprT]], NativeExprT]exprsc                    dfd}dfd}d	         } | ||t           t           |j        |j        
          S )Nr@   r   r7   rA   c                :      fdD             } |          gS )Nc              3  8   K   | ]} |          D ]}|V  d S r:   r;   )rR   _exprcolr@   s      r=   	<genexpr>zHSQLExpr._from_elementwise_horizontal_op.<locals>.call.<locals>.<genexpr>B  s8      @@EeeBii@@sC@@@@@@@r?   r;   )r@   colsr   r^   s   ` r=   r2   z5SQLExpr._from_elementwise_horizontal_op.<locals>.callA  s-    @@@@U@@@DDJJ<r?   rb   rc   c                >      fdD             } |          gS )Nc              3  N   K   | ]}|                               D ]}|V   d S r:   )r3   )rR   r   r   r@   rb   s      r=   r   zSSQLExpr._from_elementwise_horizontal_op.<locals>.window_function.<locals>.<genexpr>H  sX        %2G2GM2Z2Z +.      r?   r;   )r@   rb   r   r   r^   s   `` r=   r3   z@SQLExpr._from_elementwise_horizontal_op.<locals>.window_functionE  sD        !&  D DJJ<r?   r   )r3   r4   r5   r6   r1   r@   r   r7   rA   ri   )r   r   r,   r-   )r   r^   r   r2   r3   contexts    ``   r=   _from_elementwise_horizontal_opz'SQLExpr._from_elementwise_horizontal_op=  s    	  	  	  	  	  	  	 	  	  	  	  	  	  	  (s+"?"G95A$"2
 
 
 	
r?   c                P    | j         J | 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().
        )r.   expansion_kindis_multi_unnamedrF   s    r=   _is_multi_output_unnamedz SQLExpr._is_multi_output_unnamedW  s)     ~)))~,==???r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__eq__r   rw   s     r=   r   z SQLExpr.__eq__.<locals>.<lambda>g      T[[5G5G r?   rz   r<   rw   s     r=   r   zSQLExpr.__eq__f        !G!GOOOr?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__ne__r   s     r=   r   z SQLExpr.__ne__.<locals>.<lambda>j  r   r?   r   r   s     r=   r  zSQLExpr.__ne__i  r   r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__add__r   s     r=   r   z!SQLExpr.__add__.<locals>.<lambda>m      T\\%5H5H r?   r   r   s     r=   r  zSQLExpr.__add__l        !H!H%PPPr?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__sub__r   s     r=   r   z!SQLExpr.__sub__.<locals>.<lambda>p  r  r?   r   r   s     r=   r	  zSQLExpr.__sub__o  r  r?   c                V    |                      d |                              d          S )Nc                    || z
  S r:   r;   r   s     r=   r   z"SQLExpr.__rsub__.<locals>.<lambda>s  
    UT\ r?   literalrz   aliasr   s     r=   __rsub__zSQLExpr.__rsub__r  +      !A!A5IIOOPYZZZr?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__mul__r   s     r=   r   z!SQLExpr.__mul__.<locals>.<lambda>v  r  r?   r   r   s     r=   r  zSQLExpr.__mul__u  r  r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__truediv__r   s     r=   r   z%SQLExpr.__truediv__.<locals>.<lambda>y  s    T5E5Ee5L5L r?   r   r   s     r=   r  zSQLExpr.__truediv__x  s      !L!LeTTTr?   c                V    |                      d |                              d          S )Nc                    || z  S r:   r;   r   s     r=   r   z&SQLExpr.__rtruediv__.<locals>.<lambda>|  r  r?   r  r  r   s     r=   __rtruediv__zSQLExpr.__rtruediv__{  r  r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__pow__r   s     r=   r   z!SQLExpr.__pow__.<locals>.<lambda>  r  r?   r   r   s     r=   r  zSQLExpr.__pow__~  r  r?   c                V    |                      d |                              d          S )Nc                    || z  S r:   r;   r   s     r=   r   z"SQLExpr.__rpow__.<locals>.<lambda>  s
    UD[ r?   r  r  r   s     r=   __rpow__zSQLExpr.__rpow__  s*      !@!@%HHNNyYYYr?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__mod__r   s     r=   r   z!SQLExpr.__mod__.<locals>.<lambda>  r  r?   r   r   s     r=   r#  zSQLExpr.__mod__  r  r?   c                V    |                      d |                              d          S )Nc                    || z  S r:   r;   r   s     r=   r   z"SQLExpr.__rmod__.<locals>.<lambda>  r  r?   r  r  r   s     r=   __rmod__zSQLExpr.__rmod__  r  r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__ge__r   s     r=   r   z SQLExpr.__ge__.<locals>.<lambda>  r   r?   r   r   s     r=   r)  zSQLExpr.__ge__  r   r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__gt__r   s     r=   r   z SQLExpr.__gt__.<locals>.<lambda>  r   r?   r   r   s     r=   r,  zSQLExpr.__gt__  r   r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__le__r   s     r=   r   z SQLExpr.__le__.<locals>.<lambda>  r   r?   r   r   s     r=   r/  zSQLExpr.__le__  r   r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__lt__r   s     r=   r   z SQLExpr.__lt__.<locals>.<lambda>  r   r?   r   r   s     r=   r2  zSQLExpr.__lt__  r   r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__and__r   s     r=   r   z!SQLExpr.__and__.<locals>.<lambda>  r  r?   r   r   s     r=   r5  zSQLExpr.__and__  r  r?   c                0    |                      d |          S )Nc                ,    |                      |          S r:   )__or__r   s     r=   r   z SQLExpr.__or__.<locals>.<lambda>  r   r?   r   r   s     r=   r8  zSQLExpr.__or__  r   r?   c                >     d fd}                      ||          S )Nr   r   rw   r7   c                                         |                    d          k    t          j        | |                              d                     S Nr   r   rQ   rv   floordivr   rw   r<   s     r=   r^   z"SQLExpr.__floordiv__.<locals>.func  sE    ::1%r{4'?'?4  r?   ry   r   r   rw   r   r7   r   r   r<   rw   r^   s   `  r=   __floordiv__zSQLExpr.__floordiv__  s<    	 	 	 	 	 	
   U 333r?   c                d     d fd}                      ||                              d          S )	Nr   r   rw   r7   c                                         |                     d          k    t          j        ||                               d                     S r;  r<  r>  s     r=   r^   z#SQLExpr.__rfloordiv__.<locals>.func  sE    ::		!$bk%&>&>		$  r?   ry   r  r?  r  r@  s   `  r=   __rfloordiv__zSQLExpr.__rfloordiv__  sJ    	 	 	 	 	 	
   U 3399)DDDr?   c                H     d fd}d fd
}                      ||          S )Nr   r   r7   c                ~                                             d|                               d                    S )Nbool_andTr   r   rQ   r   r<   s    r=   fzSQLExpr.all.<locals>.f  s/    >>$..T"B"BDIIdOOTTTr?   r@   r   r   rc   rA   c                6    fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )rG  Tr   r   r   r   rQ   r   s     r=   rZ   z1SQLExpr.all.<locals>.window_f.<locals>.<listcomp>  sq         ++z488&:M  IIdOO	   r?   r;   r   s    `r=   rh   zSQLExpr.all.<locals>.window_f  >         !DHH   r?   r   r   r7   r   r   rr   r<   rJ  rh   s   `  r=   allzSQLExpr.all  ]    	U 	U 	U 	U 	U 	U	 	 	 	 	 	 ""1h///r?   c                H     d fd}d fd
}                      ||          S )Nr   r   r7   c                ~                                             d|                               d                    S )Nbool_orFrH  rI  s    r=   rJ  zSQLExpr.any.<locals>.f  s1    >>$..D"A"A499UCSCSTTTr?   r@   r   r   rc   rA   c                6    fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )rV  FrM  r   s     r=   rZ   z1SQLExpr.any.<locals>.window_f.<locals>.<listcomp>  ss         ++y$779L  IIe$$	   r?   r;   r   s    `r=   rh   zSQLExpr.any.<locals>.window_f  rN  r?   rO  r   rP  rQ  s   `  r=   anyzSQLExpr.any  rS  r?   c                4                            fd          S )Nc                0                         d|           S )Nmaxr   rI  s    r=   r   zSQLExpr.max.<locals>.<lambda>      ud0K0K r?   rP  rF   s   `r=   r\  zSQLExpr.max  !    ""#K#K#K#KLLLr?   c                4                            fd          S )Nc                0                         d|           S )Nr   r]  rI  s    r=   r   zSQLExpr.mean.<locals>.<lambda>      vt0L0L r?   rP  rF   s   `r=   r   zSQLExpr.mean  s!    ""#L#L#L#LMMMr?   c                4                            fd          S )Nc                0                         d|           S )Nmedianr]  rI  s    r=   r   z SQLExpr.median.<locals>.<lambda>  s    x0N0N r?   rP  rF   s   `r=   re  zSQLExpr.median  s!    ""#N#N#N#NOOOr?   float | Nonec                >     d fd}                      |          S )Nr   r   r7   c                                                             d|                                         |           S )Nisnan)r   r   rQ   )r   r<   rT   s    r=   	_fill_nanz#SQLExpr.fill_nan.<locals>._fill_nan  s3    ::dnnWd;;TYYu=M=MtTTTr?   rO  ru   )r<   rT   rj  s   `` r=   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minr]  rI  s    r=   r   zSQLExpr.min.<locals>.<lambda>  r^  r?   rP  rF   s   `r=   ro  zSQLExpr.min  r_  r?   c                4                            fd          S )Nc                0                         d|           S )Nr   r]  rI  s    r=   r   zSQLExpr.count.<locals>.<lambda>  s    w0M0M r?   rP  rF   s   `r=   r   zSQLExpr.count  s!    ""#M#M#M#MNNNr?   c                H     d fd}d fd
}                      ||          S )Nr   r   r7   c                ~                                             d|                               d                    S )Nr   r   rH  rI  s    r=   rJ  zSQLExpr.sum.<locals>.f  s/    >>$.."="=tyy||LLLr?   r@   r   r   rc   rA   c                6    fd |           D             S )Nc           
         g | ]X}                                                             d |          j                                      d                    YS )r   r   rM  r   s     r=   rZ   z1SQLExpr.sum.<locals>.window_f.<locals>.<listcomp>  sq         ++ud33V5H  IIaLL	   r?   r;   r   s    `r=   rh   zSQLExpr.sum.<locals>.window_f  rN  r?   rO  r   rP  rQ  s   `  r=   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   r7   c                    t          j         d|            d                     d|                                         S )Ncount_distinctr\  r   )rv   addr   )r   Foner<   zeros    r=   r^   zSQLExpr.n_unique.<locals>.func   sR    6"D))%AAh$5$5sDAABB  r?   r@   r   r   rc   rA   c                >    fd |           D             S )Nc                    g | ]h}t          j          d |          j                    d                     d|                              j                            iS )rx  r\  r   )rv   ry  r   r   )rR   r   rz  Wr   r{  r<   r|  s     r=   rZ   z6SQLExpr.n_unique.<locals>.window_f.<locals>.<listcomp>	  s     	 	 	  Aaa($//1DEEA%AAh,=,=sD!I!IJJ+  	 	 	r?   r;   )r@   r   rz  r  r{  r<   r|  s    `r=   rh   z"SQLExpr.n_unique.<locals>.window_f  sR    	 	 	 	 	 	 	 	 	 !DHH	 	 	 	r?   rO  r   )r   r   rQ   rr   )r<   r^   rh   rz  r  r{  r|  s   `  @@@@r=   n_uniquezSQLExpr.n_unique  s    N#IIaLL$))A,,	c	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 ""4222r?   c                4                            fd          S )Nc                0                         d|           S )Nabsr]  rI  s    r=   r   zSQLExpr.abs.<locals>.<lambda>      4>>%3N3N r?   rk  rF   s   `r=   r  zSQLExpr.abs  !    %%&N&N&N&NOOOr?   lower_bound.Self | NumericLiteral | TemporalLiteral | Noneupper_boundc                     d fd}d fd}d fd	}|                      ||
          S |                      ||          S                       |||          S )Nr   r   r  r   r7   c                2                         d| |          S )Ngreatestr]  )r   r  r<   s     r=   _clip_lowerz!SQLExpr.clip.<locals>._clip_lower  s    >>*dK@@@r?   r  c                2                         d| |          S )Nleastr]  )r   r  r<   s     r=   _clip_upperz!SQLExpr.clip.<locals>._clip_upper"  s    >>'4===r?   c                \                         d                     d| |          |          S )Nr  r  r]  )r   r  r  r<   s      r=   
_clip_bothz SQLExpr.clip.<locals>._clip_both%  s2     >>DNN7D+FF  r?   )r  )r  )r  r  )r   r   r  r   r7   r   )r   r   r  r   r7   r   )r   r   r  r   r  r   r7   r   rk  )r<   r  r  r  r  r  s   `     r=   clipzSQLExpr.clip  s    
	A 	A 	A 	A 	A 	A	> 	> 	> 	> 	> 	>	 	 	 	 	 	 ))+;)OOO))+;)OOO%%K[ & 
 
 	
r?   c                4                            fd          S )Nc                0                         d|           S )Nr   r]  rI  s    r=   r   z!SQLExpr.is_null.<locals>.<lambda>5  s    4>>(D3Q3Q r?   rk  rF   s   `r=   is_nullzSQLExpr.is_null4  s!    %%&Q&Q&Q&QRRRr?   decimalsc                8                            fd          S )Nc                X                         d|                                         S )Nround)r   rQ   )r   r  r<   s    r=   r   zSQLExpr.round.<locals>.<lambda>9  s#    tyy7J7JKK r?   rk  )r<   r  s   ``r=   r  zSQLExpr.round7  s+    %%KKKKK
 
 	
r?   c                4                            fd          S )Nc                0                         d|           S )Nfloorr]  rI  s    r=   r   zSQLExpr.floor.<locals>.<lambda>=  s    4>>'43P3P r?   rk  rF   s   `r=   r  zSQLExpr.floor<  s!    %%&P&P&P&PQQQr?   c                4                            fd          S )Nc                0                         d|           S )Nceilr]  rI  s    r=   r   zSQLExpr.ceil.<locals>.<lambda>@  s    4>>&$3O3O r?   rk  rF   s   `r=   r  zSQLExpr.ceil?  s!    %%&O&O&O&OPPPr?   c                :     d fd}                      |          S )Nr   r   r7   c                                         |                     d          k                         t          d                                        d|                     S )Nr   nansqrt)r   rQ   floatr   rI  s    r=   _sqrtzSQLExpr.sqrt.<locals>._sqrtC  sP    ::tyy||#TYYuU||%<%<dnnVUY>Z>Z  r?   rO  rk  )r<   r  s   ` r=   r  zSQLExpr.sqrtB  s7    	 	 	 	 	 	
 %%e,,,r?   c                4                            fd          S )Nc                0                         d|           S )Nexpr]  rI  s    r=   r   zSQLExpr.exp.<locals>.<lambda>K  r  r?   rk  rF   s   `r=   r  zSQLExpr.expJ  r  r?   baser  c                >     d fd}                      |          S )Nr   r   r7   c                   j         }                    |                     d          k                         t          d                                        |                     d          k                        t          d                    t	          j         |d|            |d                                                                      S )Nr   r  z-inflog)r   r   rQ   r  rv   truediv)r   rz  r  r<   s     r=   _logzSQLExpr.log.<locals>._logN  s    A::tyy||#		%,,''

DIIaLL(IIeFmm,,Jqq~~qq		$/H/HII   r?   rO  rk  )r<   r  r  s   `` r=   r  zSQLExpr.logM  s=    
	 
	 
	 
	 
	 
	 
	 %%d+++r?   c               V    |                      |                     d|                    S )Nr   r   ro   r   r<   r   s     r=   cum_sumzSQLExpr.cum_sum]  )    ))$*?*?w*?*W*WXXXr?   c               V    |                      |                     d|                    S )Nr\  r  r  r  s     r=   cum_maxzSQLExpr.cum_max`  r  r?   c               V    |                      |                     d|                    S )Nro  r  r  r  s     r=   cum_minzSQLExpr.cum_minc  r  r?   c               >     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                ~    t          t          j                            fd |           D             S )Nc           
         g | ];}                                         d |          j        j        d          <S )r   r   r   r   r   r   r   rR   r   r   r   r<   s     r=   rZ   z3SQLExpr.cum_count.<locals>.func.<locals>.<listcomp>k  se     
 
 
  ''NN7D11'O$$ (  
 
 
r?   r   )r@   r   r   r   r<   s    `@r=   r^   zSQLExpr.cum_count.<locals>.funcg  s_      V_)=)=>>E
 
 
 
 
 
 !DHH
 
 
 
r?   r   ro   )r<   r   r^   s   `` r=   	cum_countzSQLExpr.cum_countf  s=    	 	 	 	 	 	 	  ))$///r?   c               V    |                      |                     d|                    S )Nproductr  r  r  s     r=   cum_prodzSQLExpr.cum_prody  s0    ))!!)W!==
 
 	
r?   c               Z    |                      |                     d|||                    S )Nr   r   ro   r   r<   r   r   r   s       r=   rolling_sumzSQLExpr.rolling_sum  s4    ))%%e[+f%UU
 
 	
r?   c               Z    |                      |                     d|||                    S )Nr   r  r  r  s       r=   rolling_meanzSQLExpr.rolling_mean  s4    ))%%fk;v%VV
 
 	
r?   c          	     \    |                      |                     d||||                    S )Nr   r   r   r  r<   r   r   r   r   s        r=   rolling_varzSQLExpr.rolling_var  ?     ))%%{Kd6 &  
 
 	
r?   c          	     \    |                      |                     d||||                    S )Nr   r  r  r  s        r=   rolling_stdzSQLExpr.rolling_std  r  r?   c                :     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                X    j         j        fd |           D             S )Nc                x    g | ]6}t          j        |  d |          j        j                            7S lag)rv   subr   r   )rR   r   rz  r   windows     r=   rZ   z.SQLExpr.diff.<locals>.func.<locals>.<listcomp>  sR        tVVAAeTNNF4GYYZZ  r?   )r   r   )r@   r   rz  r  r<   s    `@@r=   r^   zSQLExpr.diff.<locals>.func  sT     A,F      DHH   r?   r   r  r<   r^   s   ` r=   diffzSQLExpr.diff  7    	 	 	 	 	 	 ))$///r?   nc                >     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                8    fd |           D             S )Nc           	     |    g | ]8}                                         d |          j        j                  9S r  r  )rR   r   r   r  r<   s     r=   rZ   z/SQLExpr.shift.<locals>.func.<locals>.<listcomp>  sW         ''NN5$22F4G   r?   r;   )r@   r   r  r<   s    `r=   r^   zSQLExpr.shift.<locals>.func  sC          !DHH	   r?   r   r  )r<   r  r^   s   `` r=   shiftzSQLExpr.shift  s=    	 	 	 	 	 	 	 ))$///r?   c                :     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                6    fd |           D             S )Nc                    g | ]R}                                         d           g j        |R j                                      d          k    SS )
row_numberr   r   r   r   r   rQ   r   s     r=   rZ   z;SQLExpr.is_first_distinct.<locals>.func.<locals>.<listcomp>  sv         ''NN<000f)0400O 
 99Q<<   r?   r;   r   s    `r=   r^   z'SQLExpr.is_first_distinct.<locals>.func  s>         !DHH   r?   r   r  r  s   ` r=   is_first_distinctzSQLExpr.is_first_distinct  s7    	 	 	 	 	 	 ))$///r?   c                :     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   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     r=   rZ   z:SQLExpr.is_last_distinct.<locals>.func.<locals>.<listcomp>  s     
 
 
  ''NN<000f)0400O$$ (   99Q<< 
 
 
r?   r   )r@   r   r   r<   s    `@r=   r^   z&SQLExpr.is_last_distinct.<locals>.func  s_      c&/&:&:;;E
 
 
 
 
 
 !DHH
 
 
 
r?   r   r  r  s   ` r=   is_last_distinctzSQLExpr.is_last_distinct  s7    	 	 	 	 	 	  ))$///r?   c                :     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                6    fd |           D             S )Nc                h    g | ].}                      j        |gj        R  j                  /S r;   )r   r   r   r   r   s     r=   rZ   z/SQLExpr.first.<locals>.func.<locals>.<listcomp>  sY         ''DK7v7779L   r?   r;   r   s    `r=   r^   zSQLExpr.first.<locals>.func  >         !DHH	   r?   r   r  r  s   ` r=   firstzSQLExpr.first  r  r?   c                :     d fd}                      |          S )	Nr@   r   r   rc   r7   rA   c                6    fd |           D             S )Nc                h    g | ].}                      j        |gj        R  j                  /S r;   )r   r   r   r   r   s     r=   rZ   z.SQLExpr.last.<locals>.func.<locals>.<listcomp>  sY         ''DJt6fo6668K   r?   r;   r   s    `r=   r^   zSQLExpr.last.<locals>.func  r  r?   r   r  r  s   ` r=   lastzSQLExpr.last  r  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>   r\  ro  averagerankdense
dense_rankr  r;   r   r   r   r   r   r   r7   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   r\  r   r  g       @r   )	r   r   r   rv   r  ry  rQ   r  r   )r   r   r   
count_exprr   count_window_kwargsr  rz  	rank_exprr^   r  r<   s            r=   _rankzSQLExpr.rank.<locals>._rank  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   r;   )r   r  r   s    r=   _unpartitioned_rankz)SQLExpr.rank.<locals>._unpartitioned_rank   s    5*5555r?   r@   r   r   rc   rA   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   )rR   r   r  r   r   s     r=   rZ   z;SQLExpr.rank.<locals>._partitioned_rank.<locals>.<listcomp>)  s=        dF/JGGG  r?   )r   NotImplementedError)r@   r   r   r  r   r<   s    ` r=   _partitioned_rankz'SQLExpr.rank.<locals>._partitioned_rank#  s`      /s)#...      DHH   r?   )r;   )r   r   r   r   r   r   r7   r   rO  r   )r   rr   )r<   r  r   r   r  r  r^   s   ```  @@r=   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 | NativeExprTr7   c                                                                         | g|R                               d          k    S )Nr   )r   r   rQ   )r   r   r<   s     r=   
_is_uniquez%SQLExpr.is_unique.<locals>._is_unique1  sK     **  ""T$9L$9$9 1 r?   c                     |           S r:   r;   )r   r	  s    r=   _unpartitioned_is_uniquez3SQLExpr.is_unique.<locals>._unpartitioned_is_unique8  s    :d###r?   r@   r   r   rc   rA   c                H    j         rJ fd |           D             S )Nc                ,    g | ]} |gj         R  S r;   r  )rR   r   r	  r   s     r=   rZ   zESQLExpr.is_unique.<locals>._partitioned_is_unique.<locals>.<listcomp>?  s.    PPPtJJt:f&9:::PPPr?   r   )r@   r   r	  r<   s    `r=   _partitioned_is_uniquez1SQLExpr.is_unique.<locals>._partitioned_is_unique;  s9     &&&PPPPPttBxxPPPPr?   )r   r   r   r  r7   r   rO  r   )rr   ro   )r<   r  r  r	  s   `  @r=   	is_uniquezSQLExpr.is_unique0  s    	 	 	 	 	 		$ 	$ 	$ 	$ 	$ 	$	Q 	Q 	Q 	Q 	Q 	Q 	Q ""#;<<RR"
 
 	
r?   Sequence[str]c                t     d fd}                      | j         j         j         j                  S )Nr@   r   r7   rA   c                L                         | t                              S r:   )r3   r   )r@   r   r   r<   s    r=   r^   zSQLExpr.over.<locals>.funcI  s#    ''Lx,P,PQQQr?   rm   r   )rn   r)   r+   r,   r-   )r<   r   r   r^   s   ``` r=   overzSQLExpr.overF  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 )NrY  z`Expr.mode(keep='z#')` is not implemented for backend z3

Hint: Use `nw.col(...).mode(keep='any')` instead.c                0                         d|           S )Nmoder]  rI  s    r=   r   zSQLExpr.mode.<locals>.<lambda>\  rb  r?   )r-   r  rr   )r<   r  r   s   `  r=   r  zSQLExpr.modeT  sj    5==DD D DTMa D D D  &c***""#L#L#L#LMMMr?   SQLExprStringNamespace[Self]c                    d S r:   r;   rF   s    r=   r   zSQLExpr.str_  s    363r?   SQLExprDateTimeNamesSpace[Self]c                    d S r:   r;   rF   s    r=   dtz
SQLExpr.dtb  s    58Sr?   r:   )r2   r&   r3   r/   r4   r(   r5   r*   r6   r   r1   r   r7   r8   r   )r7   rD   )r2   rH   rI   rJ   r7   r&   )r2   rH   rI   rJ   r7   r`   )r3   r`   r7   r   )r2   rH   rp   r/   rI   rJ   r7   r   )r2   rH   rI   rJ   r7   r   )rv   rH   rw   rJ   r7   r   )r^   r*   r7   r   )r7   r`   )r   r   r   r   r7   r   )rT   r   r7   r   rO  )r7   r   )r   r   r   r   r7   r   )r   r   rT   r   r   r   r7   r   )r;   r;   NN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   )r   r   r   r   r7   r`   )r   r   r   r   r   r   r   r   r   r   r7   r`   )r   rJ   r7   r   )r7   r   )r   r   r   r   r7   r   )r^   r   r   r   r7   r   )r7   r   )rw   r   r7   r   )r7   r   )rT   rf  r7   r   )r  r  r  r  r7   r   )r  r   r7   r   )r  r  r7   r   )r   r   r7   r   )r   r   r   r   r   r   r7   r   )
r   r   r   r   r   r   r   r   r7   r   )r  r   r7   r   )r  r"   r   r   r7   r   )r   r   r   r  r7   r   )r  r   r7   r   )r7   r  )r7   r  )a__name__
__module____qualname____annotations__r   DUCKDBr>   rC   rG   r_   rj   ro   rr   ru   rz   r   propertyr3   r   rQ   r   r   r   r   r   r   r   r   classmethodrO   r   r   r   r   r   r  r  r	  r  r  r  r  r  r   r#  r&  r)  r,  r/  r2  r5  r8  rA  rD  rR  rY  r\  r   re  rl  ro  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   
drop_nullsuniquer;   r?   r=   r%   r%   )   sV        11114444****####""""GGGG
 NR	 *8)>	 	 	 	 	 	   B B B B   $   2

 

 

 

 JN
 
 
 
 
 

 

 

 


 
 
 

 
 
 
$ 
< 
< 
< X
<D D D D9 9 9 9> > > > .---KKKKJJJJ )-	P P P P P 5702!%#
 -1,0
 
 
 
 
 
   :  7 7 7 7 7r 1 1 1 [1 7 7 7 X7 OOO [O
 
 
 [
2@ @ @ @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
 
 
 
4S S S S
 
 
 

R R R RQ Q Q Q- - - -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0 0 0 0:K :K :K :Kx
 
 
 
,
 
 
 
N N N N 666 X6888 X8 ""J_FFFr?   r%   )2
__future__r   operatorrv   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   collections.abcr   r   typing_extensionsr   r   r   narwhals._sql.expr_dtr   narwhals._sql.expr_strr   narwhals._sql.namespacer   narwhals.typingr   r    r!   r"   r#   r%   r;   r?   r=   <module>r5     sK   " " " " " "     B B B B B B B B B B B B B B - - - - - -              4 3 3 3 3 3        / . . . . . Q Q Q Q Q Q Q Q Q Q Q Q 22222222........EEEEEEEE999999??????======444444             } } } } }h}k12H]K=W4X } } } } }r?   