
    Why)                       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
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZ d d
lmZmZ d dlm Z  d dl!m"Z"m#Z# erNd 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/ d dl0m1Z1 d dl2m3Z3 d dl!m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 e/e1e&f   Z:e*e&   Z; G d de d         Z<y)    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)DeferredTimeZoneFcollitnarwhals_to_native_dtypewhenwindow_expression)ExprKindExprMetadata)SQLExpr)ImplementationVersion)Sequence)
Expression)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace)_LimitedContext)FillNullStrategy	IntoDTypeNonNestedLiteralRollingInterpolationMethodc                     e Zd Zej                  Z	 dej                  d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd dZ	 	 	 	 d!ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"dZd#dZ	d$dZ
e	 	 	 	 	 	 d%d	       Zed&d
       Zed'd       Zd(dZd(dZd(dZ	 	 	 	 	 	 d)dZd(dZd(dZd*dZd*dZd(dZd(dZd(dZd+dZ	 	 	 	 	 	 	 	 d,dZd-dZed.d       Zed/d       Zed0d       Z ed1d       Z!y)2
DuckDBExprN)implementationc               X    || _         || _        || _        || _        d | _        || _        y N)_call_evaluate_output_names_alias_output_names_version	_metadata_window_function)selfcallwindow_functionevaluate_output_namesalias_output_namesversionr1   s          O/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_duckdb/expr.py__init__zDuckDBExpr.__init__7   s1     
&;##5 .2=L    c                *    t        dt                     S Ncount)r   r
   r:   s    r@   _count_starzDuckDBExpr._count_starH   s    .*++rB   
descending
nulls_lastc          	     &    t        |||||||      S )NrH   )r   )r:   exprpartition_byorder_by
rows_startrows_endrI   rJ   s           r@   _window_expressionzDuckDBExpr._window_expressionK   s&     !!!
 	
rB   c                4    ddl m}  || j                        S )Nr   r(   )r?   )narwhals._duckdb.namespacer)   r7   )r:   r)   s     r@   __narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__`   s    >t}}55rB   c                    |t         j                  u r| S | j                  dk  rd}t        |      | j	                  t        d      gg       S )N      z`At least version 1.3 of DuckDB is required for binary operations between aggregates and columns.rW   )r   LITERAL_backend_versionNotImplementedErroroverr   )r:   kindmsgs      r@   	broadcastzDuckDBExpr.broadcaste   sJ    8###K  6)tC%c**yy#a&2&&rB   c              <    dfd} | |d |j                         S )Nc                L     |       D cg c]  }t        |       c}S c c}w r3   )r   )dfnameevaluate_column_namess     r@   funcz*DuckDBExpr.from_column_names.<locals>.funcu   s     *?*CD$CIDDDs   !r=   r>   r?   rb   r'   returnlist[Expression])r7   )clsrd   contextre   s    `  r@   from_column_nameszDuckDBExpr.from_column_namesm   s*    	E "7#$$	
 	
rB   c               Z    dfd} | || j                        d |j                        S )Nc                ^    | j                   }D cg c]  }t        ||          c}S c c}w r3   )columnsr   )rb   ro   icolumn_indicess      r@   re   z,DuckDBExpr.from_column_indices.<locals>.func   s(    jjG-;<C
O<<<s   *rf   rg   )_eval_names_indicesr7   )rj   rk   rq   re   s     ` r@   from_column_indiceszDuckDBExpr.from_column_indices   s4    	= "%"9"9."I#$$	
 	
rB   c                $    |j                  |      S r3   )alias)rj   rL   rc   s      r@   _alias_nativezDuckDBExpr._alias_native   s    zz$rB   c                X    t        dt        j                        }| j                  |      S )NzCallable[..., Expression])r   operatorinvert_with_elementwise)r:   ry   s     r@   
__invert__zDuckDBExpr.__invert__   s$    18??C%%f--rB   c                ,    dd}| j                  |      S )Nc           
        t        d|       }t        d|       |t        d      z
  z  t        d||t        d      z
  z        z  }t        |t        d      k(  t        d             j                  t        |t        d      k(  t        t	        d                  j                  t        |t        d      k(  t        d            j                  |                  S )	NrE   skewness   sqrtrW   r   nang        )r   r   r   	otherwisefloat)rL   rE   sample_skewnesss      r@   re   zDuckDBExpr.skew.<locals>.func   s    gt$E *d#3q6>#FEUSV^456 
 QT3==Uc!f_c%,&78BB#a&#c(3==oN rB   rL   r    rh   r    _with_callabler:   re   s     r@   skewzDuckDBExpr.skew   s    	 ""4((rB   c                &    | j                  d       S )Nc                    t        d|       S )Nkurtosis_popr   rL   s    r@   <lambda>z%DuckDBExpr.kurtosis.<locals>.<lambda>   s    .$0G rB   r   rF   s    r@   kurtosiszDuckDBExpr.kurtosis   s    ""#GHHrB   c                6    dfd}| j                  |      S )Nc                T    dk(  rt        d| t                    S d}t        |      )Nlinearquantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)r   r   r[   )rL   r^   interpolationquantiles     r@   re   z!DuckDBExpr.quantile.<locals>.func   s.    ($H>>XC%c**rB   r   r   )r:   r   r   re   s    `` r@   r   zDuckDBExpr.quantile   s    	+ ""4((rB   c                ,    dd}| j                  |      S )Nc           
         t        dt        d|             t        dt        | j                         t        d            j	                  t        d                  z   S )Narray_unique	array_aggmaxr   rW   )r   r   	isnotnullr   r   r   s    r@   re   z!DuckDBExpr.n_unique.<locals>.func   sJ    ^Q{D%9:QtDNN,c!f5??AG>  rB   r   r   r   s     r@   n_uniquezDuckDBExpr.n_unique   s    	 ""4((rB   c                &    | j                  d       S )Nc                    t        d      S rD   r   )_exprs    r@   r   z DuckDBExpr.len.<locals>.<lambda>   s
    7 rB   r   rF   s    r@   lenzDuckDBExpr.len   s    ""#;<<rB   c                   dk(  r| j                  d       S dk(  r| j                  d       S dfd}| j                  |      S )Nr   c                    t        d|       S )N
stddev_popr   r   s    r@   r   z DuckDBExpr.std.<locals>.<lambda>   s    AlD4I rB   rW   c                    t        d|       S )Nstddev_sampr   r   s    r@   r   z DuckDBExpr.std.<locals>.<lambda>   s    AmT4J rB   c                    t        d|       }t        d|       t        d|      z  t        d|t              z
        z  S )NrE   r   r   r   r   rL   	n_samplesddofs     r@   _stdzDuckDBExpr.std.<locals>._std   sE    '4(I,%FI&'Vi#d)357rB   r   r   )r:   r   r   s    ` r@   stdzDuckDBExpr.std   sM    19&&'IJJ19&&'JKK	 ""4((rB   c                   dk(  r| j                  d       S dk(  r| j                  d       S dfd}| j                  |      S )Nr   c                    t        d|       S )Nvar_popr   r   s    r@   r   z DuckDBExpr.var.<locals>.<lambda>   s    Ai4F rB   rW   c                    t        d|       S )Nvar_sampr   r   s    r@   r   z DuckDBExpr.var.<locals>.<lambda>   s    Aj$4G rB   c                X    t        d|       }t        d|       |z  |t              z
  z  S )NrE   r   r   r   s     r@   _varzDuckDBExpr.var.<locals>._var   s/    '4(IY%	1YT5JKKrB   r   r   )r:   r   r   s    ` r@   varzDuckDBExpr.var   sN    19&&'FGG19&&'GHH	L ""4((rB   c                &    | j                  d       S )Nc                T    t        d| j                         j                  d            S )Nsumint)r   isnullr   r   s    r@   r   z'DuckDBExpr.null_count.<locals>.<lambda>   s    %9K9KE9R0S rB   r   rF   s    r@   
null_countzDuckDBExpr.null_count   s    ""#STTrB   c                &    | j                  d       S )Nc                    t        d|       S )Nisnanr   r   s    r@   r   z#DuckDBExpr.is_nan.<locals>.<lambda>   s    1Wd3C rB   rz   rF   s    r@   is_nanzDuckDBExpr.is_nan   s    %%&CDDrB   c                &    | j                  d       S )Nc                    t        d|       S )Nisfiniter   r   s    r@   r   z&DuckDBExpr.is_finite.<locals>.<lambda>   s    1Z3F rB   r   rF   s    r@   	is_finitezDuckDBExpr.is_finite   s    %%&FGGrB   c                ,    | j                  fd      S )Nc                0    t        dt              |       S )Ncontainsr   )rL   others    r@   r   z"DuckDBExpr.is_in.<locals>.<lambda>   s    1ZUT3R rB   r   )r:   r   s    `r@   is_inzDuckDBExpr.is_in   s    %%&RSSrB   c                     ? j                   dk  rd d}t        |      	 	 	 	 	 	 d fd} j                  |      S dd} j                  ||      S )	NrV   z`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.c                    dk(  rdnd}dk(  r	 nd dfndf\  }} |       D cg c]1  }t        t        ||      |j                  |j                  ||d      3 c}S c c}w )Nforward
last_valuefirst_valuer   T)rO   rP   ignore_nulls)r   r   rM   rN   )	rb   inputs	fill_funcrO   rP   rL   limitr:   strategys	         r@   _fill_with_strategyz1DuckDBExpr.fill_null.<locals>._fill_with_strategy   s     -5	,AL}	  9,  %0eVdA>U %
H !%R
  &)T*++#-!)%)
 
 
s   6A#c                    t        | |      S r3   )r	   )rL   values     r@   _fill_constantz,DuckDBExpr.fill_null.<locals>._fill_constant	  s    #D%00rB   )r   )rb   r'   r   DuckDBWindowInputsrh   zSequence[Expression])rL   r    r   r   rh   r    )rZ   r[   _with_window_functionrz   )r:   r   r   r   r^   r   r   s   ` ``   r@   	fill_nullzDuckDBExpr.fill_null   s     $$v-3H:=de)#..#-?%* --.ABB	1 %%nE%BBrB   c                     d fd}d fd} j                  || j                   j                   j                        S )Nc                    t        | j                        }t        j                  |      } |       D cg c]  }|j	                  |       c}S c c}w r3   )r   nativer   r7   r   )rb   tznative_dtyperL   dtyper:   s       r@   re   zDuckDBExpr.cast.<locals>.func  sD    !")),B3E4=="ML8<RADIIl+AAAs   Ac                    t        | j                        }t        j                  |      }j	                  | |      D cg c]  }|j                  |       c}S c c}w r3   )r   r   r   r7   r<   r   )rb   r   r   r   rL   r   r:   s        r@   window_fz!DuckDBExpr.cast.<locals>.window_f  sN    !")),B3E4=="ML8<8L8LRQW8XYDIIl+YYYs   Arf   rg   )rb   r'   r   r   rh   ri   )	__class__r5   r6   r7   )r:   r   re   r   s   ``  r@   r   zDuckDBExpr.cast  sF    	B
	Z
 ~~"&"="=#77MM  
 	
rB   c                    t        |       S r3   r   rF   s    r@   strzDuckDBExpr.str!      (..rB   c                    t        |       S r3   r   rF   s    r@   dtzDuckDBExpr.dt%  s    *400rB   c                    t        |       S r3   r   rF   s    r@   listzDuckDBExpr.list)  s    &t,,rB   c                    t        |       S r3   r   rF   s    r@   structzDuckDBExpr.struct-  r   rB   r3   )r;   z'EvalSeries[DuckDBLazyFrame, Expression]r<   zDuckDBWindowFunction | Noner=   EvalNames[DuckDBLazyFrame]r>   zAliasNames | Noner?   r   r1   r   rh   None)rh   r    ) r   NN)rL   r    rM   Sequence[str | Expression]rN   r   rO   
int | NonerP   r   rI   Sequence[bool] | NonerJ   r   rh   r    )rh   r)   )r]   z/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]rh   r!   )rd   r   rk   r*   rh   r!   )rq   r   rk   r*   rh   r!   )rL   r    rc   r   rh   r    )rh   r!   )r   r   r   r.   rh   r!   )r   r   rh   r!   )r   zSequence[Any]rh   r!   )r   zSelf | NonNestedLiteralr   zFillNullStrategy | Noner   r   rh   r!   )r   r,   rh   r!   )rh   r   )rh   r   )rh   r   )rh   r   )"__name__
__module____qualname__r   DUCKDB_implementationrA   rG   rQ   rT   r_   classmethodrl   rs   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   rB   r@   r0   r0   4   s(   $++O
 8<M *8)>)>M5M 5M
  :M .M M 'M 
M", 46/1!%#
 -1,0

 1
 -	

 
 
 *
 *
 

*6
' 
9

 !
 

 
" 

 

    .)"I	)	).H	)		))=) 
)UEHT%C&%C *%C 	%C
 
%CN
& / / 1 1 - - / /rB   r0   )r'   r    )=
__future__r   rx   typingr   r   r   r   r   duckdbr	   r
   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   narwhals._expression_parsingr   r   narwhals._sql.exprr   narwhals._utilsr   r   collections.abcr   r    typing_extensionsr!   narwhals._compliantr"   narwhals._compliant.typingr#   r$   r%   r&   narwhals._duckdb.dataframer'   rS   r)   r*   narwhals.typingr+   r,   r-   r.   DuckDBWindowFunctionr   r0   r   rB   r@   <module>r     s    "  > > 3 @ > ? B   @ & 3(!&0  ;:/  */:*EF%j1{/89 {/rB   