
    ht                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SK$J%r%  S SK&J'r'  S SK&J(r(  S SK&J)r)  \(       ad  S SKrS SK*J+r+  S SK,J-r-  S S K,J.r.  S S!K,J/r/  S S"K0J1r1  S S#K2J3r3  S S$K4J5r5  S S%K$J6r6  S S&K7J8r8  S S'K9J:r:  S S(K9J;r;  S S)K9J<r<  S S*K9J=r=  S S+K9J>r>  S S,K&J?r?  S S-K&J@r@  \R                  " \B5         S S.KJCrC  SSS5         " S/ S0\S1   5      rDg! , (       d  f       N= f)2    )annotationsN)TYPE_CHECKING)Any)Callable)Literal)Sequence)castCoalesceOperatorFunctionExpression)StarExpression)DuckDBPyType)LazyExprDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)WindowInputscol)ensure_type)generate_order_by_sql)generate_partition_by_sql)lit)narwhals_to_native_dtype)when)ExprKind)Implementation)not_implemented)requires)Self)
AliasNames)	EvalNames)
EvalSeries)DuckDBLazyFrameDuckDBNamespace)WindowFunction)ExprMetadata)DType)NonNestedLiteral)NumericLiteral)
RankMethod)RollingInterpolationMethod)TemporalLiteral)Version)_FullContext)SQLExpressionc                     \ rS rSr\R
                  r            STS jrSUS jrSVS jr	SWS jr
      SXS jrSS.           SYS	 jjrSZS
 jr\      S[S j5       r\S\S j5       r      S]S jrS^S jrS_S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jrS`S jr S`S jr!S`S jr"S`S jr#S`S  jr$S`S! jr%S`S" jr&S`S# jr'SaS$ jr(SbS% jr)SaS& jr*SaS' jr+SaS( jr,SaS) jr-SaS* jr.SaS+ jr/      ScS, jr0      SdS- jr1SaS. jr2SaS/ jr3SaS0 jr4SaS1 jr5SeS2 jr6SeS3 jr7SaS4 jr8SaS5 jr9SaS6 jr:\;Rx                  " S75      SfS8 j5       r=SaS9 jr>SaS: jr?SaS; jr@SgS< jrAShS= jrB\;Rx                  " S75      SiS> j5       rC\;Rx                  " S75      SaS? j5       rD\;Rx                  " S75      SaS@ j5       rE\;Rx                  " S75      SaSA j5       rF\;Rx                  " S75      SjSB j5       rG\;Rx                  " S75      SjSC j5       rH\;Rx                  " S75      SjSD j5       rI\;Rx                  " S75      SjSE j5       rJ\;Rx                  " S75      SjSF j5       rK\;Rx                  " S75      SkSG j5       rL\;Rx                  " S75      SkSH j5       rM\;Rx                  " S75                SlSI j5       rN\;Rx                  " S75                SlSJ j5       rO        SmSK jrPSnSL jrQ\;Rx                  " S75      SaSM j5       rR\;Rx                  " S75      SoSN j5       rS\TSpSO j5       rU\TSqSP j5       rV\TSrSQ j5       rW\TSsSR j5       rX\Y" 5       rZ\Y" 5       r[SSr\g)t
DuckDBExpr;   c               \    Xl         X l        X0l        X@l        XPl        S U l        S U l        g N)_call_evaluate_output_names_alias_output_names_backend_version_version_window_function	_metadata)selfcallevaluate_output_namesalias_output_namesbackend_versionversions         G/var/www/html/env/lib/python3.13/site-packages/narwhals/_duckdb/expr.py__init__DuckDBExpr.__init__>   s/     
&;##5  /7;.2    c                $    U R                  U5      $ r<   )r=   )rD   dfs     rJ   __call__DuckDBExpr.__call__O   s    zz"~rM   c                    g r<    rD   s    rJ   __narwhals_expr__DuckDBExpr.__narwhals_expr__R   s    rM   c                D    SSK Jn  U" U R                  U R                  S9$ )Nr   r+   )rH   rI   )narwhals._duckdb.namespacer,   r@   rA   )rD   r,   s     rJ   __narwhals_namespace__!DuckDBExpr.__narwhals_namespace__T   s!    > 114==
 	
rM   c                  ^^ SUU4S jjnU$ )Nc                   > [        U R                  ST(       + 06n[        U R                  6 nT SU R                   SU SU S3n[        U5      $ )N	ascendingz () over ( z2 rows between unbounded preceding and current row)r   order_byr   partition_byexprr7   )window_inputsorder_by_sqlpartition_by_sqlsql	func_namereverses       rJ   func)DuckDBExpr._cum_window_func.<locals>.funcb   sr    0''7>;L  9-:T:TU+R 2 238<L;MQ|n ]D D  !%%rM   rd   r   returnduckdb.ExpressionrS   )rD   ri   rh   rj   s    `` rJ   _cum_window_funcDuckDBExpr._cum_window_func\   s    		& 		& rM   N)ddofc                  ^^^^	^
^ [        U[        [        S 5      5        [        T[        5        / SQmU(       a  US-
  S-  nUS-
  S-  nXg-    S3m
U S3m	O
US-
   S3m
Sm	SUU	UUU
U4S jjnU$ )	N)summeanstdvar      z
 precedingz
 followingzcurrent rowc           	       > [        U R                  SS06n[        U R                  6 nSU SU ST ST
 S3	nTS;   a  TnOgTS	:X  a	  T	S
:X  a  SnOXTS	;   a	  T	S:X  a  SnOITS:X  a	  T	S
:X  a  SnO:TS:X  a	  T	S:X  a  SnO+TS;   a  ST S3n[	        U5      eST ST S3n[	        U5      eSU R
                   SU ST 3n[        U5      n[        U SU R
                   SU 35      n[        Xx5      $ )Nr]   T(r_   z rows between z and )>   rs   rt   rv   r   var_poprw   var_sampru   
stddev_popstddev_samp>   ru   rv   z;Only ddof=0 and ddof=1 are currently supported for rolling_.z,Only the following functions are supported: z.
Got: zcount(z) over z >= )r   ra   r   rb   
ValueErrorrc   r7   r!   )rd   re   rf   windowfunc_msgcondition_sql	conditionvaluerq   endrh   min_samplesstartsupported_funcss            rJ   rj   -DuckDBExpr._rolling_window_func.<locals>.func   sD   0-2H2HYTXYL8-:T:TU)*!L>weTWSXXYZFO+&e#	!e#	"e#	$e#	%n,ST]S^^_` o%D_DUU]^g]hhij o%$]%7%7$8xtK=YM%m4I!UG1]-?-?,@x"PQE	))rM   rl   )r   inttype)rD   rh   centerwindow_sizer   rq   half	remainderrj   r   r   r   s    `  ``   @@@rJ   _rolling_window_funcDuckDBExpr._rolling_window_funco   s     	Kd4j1K%7!O)D$qA-I'(
3EF*%C"Q'z2EC	* 	*2 rM   c                   ^ ^ U[         R                  L a  T $ T R                  S:  a  Sn[        U5      eSmSU U4S jjnT R	                  UT R
                  T R                  T R                  T R                  S9$ )Nrw      z`At least version 1.3 of DuckDB is required for binary operations between aggregates and columns.z{expr} over ()c           	     l   > T" U 5       Vs/ s H  n[        TR                  US95      PM     sn$ s  snf N)rc   )r7   formatrO   rc   rD   templates     rJ   rj   "DuckDBExpr.broadcast.<locals>.func   s/    JNr(S($M(//t/"<=(SSSs   "1rF   rG   rH   rI   rO   r*   rm   zSequence[duckdb.Expression])r"   LITERALr@   NotImplementedError	__class__r>   r?   rA   )rD   kindr   rj   r   s   `   @rJ   	broadcastDuckDBExpr.broadcast   s    8###K  6)tC%c**#	T 	T ~~"&"="=#77 11MM  
 	
rM   c              P   ^ SU4S jjnU " UTS UR                   UR                  S9$ )Nc                R   > T" U 5       Vs/ s H  n[        U5      PM     sn$ s  snf r<   r   )rO   nameevaluate_column_namess     rJ   rj   *DuckDBExpr.from_column_names.<locals>.func   s&    *?*CD*C$CI*CDDDs   $r   rO   r*   rm   zlist[duckdb.Expression]r@   rA   )clsr   contextrj   s    `  rJ   from_column_namesDuckDBExpr.from_column_names   s3    	E "7##44$$
 	
rM   c               X   ^ SU4S jjnU " UU4S jS UR                   UR                  S9$ )Nc                b   > U R                   nT Vs/ s H  n[        X   5      PM     sn$ s  snf r<   )columnsr   )rO   r   icolumn_indicess      rJ   rj   ,DuckDBExpr.from_column_indices.<locals>.func   s*    jjG-;<^C
O^<<<s   ,c                L   > T Vs/ s H  oR                   U   PM     sn$ s  snf r<   )r   )rO   r   r   s     rJ   <lambda>0DuckDBExpr.from_column_indices.<locals>.<lambda>   s    ^-T^jjm^-T-Ts   !r   r   r   )r   r   r   rj   s     ` rJ   from_column_indicesDuckDBExpr.from_column_indices   s2    	= "T##44$$
 	
rM   c                  ^ ^^ SUUU 4S jjnT R                  UT R                  T R                  T R                  T R                  S9$ )a  Create expression from callable.

Arguments:
    call: Callable from compliant DataFrame to native Expression
    expr_name: Expression name
    expressifiable_args: arguments pass to expression which should be parsed
        as expressions (e.g. in `nw.col('a').is_between('b', 'c')`)
c                  > T" U 5      nTR                  5        VVs0 s H8  u  p#UTR                  U5      (       a  U R                  U5      O
[        U5      _M:     nnnU Vs/ s H  nT" U40 UD6PM     sn$ s  snnf s  snf r<   )items_is_expr_evaluate_exprr   )	rO   native_series_listkeyr   other_native_seriesnative_seriesrE   expressifiable_argsrD   s	         rJ   rj   'DuckDBExpr._with_callable.<locals>.func   s    !%b #6";";"=#"=JC u1E1ER&&u-3u:U"=   # &8%7M ]:&9:%7 	#s   ?A9#A?r   r   )r   r>   r?   r@   rA   )rD   rE   r   rj   s   ``` rJ   _with_callableDuckDBExpr._with_callable   sJ    		 		 ~~"&"="=#77 11MM  
 	
rM   c               x    [        U 5      " U R                  U R                  UU R                  U R                  S9$ )N)rE   rF   rG   rH   rI   )r   r=   r>   r@   rA   rD   rj   s     rJ   _with_alias_output_names#DuckDBExpr._with_alias_output_names   s6    Dz"&"="=# 11MM
 	
rM   c                    U R                  U R                  U R                  U R                  U R                  U R
                  S9nXl        U$ )Nr   )r   r=   r>   r?   r@   rA   rB   )rD   window_functionresults      rJ   _with_window_function DuckDBExpr._with_window_function   sK    JJ"&"="=#77 11MM   
 #2rM   c                $    U R                  S US9$ )Nc                
    X-  $ r<   rS   _inputothers     rJ   r   $DuckDBExpr.__and__.<locals>.<lambda>      rM   r   r   rD   r   s     rJ   __and__DuckDBExpr.__and__      ""#Gu"UUrM   c                $    U R                  S US9$ )Nc                
    X-  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__or__.<locals>.<lambda>  r   rM   r   r   r   s     rJ   __or__DuckDBExpr.__or__
  r   rM   c                $    U R                  S US9$ )Nc                
    X-   $ r<   rS   r   s     rJ   r   $DuckDBExpr.__add__.<locals>.<lambda>  r   rM   r   r   r   s     rJ   __add__DuckDBExpr.__add__  r   rM   c                $    U R                  S US9$ )Nc                
    X-  $ r<   rS   r   s     rJ   r   (DuckDBExpr.__truediv__.<locals>.<lambda>  r   rM   r   r   r   s     rJ   __truediv__DuckDBExpr.__truediv__  r   rM   c                B    U R                  S US9R                  S5      $ )Nc                $    UR                  U 5      $ r<   )r   r   s     rJ   r   )DuckDBExpr.__rtruediv__.<locals>.<lambda>  s    %"3"3F";rM   r   literalr   aliasr   s     rJ   __rtruediv__DuckDBExpr.__rtruediv__  s)    "";5 # 

%	
	rM   c                $    U R                  S US9$ )Nc                $    U R                  U5      $ r<   __floordiv__r   s     rJ   r   )DuckDBExpr.__floordiv__.<locals>.<lambda>  s    &"5"5e"<rM   r   r   r   s     rJ   r   DuckDBExpr.__floordiv__  s    ""<E # 
 	
rM   c                B    U R                  S US9R                  S5      $ )Nc                $    UR                  U 5      $ r<   r   r   s     rJ   r   *DuckDBExpr.__rfloordiv__.<locals>.<lambda>  s    %"4"4V"<rM   r   r   r   r   s     rJ   __rfloordiv__DuckDBExpr.__rfloordiv__  s)    ""<E # 

%	
	rM   c                $    U R                  S US9$ )Nc                $    U R                  U5      $ r<   __mod__r   s     rJ   r   $DuckDBExpr.__mod__.<locals>.<lambda>$  s    &.."7rM   r   r   r   s     rJ   r  DuckDBExpr.__mod__"  s    ""7u # 
 	
rM   c                B    U R                  S US9R                  S5      $ )Nc                $    UR                  U 5      $ r<   r  r   s     rJ   r   %DuckDBExpr.__rmod__.<locals>.<lambda>)      %--"7rM   r   r   r   r   s     rJ   __rmod__DuckDBExpr.__rmod__'  )    ""7u # 

%	
	rM   c                $    U R                  S US9$ )Nc                
    X-
  $ r<   rS   r   s     rJ   r   $DuckDBExpr.__sub__.<locals>.<lambda>-  r   rM   r   r   r   s     rJ   __sub__DuckDBExpr.__sub__,  r   rM   c                B    U R                  S US9R                  S5      $ )Nc                $    UR                  U 5      $ r<   )r  r   s     rJ   r   %DuckDBExpr.__rsub__.<locals>.<lambda>1  r
  rM   r   r   r   r   s     rJ   __rsub__DuckDBExpr.__rsub__/  r  rM   c                $    U R                  S US9$ )Nc                
    X-  $ r<   rS   r   s     rJ   r   $DuckDBExpr.__mul__.<locals>.<lambda>5  r   rM   r   r   r   s     rJ   __mul__DuckDBExpr.__mul__4  r   rM   c                $    U R                  S US9$ )Nc                
    X-  $ r<   rS   r   s     rJ   r   $DuckDBExpr.__pow__.<locals>.<lambda>8  s    rM   r   r   r   s     rJ   __pow__DuckDBExpr.__pow__7  s    ""#Fe"TTrM   c                B    U R                  S US9R                  S5      $ )Nc                $    UR                  U 5      $ r<   )r   r   s     rJ   r   %DuckDBExpr.__rpow__.<locals>.<lambda><  r
  rM   r   r   r   r   s     rJ   __rpow__DuckDBExpr.__rpow__:  r  rM   c                $    U R                  S US9$ )Nc                
    X:  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__lt__.<locals>.<lambda>@  r   rM   r   r   r   s     rJ   __lt__DuckDBExpr.__lt__?  r   rM   c                $    U R                  S US9$ )Nc                
    X:  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__gt__.<locals>.<lambda>C  r   rM   r   r   r   s     rJ   __gt__DuckDBExpr.__gt__B  r   rM   c                $    U R                  S US9$ )Nc                
    X:*  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__le__.<locals>.<lambda>F      rM   r   r   r   s     rJ   __le__DuckDBExpr.__le__E      ""#HPU"VVrM   c                $    U R                  S US9$ )Nc                
    X:  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__ge__.<locals>.<lambda>I  r4  rM   r   r   r   s     rJ   __ge__DuckDBExpr.__ge__H  r7  rM   c                $    U R                  S US9$ )Nc                
    X:H  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__eq__.<locals>.<lambda>L  r4  rM   r   r   r   s     rJ   __eq__DuckDBExpr.__eq__K  r7  rM   c                $    U R                  S US9$ )Nc                
    X:g  $ r<   rS   r   s     rJ   r   #DuckDBExpr.__ne__.<locals>.<lambda>O  r4  rM   r   r   r   s     rJ   __ne__DuckDBExpr.__ne__N  r7  rM   c                X    [        S[        R                  5      nU R                  U5      $ )N Callable[..., duckdb.Expression])r	   operatorinvertr   )rD   rJ  s     rJ   
__invert__DuckDBExpr.__invert__Q  s$    8(//J""6**rM   c                   ^ SU4S jjnU R                  U R                  U R                  UU R                  U R                  S9$ )Nc                H   > [        U 5      S:w  a  SU  3n[        U5      eT/$ )Nrw   z:Expected function with single output, found output names: )lenr   )namesr   r   s     rJ   rG   ,DuckDBExpr.alias.<locals>.alias_output_namesV  s-    5zQRSXRYZ o%6MrM   r   )rP  Sequence[str]rm   rR  )r   r=   r>   r@   rA   )rD   r   rG   s    ` rJ   r   DuckDBExpr.aliasU  sC    	 ~~JJ"&"="=1 11MM  
 	
rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nabsr   r   s    rJ   r    DuckDBExpr.abs.<locals>.<lambda>e      2DUF2SrM   r   rT   s    rJ   rV  DuckDBExpr.absd      ""#STTrM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nrt   r   rW  s    rJ   r   !DuckDBExpr.mean.<locals>.<lambda>h  s    2DVV2TrM   r   rT   s    rJ   rt   DuckDBExpr.meang  s    ""#TUUrM   c                .    SS jnU R                  U5      $ )Nc           
        [        SU 5      n[        SU 5      U[        S5      -
  -  [        SX[        S5      -
  -  5      -  n[        U[        S5      :H  [        S 5      5      R                  [        U[        S5      :H  [        [	        S5      5      5      R                  [        U[        S5      :H  [        S5      5      R                  U5      5      5      $ )	Ncountskewnessrx   sqrtrw   r   nang        )r   r   r!   	otherwisefloat)r   rb  sample_skewnesss      rJ   rj   DuckDBExpr.skew.<locals>.funck  s    &w7E #:v63q6>#$VUc!fn-EFG 
 QT3==Uc!f_c%,&78BB#a&#c(3==oN rM   r   rn   rm   rn   r   r   s     rJ   skewDuckDBExpr.skewj  s    	 ""4((rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nmedianr   rW  s    rJ   r   #DuckDBExpr.median.<locals>.<lambda>|  s    2DXv2VrM   r   rT   s    rJ   ro  DuckDBExpr.median{  s    ""#VWWrM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nbool_andr   rW  s    rJ   r    DuckDBExpr.all.<locals>.<lambda>      2DZQW2XrM   r   rT   s    rJ   allDuckDBExpr.all~      ""#XYYrM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nbool_orr   rW  s    rJ   r    DuckDBExpr.any.<locals>.<lambda>  s    2DYPV2WrM   r   rT   s    rJ   anyDuckDBExpr.any  s    ""#WXXrM   c                :   ^^ SUU4S jjnU R                  U5      $ )Nc                V   > TS:X  a  [        SU [        T5      5      $ Sn[        U5      e)Nlinearquantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)r   r   r   )r   r   interpolationquantiles     rJ   rj   !DuckDBExpr.quantile.<locals>.func  s.    ()/63x=QQXC%c**rM   rj  r   )rD   r  r  rj   s    `` rJ   r  DuckDBExpr.quantile  s     	+ 	+ ""4((rM   c                    SS jnSS jn        S	S jnUc  U R                  XBS9$ Uc  U R                  X1S9$ U R                  XQUS9$ )
Nc                    [        SX5      $ )Ngreatestr   )r   lower_bounds     rJ   _clip_lower$DuckDBExpr.clip.<locals>._clip_lower  s    %j&FFrM   c                    [        SX5      $ )Nleastr   )r   upper_bounds     rJ   _clip_upper$DuckDBExpr.clip.<locals>._clip_upper  s    %gvCCrM   c                0    [        S[        SX5      U5      $ )Nr  r  r   )r   r  r  s      rJ   
_clip_both#DuckDBExpr.clip.<locals>._clip_both  s      &.wLk rM   )r  )r  )r  r  )r   rn   r  r   rm   rn   )r   rn   r  r   rm   rn   )r   rn   r  r   r  r   rm   rn   r   )rD   r  r  r  r  r  s         rJ   clipDuckDBExpr.clip  s    
	G	D	%	47	FI		 &&{&LL&&{&LL""[ # 
 	
rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nrs   r   rW  s    rJ   r    DuckDBExpr.sum.<locals>.<lambda>  rY  rM   r   rT   s    rJ   rs   DuckDBExpr.sum  r[  rM   c                .    SS jnU R                  U5      $ )Nc           
         [        S[        SU 5      5      [        S[        U R                  5       [        S5      5      R	                  [        S5      5      5      -   $ )Narray_unique	array_aggmaxr   rw   )r   r!   	isnotnullr   rf  rW  s    rJ   rj   !DuckDBExpr.n_unique.<locals>.func  sQ    % 2; G"tF,,.A7AA#a&I rM   rj  r   r   s     rJ   n_uniqueDuckDBExpr.n_unique  s    	 ""4((rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ Nrb  r   rW  s    rJ   r   "DuckDBExpr.count.<locals>.<lambda>      2DWf2UrM   r   rT   s    rJ   rb  DuckDBExpr.count      ""#UVVrM   c                &    U R                  S 5      $ )Nc                    [        S5      $ r  r   rW  s    rJ   r    DuckDBExpr.len.<locals>.<lambda>  s
    2DW2MrM   r   rT   s    rJ   rO  DuckDBExpr.len  s    ""#MNNrM   c                   ^ TS:X  a  U R                  S 5      $ TS:X  a  U R                  S 5      $ SU4S jjnU R                  U5      $ )Nr   c                    [        SU 5      $ )Nr~   r   rW  s    rJ   r    DuckDBExpr.std.<locals>.<lambda>  s    1,GrM   rw   c                    [        SU 5      $ )Nr   r   rW  s    rJ   r   r    s    1-HrM   c                   > [        SU 5      n[        SU 5      [        SU5      -  [        SU[        T5      -
  5      -  $ )Nrb  r~   rd  r   r   r   	n_samplesrq   s     rJ   _stdDuckDBExpr.std.<locals>._std  sF    *7F;I"<8$VY78%fy3t9/DFHrM   rj  r   )rD   rq   r  s    ` rJ   ru   DuckDBExpr.std  sW    19&&G  19&&H 	 ""4((rM   c                   ^ TS:X  a  U R                  S 5      $ TS:X  a  U R                  S 5      $ SU4S jjnU R                  U5      $ )Nr   c                    [        SU 5      $ )Nr|   r   rW  s    rJ   r    DuckDBExpr.var.<locals>.<lambda>  s    1)VDrM   rw   c                    [        SU 5      $ )Nr}   r   rW  s    rJ   r   r    s    1*fErM   c                X   > [        SU 5      n[        SU 5      U-  U[        T5      -
  -  $ )Nrb  r|   r  r  s     rJ   _varDuckDBExpr.var.<locals>._var  s7    *7F;I"9f5s4y(*rM   rj  r   )rD   rq   r  s    ` rJ   rv   DuckDBExpr.var  sW    19&&D  19&&E 	 ""4((rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nr  r   rW  s    rJ   r    DuckDBExpr.max.<locals>.<lambda>  rY  rM   r   rT   s    rJ   r  DuckDBExpr.max  r[  rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nminr   rW  s    rJ   r    DuckDBExpr.min.<locals>.<lambda>  rY  rM   r   rT   s    rJ   r  DuckDBExpr.min  r[  rM   c                &    U R                  S 5      $ )Nc                T    [        SU R                  5       R                  S5      5      $ )Nrs   r   )r   isnullr	   rW  s    rJ   r   'DuckDBExpr.null_count.<locals>.<lambda>  s    -eV]]_5I5I%5PQrM   r   rT   s    rJ   
null_countDuckDBExpr.null_count  s    ""Q
 	
rM   r   c                   ^ ^^^^ T R                   =mb  Tc   eSUUU U4S jjnO[        T6 nSU S3mSU U4S jjnT R                  UT R                  T R                  T R
                  T R                  S9$ )Nc           
     t   > TR                  U 5       Vs/ s H  nT" [        UTT5      5      PM     sn$ s  snf r<   )r=   r   )rO   rc   ra   rb   rD   r   s     rJ   rj   DuckDBExpr.over.<locals>.func  s@     !%

2 . $L|X$NO .  s   5z{expr} over (r{   c           	     ~   > TR                  U 5       Vs/ s H  n[        TR                  US95      PM     sn$ s  snf r   )r=   r7   r   r   s     rJ   rj   r    s=    JN**UW.JX$M(//t/"<=.  s   ":r   r   )rB   r   r   r>   r?   r@   rA   )rD   rb   ra   rj   rf   r   r   s   ```  @@rJ   overDuckDBExpr.over  s    #444OA'''   9,G()9(:!<H 
 ~~"&"="=#77 11MM  
 	
rM   c                &    U R                  S 5      $ )Nc                "    U R                  5       $ r<   )r  rW  s    rJ   r   $DuckDBExpr.is_null.<locals>.<lambda>  s
    &--/rM   r   rT   s    rJ   is_nullDuckDBExpr.is_null  s    ""#ABBrM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nisnanr   rW  s    rJ   r   #DuckDBExpr.is_nan.<locals>.<lambda>  r  rM   r   rT   s    rJ   is_nanDuckDBExpr.is_nan  r  rM   c                &    U R                  S 5      $ )Nc                    [        SU 5      $ )Nisfiniter   rW  s    rJ   r   &DuckDBExpr.is_finite.<locals>.<lambda>  rv  rM   r   rT   s    rJ   	is_finiteDuckDBExpr.is_finite  ry  rM   c                .   ^ U R                  U4S j5      $ )Nc                0   > [        S[        T5      U 5      $ )Ncontainsr  r   s    rJ   r   "DuckDBExpr.is_in.<locals>.<lambda>  s    -j#e*fMrM   r   r   s    `rJ   is_inDuckDBExpr.is_in      ""M
 	
rM   c                .   ^ U R                  U4S j5      $ )Nc                0   > [        SU [        T5      5      $ )Nroundr  )r   decimalss    rJ   r   "DuckDBExpr.round.<locals>.<lambda>  s    -gvs8}MrM   r   )rD   r  s    `rJ   r  DuckDBExpr.round  r  rM   c                V   ^ [        T[        5        SU4S jjnU R                  U5      $ )Nc           	        > [        U R                  SS06n[        U R                  6 nSU R                   ST SU SU S3	n[        U5      $ )Nr]   Tlag(, r^   r_   r{   r`   )rd   re   rf   rg   ns       rJ   rj   DuckDBExpr.shift.<locals>.func"  sd    0-2H2HYTXYL8-:T:TU}))*"QCx8H7I<.XYZ  !%%rM   rl   )r   r   r   )rD   r  rj   s    ` rJ   shiftDuckDBExpr.shift  s%    As	& ))$//rM   c                .    SS jnU R                  U5      $ )Nc                   [        U R                  SS06nU R                  (       a#  [        U R                  6 SU R                   3-   nOSU R                   3n[        S5       SU SU S3n[        U5      [        S	5      :H  $ )
Nr]   Tr  partition by 
row_number over(r_   r{   rw   r   ra   rb   r   rc   r   r7   r   rd   re   rf   rg   s       rJ   rj   *DuckDBExpr.is_first_distinct.<locals>.func.  s    0-2H2HYTXYL))-}/I/IJ=--./0 !
 &3=3E3E2F#G '56f=M<NaP\~]^_C %Q//rM   rl   r   r   s     rJ   is_first_distinctDuckDBExpr.is_first_distinct,      
	0 ))$//rM   c                .    SS jnU R                  U5      $ )Nc                   [        U R                  SS06nU R                  (       a#  [        U R                  6 SU R                   3-   nOSU R                   3n[        S5       SU SU S3n[        U5      [        S	5      :H  $ )
Nr]   Fr  r   r  r  r_   r{   rw   r  r  s       rJ   rj   )DuckDBExpr.is_last_distinct.<locals>.func>  s    0-2H2HZTYZL))-}/I/IJ=--./0 !
 &3=3E3E2F#G '56f=M<NaP\~]^_C %Q//rM   rl   r  r   s     rJ   is_last_distinctDuckDBExpr.is_last_distinct<  r	  rM   c                .    SS jnU R                  U5      $ )Nc                    [        U R                  SS06n[        U R                  6 nSU R                   SU SU S3nU R                  [        U5      -
  $ )Nr]   Tr  r^   r_   r{   r`   r  s       rJ   rj   DuckDBExpr.diff.<locals>.funcN  sc    0-2H2HYTXYL8-:T:TU++,H5E4Fa~UVWC %%c(:::rM   rl   r  r   s     rJ   diffDuckDBExpr.diffL  s    	; ))$//rM   c               @    U R                  U R                  USS95      $ )Nrs   ri   rh   r   ro   rD   ri   s     rJ   cum_sumDuckDBExpr.cum_sumV  (    ))!!'U!C
 	
rM   c               @    U R                  U R                  USS95      $ )Nr  r  r  r  s     rJ   cum_maxDuckDBExpr.cum_max\  r  rM   c               @    U R                  U R                  USS95      $ )Nr  r  r  r  s     rJ   cum_minDuckDBExpr.cum_minb  r  rM   c               @    U R                  U R                  USS95      $ )Nrb  r  r  r  s     rJ   	cum_countDuckDBExpr.cum_counth  s(    ))!!'W!E
 	
rM   c               @    U R                  U R                  USS95      $ )Nproductr  r  r  s     rJ   cum_prodDuckDBExpr.cum_prodn  s(    ))!!'Y!G
 	
rM   c          	     D    U R                  U R                  SUUUS95      $ )Nrs   rh   r   r   r   r   r   rD   r   r   r   s       rJ   rolling_sumDuckDBExpr.rolling_sumt  s4    ))%%''	 & 
 	
rM   c          	     D    U R                  U R                  SUUUS95      $ )Nrt   r)  r*  r+  s       rJ   rolling_meanDuckDBExpr.rolling_mean  s4    ))%% ''	 & 
 	
rM   c          
     F    U R                  U R                  SUUUUS95      $ )Nrv   rh   r   r   r   rq   r*  rD   r   r   r   rq   s        rJ   rolling_varDuckDBExpr.rolling_var  9     ))%%'' & 
 	
rM   c          
     F    U R                  U R                  SUUUUS95      $ )Nru   r2  r*  r3  s        rJ   rolling_stdDuckDBExpr.rolling_std  r6  rM   c                J    Ub  Sn[        U5      eSS jnU R                  XQS9$ )Ntodoc                    [        X5      $ r<   r
   )r   r   s     rJ   rj   "DuckDBExpr.fill_null.<locals>.func  s    #F22rM   )r   )r   rn   r   r   rm   rn   )r   r   )rD   r   strategylimitr   rj   s         rJ   	fill_nullDuckDBExpr.fill_null  s5     C%c**	3 ""4"55rM   c                :   ^ ^ SUU 4S jjnT R                  U5      $ )Nc                d   > [        TTR                  5      nU R                  [        U5      5      $ r<   )r    rA   r	   r   )r   native_dtypedtyperD   s     rJ   rj   DuckDBExpr.cast.<locals>.func  s'    3E4==IL;;|L9::rM   rj  r   )rD   rE  rj   s   `` rJ   r	   DuckDBExpr.cast  s     	; 	; ""4((rM   c                .    SS jnU R                  U5      $ )Nc                <    SU  S3n[        U5      [        S5      :H  $ )Nzcount(*) over (partition by r{   rw   )r7   r   )r   rg   s     rJ   rj   "DuckDBExpr.is_unique.<locals>.func  s$    0:C %Q//rM   rj  r   r   s     rJ   	is_uniqueDuckDBExpr.is_unique  s    	0 ""4((rM   c                  ^^^ U R                   S:  a  Sn[        U5      eTS;   a  [        S5      mOTS:X  a  [        S5      mO[        S5      mS	UUU4S jjnU R                  U5      $ )
Nr   z6At least version 1.3 of DuckDB is required for `rank`.>   r  r  averagerankdense
dense_rankr  c                  > T(       a  U  S3nOU  S3nSU 3n[        S[        5       5      nTS:X  a0  [        T SU S35      [        U SU  S35      -   [        S	5      -
  nOSTS
:X  a<  [        T SU S35      [        U SU  S35      [        S	5      -
  [        S5      -  -   nO[        T SU S35      n[	        U R                  5       U5      $ )Nz desc nulls lastz asc nulls lastz	order by rb  r  z OVER (r{   z OVER (PARTITION BY rw   rN  g       @)r   r   r7   r   r!   r  )r   by_sqlre   
count_exprrc   
descendingrj   methods        rJ   _rankDuckDBExpr.rank.<locals>._rank  s   "8#34"8?3&vh/L+G^5EFJ!TF',q"AB#zl2Fvha$PQR!f 
 9$$vW\N!%DE!ZL0DVHA"NORUVWRXXHI  %vW\N!%DE((*D11rM   rj  )r@   r   r   r   )rD   rV  rU  r   rW  rj   s    ``  @rJ   rO  DuckDBExpr.rank  sm      6)JC%c**..%f-Dw%l3D%l3D	2 	2. ""5))rM   c                    [        U 5      $ r<   r   rT   s    rJ   strDuckDBExpr.str      (..rM   c                    [        U 5      $ r<   r   rT   s    rJ   dtDuckDBExpr.dt  s    *400rM   c                    [        U 5      $ r<   r   rT   s    rJ   listDuckDBExpr.list  s    &t,,rM   c                    [        U 5      $ r<   r   rT   s    rJ   structDuckDBExpr.struct  r]  rM   )r?   r@   r=   r>   rC   rA   rB   )rE   z.EvalSeries[DuckDBLazyFrame, duckdb.Expression]rF   EvalNames[DuckDBLazyFrame]rG   AliasNames | NonerH   ztuple[int, ...]rI   r5   rm   Noner   )rm   ri  )rm   r,   )ri   boolrh   z0Literal['sum', 'max', 'min', 'count', 'product']rm   r-   )rh   z$Literal['sum', 'mean', 'std', 'var']r   rj  r   r   r   r   rq   
int | Nonerm   r-   )r   z/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]rm   r&   )r   rg  r   r6   rm   r&   )r   r   r   r6   rm   r&   )rE   rH  r   z
Self | Anyrm   r&   )rj   rh  rm   r&   )r   r-   rm   r&   )r   r9   rm   r&   )rm   r&   )r   r[  rm   r&   )r  rg  r  r3   rm   r&   )r  .Self | NumericLiteral | TemporalLiteral | Noner  rl  rm   r&   )rq   r   rm   r&   )rb   rR  ra   zSequence[str] | Nonerm   r&   )r   zSequence[Any]rm   r&   )r  r   rm   r&   )r  r   rm   r&   )ri   rj  rm   r&   )r   r   r   r   r   rj  rm   r&   )
r   r   r   r   r   rj  rq   r   rm   r&   )r   zSelf | NonNestedLiteralr>  r   r?  rk  rm   r&   )rE  zDType | type[DType]rm   r&   )rV  r2   rU  rj  rm   r&   )rm   r   )rm   r   )rm   r   )rm   r   )]__name__
__module____qualname____firstlineno__r#   DUCKDB_implementationrK   rP   rU   rY   ro   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r%  r*  r/  r5  r;  r@  rE  rK  r   rV  rt   rk  ro  rw  r~  r  r  rs   r  rb  rO  ru   rv   r  r  r  r%   rH   r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r&  r,  r/  r4  r8  r@  r	   rK  rO  propertyr[  r_  rb  re  r$   
drop_nullsunique__static_attributes__rS   rM   rJ   r9   r9   ;   s.   $++O3<3  :	3
 .3 )3 3 
3" -
  D	
 
4  . 8. 	.
 . . . 
.`
( 
9

 
 

 
$ 
 

4
PZ
	
>
	VVVV






V
VU
VVWWWW+
UV)"XZY	)	).H	)		)
C
 D
 
	
4U	)WO)()(UU

 f%
 &
4CWZ



 f%0 &0 f%0 &0 f%0 &0 f%0 &0 f%
 &

 f%
 &

 f%
 &

 f%
 &

 f%
 &

 f%
 &
 f%
 &
 f%

03
=A
IL
	
 &
 f%

03
=A
IL
	
 &

6,
68;
6DN
6	
6) f%) &) f%"* &"*H / / 1 1 - - / / !"JFrM   r9   )r*   rn   )E
__future__r   
contextlibrI  typingr   r   r   r   r   r	   duckdbr   r   r   duckdb.typingr   narwhals._compliantr   narwhals._duckdb.expr_dtr   narwhals._duckdb.expr_listr   narwhals._duckdb.expr_strr   narwhals._duckdb.expr_structr   narwhals._duckdb.utilsr   r   r   r   r   r   r    r!   narwhals._expression_parsingr"   narwhals.utilsr#   r$   r%   typing_extensionsr&   narwhals._compliant.typingr'   r(   r)   narwhals._duckdb.dataframer*   rX   r,   narwhals._duckdb.typingr-   r.   narwhals.dtypesr/   narwhals.typingr0   r1   r2   r3   r4   r5   r6   suppressImportErrorr7   r9   rS   rM   rJ   <module>r     s    "          # % ! & ( @ > ? B / & . 8 < & ; ' 1 ) * #&545::69%0.*:/&+%$ &|
@A |
	 &%s   .E
E