
    .i                    <   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/y)    )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<   	 dmej
                  d	 	 	 	 	 	 	 	 	 	 	 	 	 dndZdodZ	 	 dpdZ	 	 	 	 	 	 dqdZ		 	 	 	 	 	 drdZ
	 	 	 	 dsdZ	 dm	 	 	 	 	 	 	 dtdZ	 	 	 	 	 	 dudZdvdZdwdZedxd       ZdydZdzdZd{dZd|dZd}dZd}dZd~d Z	 dm	 	 	 	 	 	 	 dd!Z	 	 	 	 dddd"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd#Z	 	 	 	 	 	 dd$Z	 dm	 	 	 	 	 	 	 	 	 	 	 dd%Zedd&       Zedd'       Ze	 	 	 	 	 	 dd(       Z dd)Z!dd*Z"dd+Z#dd,Z$dd-Z%dd.Z&dd/Z'dd0Z(dd1Z)dd2Z*dd3Z+dd4Z,dd5Z-dd6Z.dd7Z/dd8Z0dd9Z1dd:Z2dd;Z3dd<Z4dd=Z5dd>Z6dd?Z7dd@Z8ddAZ9ddBZ:ddCZ;ddDZ<ddEZ=ddFZ>ddGZ?ddHZ@ddIZAddJZBddKZCddLZDddMZEddNZFddOZGddPZHddQZIddRZJddSZKddTZLddUZMddVZNddWZOddXZPddYZQddZZRdd[ZSdd\ZTdd]ZU	 	 	 	 	 	 	 	 	 	 dd^ZV	 	 	 	 	 	 	 	 	 	 dd_ZWdd`ZXddaZYddbZZddcZ[ddddZ\dddeZ]ddfZ^ddgZ_ddhZ`	 	 	 	 	 	 ddiZaddjZbeddk       Zceddl       Zd ee       Zf ee       Zg ee       Zhy)SQLExpr&EvalSeries[SQLLazyFrameT, NativeExprT]_callEvalNames[SQLLazyFrameT]_evaluate_output_namesAliasNames | None_alias_output_namesr   _versionr   _implementation1WindowFunction[SQLLazyFrameT, NativeExprT] | None_window_functionN)implementationc                    y N )selfcallwindow_functionevaluate_output_namesalias_output_namesversionr-   s          O/opt/house_gps_flutter/.venv/lib/python3.12/site-packages/narwhals/_sql/expr.py__init__zSQLExpr.__init__1   s         c                $    | j                  |      S r/   )r$   )r1   dfs     r7   __call__zSQLExpr.__call__<   s    zz"~r9   c                     y r/   r0   r1   s    r7   __narwhals_namespace__zSQLExpr.__narwhals_namespace__?   s    >Ar9   c                    d fd}|S )Nc                     |       }j                         D ci c]  \  }}|| j                  |       }}}|D cg c]  } |fi | c}S c c}}w c c}w r/   )items_evaluate_single_output_expr)	r;   native_series_listkeyvalueother_native_seriesnative_seriesr2   expressifiable_argsr1   s	         r7   funcz.SQLExpr._callable_to_eval_series.<locals>.funcF   s|    !%b #6";";"=#C R44U;;# # &8! ]:&9: 	#s   A A)r;   r   returnzlist[NativeExprT]r0   )r1   r2   rI   rJ   s   ``` r7   _callable_to_eval_seriesz SQLExpr._callable_to_eval_seriesC   s    		 r9   c               (     	 	 	 	 	 	 d fd}|S )Nc           	         	j                  | |      }j                         D ci c]  \  }}|| j                  ||       }}}|D cg c]  } |fi | c}S c c}}w c c}w r/   )r3   rB   _evaluate_window_expr)
r;   window_inputsrD   rE   rF   rG   rH   r2   rI   r1   s
          r7   window_fz4SQLExpr._push_down_window_function.<locals>.window_fV   s     "&!5!5b-!H #6";";"=#C R--e]CC# # &8! ]:&9: 	#s   AA$r;   r   rP   WindowInputs[NativeExprT]rK   Sequence[NativeExprT]r0   )r1   r2   rI   rQ   s   ``` r7   _push_down_window_functionz"SQLExpr._push_down_window_functionS   s'    		.G	"	$ r9   c                    | j                  | j                  || j                  | j                  | j                  | j
                        S Nr4   r5   r6   r-   )	__class__r$   r&   r(   r)   r*   )r1   r3   s     r7   _with_window_functionzSQLExpr._with_window_functionj   sF     ~~JJ"&"="=#77MM//  
 	
r9   c                   | j                   | j                  |fi ||| j                  | j                  | j                  | j
                        S rW   )rY   rL   r&   r(   r)   r*   )r1   r2   window_funcrI   s       r7   _with_callablezSQLExpr._with_callablev   sU     ~~)D))$F2EF"&"="=#77MM//  
 	
r9   c                   | j                   | j                  |fi | | j                  |fi || j                  | j                  | j
                  | j                        S rW   rY   rL   rU   r&   r(   r)   r*   )r1   r2   rI   s      r7   _with_elementwisezSQLExpr._with_elementwise   sh     ~~)D))$F2EF+D++DH4GH"&"="=#77MM//  
 	
r9   c                    | j                  | j                  ||      | j                  ||      | j                  | j                  | j
                  | j                        S )NotherrX   r_   )r1   oprc   s      r7   _with_binaryzSQLExpr._with_binary   s`    ~~))"E):++Be+<"&"="=#77MM//  
 	
r9   c                   | j                   d n	nfd} t        |       | j                  | j                  | j                  || j
                  | j                        S )Nc                       |             S r/   r0   )output_namescurrent_alias_output_namesrJ   s    r7   <lambda>z2SQLExpr._with_alias_output_names.<locals>.<lambda>   s    d+El+S&T r9   rX   )r(   typer$   r,   r&   r)   r*   )r1   rJ   r5   ri   s    ` @r7   _with_alias_output_namesz SQLExpr._with_alias_output_names   sq    %)%=%=" |  *1 T 	 tDzJJ!!"&"="=1MM//
 	
r9   c                <     	 	 	 	 	 	 d fd} j                   xs |S )Nc                    |j                   rJ  |       D cg c]  }j                  ||j                          c}S c c}w r/   )order_by_window_expressionpartition_byr;   inputsexprr1   s      r7   default_window_funcz4SQLExpr.window_function.<locals>.default_window_func   sG     &&OSTVxGK''f.A.AB  s   #A r;   r   rs   rS   rK   rT   )r,   )r1   ru   s   ` r7   r3   zSQLExpr.window_function   s4    		'@	"	 $$;(;;r9   c                D     | j                         j                  |g| S r/   )r?   	_function)r1   nameargss      r7   rx   zSQLExpr._function   s#    6t**,66tCdCCr9   c                @    | j                         j                  |      S r/   )r?   _lit)r1   rF   s     r7   r|   zSQLExpr._lit   s    **,11%88r9   c                <     | j                         j                  | S r/   )r?   	_coalesce)r1   rt   s     r7   r~   zSQLExpr._coalesce   s    6t**,66==r9   c                     y r/   r0   r>   s    r7   _count_starzSQLExpr._count_star       r9   c                     y r/   r0   r1   rt   ro   s      r7   _firstzSQLExpr._first   r   r9   c                     y r/   r0   r   s      r7   _lastzSQLExpr._last   r   r9   c                    y r/   r0   )r1   rt   ignore_nullss      r7   
_any_valuezSQLExpr._any_value   r   r9   c                D    | j                         j                  |||      S r/   )r?   _when)r1   	conditionrF   	otherwises       r7   r   zSQLExpr._when   s"     **,229eYOOr9   
descending
nulls_lastc                    y r/   r0   )r1   rt   rq   ro   
rows_startrows_endr   r   s           r7   rp   zSQLExpr._window_expression   s     r9   c               (     	 	 	 	 	 	 d fd}|S )Nc                ,   t        t        |j                              } |       D cg c]^  }j                  j	                  d|       j                  j	                  |      |j                  |j                  ||d            ` c}S c c}w )Nisnullr   r   r   r   )r   lenro   r   rx   rp   rq   )r;   rs   flagsrt   	func_namereverser1   s       r7   rJ   z&SQLExpr._cum_window_func.<locals>.func   s      V__)=>E !H  

^^Hd33++y$7++#(#(!" , 
  s   A#Brv   r0   )r1   r   r   rJ   s   ``` r7   _cum_window_funczSQLExpr._cum_window_func   s'    		'@	"	& r9   c                   	
 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   c                   dv r}n\dk(  rdk(  rd}nOdv rdk(  rd}nCdk(  rdk(  rd}n6dk(  rdk(  rd	}n)d
v rd d}t        |      d d d}t        |      |j                  |j                  d} 
|       D cg c]h  }
j                   
j                  
j                  d|      fi |
j                  	      k\   
j                  
j                  ||      fi |      j c}S c c}w )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: )rq   ro   r   r   count)
ValueErrorrq   ro   r   rp   rx   r|   )r;   rs   func_msgwindow_kwargsrt   ddofendr   min_samplesr1   startsupported_funcss         r7   rJ   z*SQLExpr._rolling_window_func.<locals>.func  sM    O+&e#	!e#	"e#	$e#	%n,ST]S^^_` o%D_DUU]^g]hhij o% & 3 3"OO#	"M !H	  

+D++w59F yy-. ,D++DNN5$,GY=Y	 	 	s   
A-C:rv   r0   )r1   r   window_sizer   r   centerhalf	remainderrJ   r   r   r   s   `` ``    @@@r7   _rolling_window_funczSQLExpr._rolling_window_func   sv     8!O)D$qA-IY&'EC!Ao&EC"	"	'@"	""	 "	H r9   c                6    | j                   j                         S r/   )r*   _backend_versionr>   s    r7   r   zSQLExpr._backend_version,  s    ##4466r9   c                    y r/   r0   )clsrt   ry   s      r7   _alias_nativezSQLExpr._alias_native0  s    LOr9   c                    dfd}	 	 	 	 	 	 dfd}d   } | ||t         t         |j                  |j                        S )Nc           	     \     D cg c]  } ||       D ]  }|  c}}      gS c c}}w r/   r0   )r;   rt   eexprsrJ   s      r7   r2   z5SQLExpr._from_elementwise_horizontal_op.<locals>.call7  s/    @tBx@!!@!@ABB@s   (
c                r    D cg c]  }|j                  | |      D ]  }|  }}} |      gS c c}}w r/   )r3   )r;   rP   rt   r   lstr   rJ   s        r7   r3   z@SQLExpr._from_elementwise_horizontal_op.<locals>.window_function:  sC     "'X0D0DR0WX11X1XCXI; Ys    3r   )r3   r4   r5   r6   r-   r;   r   rK   rT   rR   )r   r   r)   r*   )r   rJ   r   r2   r3   contexts    ``   r7   _from_elementwise_horizontal_opz'SQLExpr._from_elementwise_horizontal_op3  sf    	C		.G	"	 (+"?"G95A$$"22
 	
r9   c                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().
        )	_metadataexpansion_kindis_multi_unnamedr>   s    r7   _is_multi_output_unnamedz SQLExpr._is_multi_output_unnamedJ  s     ~~,,==??r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__eq__rt   rc   s     r7   rj   z SQLExpr.__eq__.<locals>.<lambda>Y      T[[5G r9   re   r1   rc   s     r7   r   zSQLExpr.__eq__X        !GOOr9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__ne__r   s     r7   rj   z SQLExpr.__ne__.<locals>.<lambda>\  r   r9   r   r   s     r7   r   zSQLExpr.__ne__[  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__add__r   s     r7   rj   z!SQLExpr.__add__.<locals>.<lambda>_      T\\%5H r9   r   r   s     r7   r   zSQLExpr.__add__^        !H%PPr9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__sub__r   s     r7   rj   z!SQLExpr.__sub__.<locals>.<lambda>b  r   r9   r   r   s     r7   r   zSQLExpr.__sub__a  r   r9   c                F    | j                  d |      j                  d      S )Nc                    || z
  S r/   r0   r   s     r7   rj   z"SQLExpr.__rsub__.<locals>.<lambda>e  
    UT\ r9   literalre   aliasr   s     r7   __rsub__zSQLExpr.__rsub__d  "      !A5IOOPYZZr9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__mul__r   s     r7   rj   z!SQLExpr.__mul__.<locals>.<lambda>h  r   r9   r   r   s     r7   r   zSQLExpr.__mul__g  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__truediv__r   s     r7   rj   z%SQLExpr.__truediv__.<locals>.<lambda>k  s    T5E5Ee5L r9   r   r   s     r7   r   zSQLExpr.__truediv__j  s      !LeTTr9   c                F    | j                  d |      j                  d      S )Nc                    || z  S r/   r0   r   s     r7   rj   z&SQLExpr.__rtruediv__.<locals>.<lambda>n  r   r9   r   r   r   s     r7   __rtruediv__zSQLExpr.__rtruediv__m  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__pow__r   s     r7   rj   z!SQLExpr.__pow__.<locals>.<lambda>q  r   r9   r   r   s     r7   r   zSQLExpr.__pow__p  r   r9   c                F    | j                  d |      j                  d      S )Nc                    || z  S r/   r0   r   s     r7   rj   z"SQLExpr.__rpow__.<locals>.<lambda>t  s
    UD[ r9   r   r   r   s     r7   __rpow__zSQLExpr.__rpow__s  s!      !@%HNNyYYr9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__mod__r   s     r7   rj   z!SQLExpr.__mod__.<locals>.<lambda>w  r   r9   r   r   s     r7   r   zSQLExpr.__mod__v  r   r9   c                F    | j                  d |      j                  d      S )Nc                    || z  S r/   r0   r   s     r7   rj   z"SQLExpr.__rmod__.<locals>.<lambda>z  r   r9   r   r   r   s     r7   __rmod__zSQLExpr.__rmod__y  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__ge__r   s     r7   rj   z SQLExpr.__ge__.<locals>.<lambda>}  r   r9   r   r   s     r7   r   zSQLExpr.__ge__|  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__gt__r   s     r7   rj   z SQLExpr.__gt__.<locals>.<lambda>  r   r9   r   r   s     r7   r  zSQLExpr.__gt__  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__le__r   s     r7   rj   z SQLExpr.__le__.<locals>.<lambda>  r   r9   r   r   s     r7   r  zSQLExpr.__le__  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__lt__r   s     r7   rj   z SQLExpr.__lt__.<locals>.<lambda>  r   r9   r   r   s     r7   r  zSQLExpr.__lt__  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__and__r   s     r7   rj   z!SQLExpr.__and__.<locals>.<lambda>  r   r9   r   r   s     r7   r
  zSQLExpr.__and__  r   r9   c                (    | j                  d |      S )Nc                $    | j                  |      S r/   )__or__r   s     r7   rj   z SQLExpr.__or__.<locals>.<lambda>  r   r9   r   r   s     r7   r  zSQLExpr.__or__  r   r9   c                6     d fd} j                  ||      S )Nc                    j                  |j                  d      k7  t        j                  | |      j                  d             S Nr   r   r|   rd   floordivrt   rc   r1   s     r7   rJ   z"SQLExpr.__floordiv__.<locals>.func  s;    ::1%r{{4'?4 r9   rb   rt   r   rc   r   rK   r   r   r1   rc   rJ   s   `  r7   __floordiv__zSQLExpr.__floordiv__  s     	
   U 33r9   c                T     d fd} j                  ||      j                  d      S )Nc                    j                  | j                  d      k7  t        j                  ||       j                  d             S r  r  r  s     r7   rJ   z#SQLExpr.__rfloordiv__.<locals>.func  s;    ::		!$bkk%&>		$ r9   rb   r   r  r   r  s   `  r7   __rfloordiv__zSQLExpr.__rfloordiv__  s+    	
   U 399)DDr9   c                L     d fd}	 	 	 	 	 	 d fd} j                  ||      S )Nc                f    j                  j                  d|       j                  d            S Nbool_andTr~   rx   r|   rt   r1   s    r7   fzSQLExpr.all.<locals>.f  s'    >>$..T"BDIIdOTTr9   c                     |       D cg c]M  }j                  j                  j                  d|      |j                        j	                  d            O c}S c c}w r  r~   rp   rx   rq   r|   rr   s      r7   rQ   zSQLExpr.all.<locals>.window_f  se     !H  ++z48&:M:M IIdO	     AA!rt   r   rK   r   rv   r]   r1   r   rQ   s   `  r7   allzSQLExpr.all  ;    	U		'@	"	 ""1h//r9   c                L     d fd}	 	 	 	 	 	 d fd} j                  ||      S )Nc                f    j                  j                  d|       j                  d            S Nbool_orFr  r  s    r7   r   zSQLExpr.any.<locals>.f  s(    >>$..D"A499UCSTTr9   c                     |       D cg c]M  }j                  j                  j                  d|      |j                        j	                  d            O c}S c c}w r+  r"  rr   s      r7   rQ   zSQLExpr.any.<locals>.window_f  sf     !H  ++y$79L9L IIe$	  r#  r$  rv   r%  r&  s   `  r7   anyzSQLExpr.any  r(  r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nmaxrx   r  s    r7   rj   zSQLExpr.max.<locals>.<lambda>      ud0K r9   r%  r>   s   `r7   r1  zSQLExpr.max      ""#KLLr9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nr   r2  r  s    r7   rj   zSQLExpr.mean.<locals>.<lambda>      vt0L r9   r%  r>   s   `r7   r   zSQLExpr.mean  s    ""#LMMr9   c               6     d fd} j                  |      S )Nc                F   dk(  rj                  d|       S dk(  rj                  d|       S j                  d|       }t        j                  j                  d|       j                  dt        j                  |d      t        j                  |      z              S )Nr   r   r   r   r   sqrtrx   rd   mulsubrt   	n_samplesr   r1   s     r7   rJ   zSQLExpr.std.<locals>.func  s    qy~~lD99qy~~mT::w5I66}d3vy!(<yRV@W'WX r9   r$  r%  r1   r   rJ   s   `` r7   r   zSQLExpr.std      		 ""4((r9   c               6     d fd} j                  |      S )Nc                &   dk(  rj                  d|       S dk(  rj                  d|       S j                  d|       }t        j                  j                  d|       t        j                  |d      t        j                  |      z        S )Nr   r   r   r   r   r;  r>  s     r7   rJ   zSQLExpr.var.<locals>.func  s    qy~~i66qy~~j$77w5I66z40y!$rvvi'>> r9   r$  r%  r@  s   `` r7   r   zSQLExpr.var  rA  r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nmedianr2  r  s    r7   rj   z SQLExpr.median.<locals>.<lambda>  s    x0N r9   r%  r>   s   `r7   rF  zSQLExpr.median  s    ""#NOOr9   c                6     d fd} j                  |      S )Nc                h    j                  j                  d|       j                        |       S )Nisnan)r   rx   r|   )rt   r1   rF   s    r7   	_fill_nanz#SQLExpr.fill_nan.<locals>._fill_nan  s*    ::dnnWd;TYYu=MtTTr9   r$  r`   )r1   rF   rJ  s   `` r7   fill_nanzSQLExpr.fill_nan  s    	U %%i00r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nminr2  r  s    r7   rj   zSQLExpr.min.<locals>.<lambda>  r3  r9   r%  r>   s   `r7   rO  zSQLExpr.min  r4  r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nr   r2  r  s    r7   rj   zSQLExpr.count.<locals>.<lambda>  s    w0M r9   r%  r>   s   `r7   r   zSQLExpr.count  s    ""#MNNr9   c                L     d fd}	 	 	 	 	 	 d fd} j                  ||      S )Nc                f    j                  j                  d|       j                  d            S Nr   r   r  r  s    r7   r   zSQLExpr.sum.<locals>.f  s'    >>$.."=tyy|LLr9   c                    |j                   rJ  |       D cg c]M  }j                  j                  j                  d|      |j                        j                  d            O c}S c c}w rT  )ro   r~   rp   rx   rq   r|   rr   s      r7   rQ   zSQLExpr.sum.<locals>.window_f  st     && !H  ++ud3V5H5H IIaL	  s   AA/r$  rv   r%  r&  s   `  r7   r   zSQLExpr.sum  s;    	M		'@	"	 ""1h//r9   c                      j                    j                   j                  d       j                  d      cd fd}	 	 	 	 	 	 d fd} j                  ||      S )Nr   r   c                |    t        j                   d|        dj                   d|                         S Ncount_distinctr1  r   )rd   addr   )rt   Foner1   zeros    r7   rJ   zSQLExpr.n_unique.<locals>.func  s=    66"D)%Ah$5sDAB r9   c                     |       D cg c]`  }t        j                    d|      |j                          dj                   d|                  |j                              b c}S c c}w rX  )rd   rZ  rq   r   )r;   rs   rt   r[  Wr\  r1   r]  s      r7   rQ   z"SQLExpr.n_unique.<locals>.window_f  s{     !H	  a($/1D1DE%Ah,=sD!IJ++	 	 	s   A%A4r$  rv   )rx   rp   r|   r]   )r1   rJ   rQ   r[  r_  r\  r]  s   `  @@@@r7   n_uniquezSQLExpr.n_unique
  ss    NN##IIaL$))A,	c	 			'@	"	 	 ""422r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nabsr2  r  s    r7   rj   zSQLExpr.abs.<locals>.<lambda>'      4>>%3N r9   rK  r>   s   `r7   rc  zSQLExpr.abs&      %%&NOOr9   c                H     	 	 	 	 	 	 	 	 d fd} j                  |||      S )Nc                L    j                  dj                  d| |      |      S )Ngreatestleastr2  )rt   lower_boundupper_boundr1   s      r7   _clipzSQLExpr.clip.<locals>._clip*  s*     >>DNN7D+F r9   )rj  rk  )rt   r   rj  r   rk  r   rK   r   rK  )r1   rj  rk  rl  s   `   r7   clipzSQLExpr.clip)  sI    		,7	FQ		 %%{ & 
 	
r9   c                6     d fd} j                  ||      S )Nc                *    j                  d| |      S )Nrh  r2  )rt   rj  r1   s     r7   rl  z!SQLExpr.clip_lower.<locals>._clip6  s    >>*dK@@r9   )rj  )rt   r   rj  r   rK   r   rK  )r1   rj  rl  s   `  r7   
clip_lowerzSQLExpr.clip_lower5  s!    	A %%e%EEr9   c                6     d fd} j                  ||      S )Nc                *    j                  d| |      S )Nri  r2  )rt   rk  r1   s     r7   rl  z!SQLExpr.clip_upper.<locals>._clip<  s    >>'4==r9   )rk  )rt   r   rk  r   rK   r   rK  )r1   rk  rl  s   `  r7   
clip_upperzSQLExpr.clip_upper;  s     	> %%e%EEr9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nr   r2  r  s    r7   rj   z!SQLExpr.is_null.<locals>.<lambda>B  s    4>>(D3Q r9   rK  r>   s   `r7   is_nullzSQLExpr.is_nullA  s    %%&QRRr9   c                     t         j                        }|r|n j                  |       j                   fd      S )Nc                *    j                  d|       S )Nroundr2  )rt   round_decimalsr1   s    r7   rj   zSQLExpr.round.<locals>.<lambda>J  s    ~F r9   )r   r*   r|   r`   )r1   decimals_is_pre4rz  s   `  @r7   ry  zSQLExpr.roundD  s=     $D$8$89%-499X3F%%F
 	
r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nfloorr2  r  s    r7   rj   zSQLExpr.floor.<locals>.<lambda>N  s    4>>'43P r9   rK  r>   s   `r7   r  zSQLExpr.floorM  s    %%&PQQr9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nceilr2  r  s    r7   rj   zSQLExpr.ceil.<locals>.<lambda>Q  s    4>>&$3O r9   rK  r>   s   `r7   r  zSQLExpr.ceilP  s    %%&OPPr9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nsinr2  r  s    r7   rj   zSQLExpr.sin.<locals>.<lambda>T  rd  r9   rK  r>   s   `r7   r  zSQLExpr.sinS  re  r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Ncosr2  r  s    r7   rj   zSQLExpr.cos.<locals>.<lambda>W  rd  r9   rK  r>   s   `r7   r  zSQLExpr.cosV  re  r9   c                2     d fd} j                  |      S )Nc                    j                  | j                  d      k  j                  t        d            j                  d|             S )Nr   nanr:  )r   r|   floatrx   r  s    r7   _sqrtzSQLExpr.sqrt.<locals>._sqrtZ  sA    ::tyy|#TYYuU|%<dnnVUY>Z r9   r$  rK  )r1   r  s   ` r7   r:  zSQLExpr.sqrtY  s    	
 %%e,,r9   c                ,      j                   fd      S )Nc                (    j                  d|       S )Nexpr2  r  s    r7   rj   zSQLExpr.exp.<locals>.<lambda>b  rd  r9   rK  r>   s   `r7   r  zSQLExpr.expa  re  r9   c                6     d fd} j                  |      S )Nc                n   j                   }j                  | j                  d      k  j                  t        d            j                  | j                  d      k(  j                  t        d            t	        j
                   |d|        |dj                                                S )Nr   r  z-inflog)rx   r   r|   r  rd   truediv)rt   r[  baser1   s     r7   _logzSQLExpr.log.<locals>._loge  s    A::tyy|#		%,'

DIIaL(IIeFm,JJq~q		$/HI r9   r$  rK  )r1   r  r  s   `` r7   r  zSQLExpr.logd  s    
	 %%d++r9   c               F    | j                  | j                  d|            S )Nr   r   rZ   r   r1   r   s     r7   cum_sumzSQLExpr.cum_sumt  #    ))$*?*?w*?*WXXr9   c               F    | j                  | j                  d|            S )Nr1  r  r  r  s     r7   cum_maxzSQLExpr.cum_maxw  r  r9   c               F    | j                  | j                  d|            S )NrO  r  r  r  s     r7   cum_minzSQLExpr.cum_minz  r  r9   c               B     	 	 	 	 	 	 d fd} j                  |      S )Nc                    t        t        |j                              } |       D cg c]=  }j                  j	                  d|      |j
                  |j                  ||d      ? c}S c c}w )Nr   r   r   )r   r   ro   rp   rx   rq   )r;   rs   r   rt   r   r1   s       r7   rJ   zSQLExpr.cum_count.<locals>.func~  sy      V__)=>E !H
  ''NN7D1''OO$$ ( 
 
 
s   AA0rv   rZ   )r1   r   rJ   s   `` r7   	cum_countzSQLExpr.cum_count}  s3    		'@	"	  ))$//r9   c               F    | j                  | j                  d|            S )Nproductr  r  r  s     r7   cum_prodzSQLExpr.cum_prod  s(    ))!!)W!=
 	
r9   c               J    | j                  | j                  d|||            S )Nr   r   rZ   r   r1   r   r   r   s       r7   rolling_sumzSQLExpr.rolling_sum  s,    ))%%e[+f%U
 	
r9   c               J    | j                  | j                  d|||            S )Nr   r  r  r  s       r7   rolling_meanzSQLExpr.rolling_mean  s,    ))%%fk;v%V
 	
r9   c          	     L    | j                  | j                  d||||            S )Nr   r   r   r  r1   r   r   r   r   s        r7   rolling_varzSQLExpr.rolling_var  5     ))%%{Kd6 & 
 	
r9   c          	     L    | j                  | j                  d||||            S )Nr   r  r  r  s        r7   rolling_stdzSQLExpr.rolling_std  r  r9   c                >     	 	 	 	 	 	 d fd} j                  |      S )Nc                    j                   }j                  } |       D cg c];  }t        j                  | | |d|      |j                  |j
                              = c}S c c}w Nlag)rx   rp   rd   r=  rq   ro   )r;   rs   r[  windowrt   r1   s        r7   rJ   zSQLExpr.diff.<locals>.func  sc     A,,F !H tVAeTNF4G4GYZ  s   A A'rv   r  r1   rJ   s   ` r7   diffzSQLExpr.diff  s3    		'@	"	 ))$//r9   c                B     	 	 	 	 	 	 d fd} j                  |      S )Nc           
          |       D cg c]:  }j                  j                  d|      |j                  |j                        < c}S c c}w r  )rp   rx   rq   ro   )r;   rs   rt   nr1   s      r7   rJ   zSQLExpr.shift.<locals>.func  sT     !H	  ''NN5$2F4G4G  s   ?Arv   r  )r1   r  rJ   s   `` r7   shiftzSQLExpr.shift  s3    		'@	"	 ))$//r9   c                >     	 	 	 	 	 	 d fd} j                  |      S )Nc                     |       D cg c]O  }j                  j                  d      g |j                  ||j                        j	                  d      k(  Q c}S c c}w )N
row_numberr   )rp   rx   rq   ro   r|   rr   s      r7   rJ   z'SQLExpr.is_first_distinct.<locals>.func  sn     !H  ''NN<00f))040OO
 99Q<   s   AA#rv   r  r  s   ` r7   is_first_distinctzSQLExpr.is_first_distinct  s3    		'@	"	 ))$//r9   c                >     	 	 	 	 	 	 d fd} j                  |      S )Nc           
        t        dt        |j                              } |       D cg c]R  }j                  j	                  d      g |j
                  ||j                  ||      j                  d      k(  T c}S c c}w )NTr  r   r   )r   r   ro   rp   rx   rq   r|   )r;   rs   r   rt   r1   s       r7   rJ   z&SQLExpr.is_last_distinct.<locals>.func  s      c&//&:;E !H
  ''NN<00f))040OO$$ (  99Q< 
 
 
s   ABrv   r  r  s   ` r7   is_last_distinctzSQLExpr.is_last_distinct  s3    		'@	"	  ))$//r9   c                R     d fd}	 	 	 	 	 	 d fd} j                  ||      S )Nc                H    sd}t        |       j                  | g S Nz#Expected `order_by` to be specified)r   r   rt   r   ro   r1   s     r7   r   zSQLExpr.first.<locals>.f  s,    ;+C004;;t/h//r9   c           
        r|j                   rd}t        |      s|j                   sd}t        |       |       D cg c]=  }j                   j                  |g|j                   xs  |j                        ? c}S c c}w )Nz4Can't specify both `order_by` in `over` and `first`.z4Must specify `order_by` either in `over` or `first`.)ro   r   rp   r   rq   r;   rs   r   rt   ro   r1   s       r7   rQ   zSQLExpr.first.<locals>.window_f  s     FOOL+C00FOOL+C00
 !H	  ''DKKE(C8EvGZGZ     ABr$  rv   r%  r1   ro   r   rQ   s   ``  r7   firstzSQLExpr.first  s:    	0		'@	"	  ""1h//r9   c                R     d fd}	 	 	 	 	 	 d fd} j                  ||      S )Nc                H    sd}t        |       j                  | g S r  )r   r   r  s     r7   r   zSQLExpr.last.<locals>.f  s,    ;+C004::d.X..r9   c           
        r|j                   rd}t        |      s|j                   sd}t        |       |       D cg c]=  }j                   j                  |g|j                   xs  |j                        ? c}S c c}w )Nz3Can't specify both `order_by` in `over` and `last`.z3Must specify `order_by` either in `over` or `last`.)ro   r   rp   r   rq   r  s       r7   rQ   zSQLExpr.last.<locals>.window_f  s     FOOK+C00FOOK+C00
 !H	  ''DJJtDv'B(DfFYFY  r  r$  rv   r%  r  s   ``  r7   lastzSQLExpr.last
  s:    	/		'@	"	  ""1h//r9   c               0      j                   fd      S )Nc                *    j                  |       S )N)r   )r   )rt   r   r1   s    r7   rj   z#SQLExpr.any_value.<locals>.<lambda>%  s    LI r9   r%  )r1   r   s   ``r7   	any_valuezSQLExpr.any_value#  s    ""I
 	
r9   c                    dv r j                  d      n(dk(  r j                  d      n j                  d      	 d		 	 	 	 	 	 	 d
 fddfd}	 	 	 	 	 	 d fd} j                  ||      S )N>   r1  rO  averagerankdense
dense_rankr  c               :   j                         }|| f|gdgd}dg || i}j                  }j                  }
dk(  rHt        j                  t        j
                   |	fi | ||fi |      j                  d            }ny
dk(  rkt        j
                   |	fi |t        j                  t        j                   ||fi |j                  d            j                  d                  }n	 |	fi |}j                   |d|        |      S )	NT)rq   ro   r   r   rq   r1  r   r  g       @r   )	r   rp   rx   rd   r=  rZ  r|   r  r   )rt   rq   r   
count_exprr   count_window_kwargsr  r[  	rank_exprrJ   methodr1   s            r7   _rankzSQLExpr.rank.<locals>._rank0  s-    ))+J ,!G)l#f	-M 4BCX\CXSWCX2Y,,FAFFFFt5}5zA-@A IIaL	 9$FF41=1JJvjH4GH$))TU,W		#	 #49=9	::q400)<<r9   c                     |       S )Nr   r0   )rt   r  r   s    r7   _unpartitioned_rankz)SQLExpr.rank.<locals>._unpartitioned_rankT  s    *55r9   c                    |j                   rd}t        |       |       D cg c]  } ||j                         c}S c c}w )Nz[`rank` followed by `over` with `order_by` specified is not supported for SQL-like backends.r  )ro   NotImplementedErrorrq   )r;   rs   r   rt   r  r   r1   s       r7   _partitioned_rankz'SQLExpr.rank.<locals>._partitioned_rankW  sQ     s)#.. !H dF//JG  s   Ar0   )rt   r   rq   Sequence[str | NativeExprT]r   boolrK   r   r$  rv   )rx   r]   )r1   r  r   r  r  r  rJ   s   ```  @@r7   r  zSQLExpr.rank(  s    ..>>&)Dw>>,/D>>,/D 9;"	="	=5"	= 	"	=
 "	=H	6				'@		"		 ""#68IJJr9   c                     	 	 	 	 	 	 d fddfd}	 	 	 	 	 	 d fd} j                  |      j                  |      S )Nc                p    j                  j                         | g|      j                  d      k(  S )Nr   )rp   r   r|   )rt   rq   r1   s     r7   
_is_uniquez%SQLExpr.is_unique.<locals>._is_uniquee  s>     **  "T$9L$91 r9   c                     |       S r/   r0   )rt   r  s    r7   _unpartitioned_is_uniquez3SQLExpr.is_unique.<locals>._unpartitioned_is_uniquel  s    d##r9   c                x    |j                   rJ  |       D cg c]  } |g|j                    c}S c c}w r/   )ro   rq   )r;   rs   rt   r  r1   s      r7   _partitioned_is_uniquez1SQLExpr.is_unique.<locals>._partitioned_is_uniqueo  s:     &&GKBxPtJt:f&9&9:PPPs   7)rt   r   rq   zstr | NativeExprTrK   r   r$  rv   )r]   rZ   )r1   r  r  r  s   `  @r7   	is_uniquezSQLExpr.is_uniqued  sj    		.?			$	Q	Q'@	Q"	Q ""#;<RR"
 	
r9   c                     d fd} j                  | j                   j                   j                   j                        S )Nc                <    j                  | t                    S r/   )r3   r   )r;   ro   rq   r1   s    r7   rJ   zSQLExpr.over.<locals>.func}  s    ''Lx,PQQr9   rX   r   )rY   r&   r(   r)   r*   )r1   rq   ro   rJ   s   ``` r7   overzSQLExpr.overz  sF    	R ~~"&"="=#77MM//  
 	
r9   c               r     |dk7  rd| d j                    d}t        |       j                   fd      S )Nr.  z`Expr.mode(keep='z#')` is not implemented for backend z3

Hint: Use `nw.col(...).mode(keep='any')` instead.c                (    j                  d|       S )Nmoder2  r  s    r7   rj   zSQLExpr.mode.<locals>.<lambda>  r7  r9   )r*   r  r]   )r1   keepr   s   `  r7   r  zSQLExpr.mode  sP    5=#D6)LTMaMaLb cD D  &c**""#LMMr9   c                     y r/   r0   r>   s    r7   strzSQLExpr.str  s    36r9   c                     y r/   r0   r>   s    r7   dtz
SQLExpr.dt  s    58r9   r/   )r2   r#   r3   r+   r4   r%   r5   r'   r6   r   r-   r   rK   Noner   )rK   z3SQLNamespace[SQLLazyFrameT, Self, Any, NativeExprT])r2   Callable[..., NativeExprT]rI   r   rK   r#   )r2   r   rI   r   rK   *WindowFunction[SQLLazyFrameT, NativeExprT])r3   r  rK   r   )r2   r   r\   r+   rI   r   rK   r   )r2   r   rI   r   rK   r   )rd   r   rc   r   rK   r   )rJ   r'   rK   r   )rK   r  )ry   r  rz   zNativeExprT | PythonLiteralrK   r   )rF   r   rK   r   r$  )rK   r   )rt   r   ro   r  rK   r   )rt   r   r   r  rK   r   )r   r   rF   r   r   zNativeExprT | NonerK   r   )r0   r0   NN)rt   r   rq   r  ro   r  r   
int | Noner   r  r   Sequence[bool] | Noner   r  rK   r   )r   z'Literal['sum', 'max', 'min', 'product']r   r  rK   r  )r   z$Literal['sum', 'mean', 'std', 'var']r   intr   r  r   r  r   r  rK   r  )rK   ztuple[int, ...])rt   r   ry   r  rK   r   )rJ   z*Callable[[list[NativeExprT]], NativeExprT]r   r   rK   r   )rK   r  )rc   r   rK   r   )rK   r   )r   r  rK   r   )rF   zfloat | NonerK   r   )rj  r   rk  r   rK   r   )rj  r   rK   r   )rk  r   rK   r   )r{  r  rK   r   )r  r  rK   r   )r   r  rK   r   )r   r  r   r  r   r  rK   r   )
r   r  r   r  r   r  r   r  rK   r   )r  r  rK   r   r  )ro   Sequence[str]rK   r   )r   r  rK   r   )r  r    r   r  rK   r   )rq   r  ro   r  rK   r   )r  r   rK   r   )rK   zSQLExprStringNamespace[Self])rK   zSQLExprDateTimeNamesSpace[Self])i__name__
__module____qualname____annotations__r   DUCKDBr8   r<   r?   rL   rU   rZ   r]   r`   re   rl   propertyr3   rx   r|   r~   r   r   r   r   r   rp   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r'  r.  r1  r   r   r   rF  rL  rO  r   r   r`  rc  rm  rp  rs  rv  ry  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filteruniquer0   r9   r7   r"   r"   )   s   1144**##GG
 NR	 *8)>)>	4	 K	
  8	 .	 	 '	 
	B	<B.JN	/ .JN	3.

I

	

 JN
(
 G

  $
 

 

.

JN

	



$ 	< 	<D9> .KJV
 )-	PP P &	P
 
P 5702!%#
 -1,0

 2
 .	

 
 
 *
 *
 

@NR	3:  777 7 	7
 7 7 
47r 7 7 O O
=
GK
	
 
,@PPQQ[QU[QZQ[PPPPQP4E0&0&MN))P1MO0(38P

FFS
RQPP-P, YYY0&






03
=A
IL
	


03
=A
IL
	
000"0&0202

:Kx
,
7
CP
	
N 6 68 8 "JFFr9   r"   )0
__future__r   operatorrd   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"   r0   r9   r7   <module>r      s{    "  B B -  4 /  6(&E?=4KKrh}k12H]K=W4X rr9   