
    ei0                       d dl mZ d dlZd dl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mZmZ d d
lmZ d dlm Z m!Z!m"Z"m#Z# erRd 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l4m5Z5 d dlm6Z6 d dl7m8Z8m9Z9m:Z: e/e1e&f   Z;e*e&   Z< G d ded         Z=y)    )annotationsN)TYPE_CHECKINGAnyCallablecast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)	DeferredTimeZoneFcolgenerate_order_by_sqllitnarwhals_to_native_dtypesql_expressionwhenwindow_expression)SQLExpr)ImplementationVersionextend_bool
no_default)Sequence)
Expression)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace)	NoDefault)_LimitedContext)FillNullStrategy	IntoDType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
d&d	Z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d0dZ	 	 	 	 	 	 	 	 	 	 d1dZed2d       Z ed3d       Z!ed4d       Z"ed5d       Z#y)6
DuckDBExprN)implementationc               J    || _         || _        || _        || _        || _        y N)_call_evaluate_output_names_alias_output_names_version_window_function)selfcallwindow_functionevaluate_output_namesalias_output_namesversionr2   s          W/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_duckdb/expr.py__init__zDuckDBExpr.__init__4   s*     
&;##5 =L    c                *    t        dt                     S Ncount)r   r	   r:   s    r@   _count_starzDuckDBExpr._count_starD   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_expressionG   s&     !!!
 	
rB   c               l    t        dt        |            }t        |||d}t        | d| d| d      S )NFrH   ( ))r   lenr   r   )r:   functionrL   rN   flagsorder_by_sqls         r@   _first_lastzDuckDBExpr._first_last\   sE     E3x=1,%E
 
!D6<.BCCrB   c                (    | j                  d||      S )NfirstrZ   r:   rL   rN   s      r@   _firstzDuckDBExpr._firstf   s    x88rB   c                (    | j                  d||      S )Nlastr]   r^   s      r@   _lastzDuckDBExpr._lasti   s    h77rB   c               N    |r| j                  d|      S | j                  d|      S )N	any_valuer\   )	_function)r:   rL   ignore_nullss      r@   
_any_valuezDuckDBExpr._any_valuel   s1    
  NN;-	
 .	
rB   c                4    ddl m}  || j                        S )Nr   r)   )r?   )narwhals._duckdb.namespacer*   r8   )r:   r*   s     r@   __narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__u   s    >t}}55rB   c                :    | j                  t        d      gg       S )N   )overr   rF   s    r@   	broadcastzDuckDBExpr.broadcastz   s    yy#a&2&&rB   c              <    dfd} | |d |j                         S )Nc                L     |       D cg c]  }t        |       c}S c c}w r4   )r   )dfnameevaluate_column_namess     r@   funcz*DuckDBExpr.from_column_names.<locals>.func   s     *?*CD$CIDDDs   !r=   r>   r?   rq   r(   returnlist[Expression])r8   )clsrs   contextrt   s    `  r@   from_column_nameszDuckDBExpr.from_column_names}   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 r4   )columnsr   )rq   r~   icolumn_indicess      r@   rt   z,DuckDBExpr.from_column_indices.<locals>.func   s(    jjG-;<C
O<<<s   *ru   rv   )_eval_names_indicesr8   )ry   rz   r   rt   s     ` r@   from_column_indiceszDuckDBExpr.from_column_indices   s4    	= "%"9"9."I#$$	
 	
rB   c                $    |j                  |      S r4   )alias)ry   rL   rr   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:   r   s     r@   
__invert__zDuckDBExpr.__invert__   s$    18??C%%f--rB   c                X      j                   dd}d f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   sqrtrl   r   nang        )r   r   r   	otherwisefloat)rL   rE   sample_skewnesss      r@   rt   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   c                <   g } |       D ]  } t        d|      |j                        } t        d|      |j                        |t        d      z
  z  t        d||t        d      z
  z        z  }|j                  t	        |t        d      k(  t        d             j                  t	        |t        d      k(  t        t        d                  j                  t	        |t        d      k(  t        d            j                  |                          |S r   )r   rM   r   appendr   r   r   )rq   inputsretrL   rE   r   Wr:   s         r@   window_fz!DuckDBExpr.skew.<locals>.window_f   s    CR !GT*F,?,?@ a
D)6+>+>?s1v~'Q 89:  
 

#a&#d)4>>Uc!f_c%,.?@JJ #a&#c(;EEoV JrB   rL   r!   rw   r!   rq   r(   r   DuckDBWindowInputsrw   rx   )rQ   _with_callable)r:   rt   r   r   s   `  @r@   skewzDuckDBExpr.skew   s-    ##		& ""422rB   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   NotImplementedError)rL   msginterpolationquantiles     r@   rt   z!DuckDBExpr.quantile.<locals>.func   s.    ($H>>XC%c**rB   r   r   )r:   r   r   rt   s    `` r@   r   zDuckDBExpr.quantile   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@   rV   zDuckDBExpr.len   s    ""#;<<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   r   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contains)r   r   )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  j                  ||      S )	N)rl      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   rf   )r   r   rM   rN   )	rq   r   	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 r4   )r   )rL   values     r@   _fill_constantz,DuckDBExpr.fill_null.<locals>._fill_constant  s    #D%00rB   )r   )rq   r(   r   r   rw   zSequence[Expression])rL   r!   r   r   rw   r!   )_backend_versionr   _with_window_functionr   )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 r4   )r   nativer   r8   r   )rq   tznative_dtyperL   dtyper:   s       r@   rt   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 r4   )r   r   r   r8   r<   r   )rq   r   r   r   rL   r   r:   s        r@   r   z!DuckDBExpr.cast.<locals>.window_f  sN    !")),B3E4=="ML8<8L8LRQW8XYDIIl+YYYs   Aru   rv   r   )	__class__r6   r7   r8   )r:   r   rt   r   s   ``  r@   r   zDuckDBExpr.cast  sF    	B
	Z
 ~~"&"="=#77MM  
 	
rB   c                  	 t         u rd}t        |      t        t        |            t        t        |            c	}t	        d	|      d	 fd} j                  |d  j                   j                   j                        S )NzM`replace_strict` requires an explicit value for `default` for duckdb backend.mapc                   | j                        } |       D cg c]G  }t        t        d	|      t        dt        d|      t        d                  j	                  |      I }}
rKt        | j                        }t        
j                  |      }|D cg c]  }|j                  |       c}S |S c c}w c c}w )Nr   list_extractmap_extractrl   )
_evaluate_single_output_exprr   r   r   r   r   r   r   r8   r   )rq   default_colrL   resultsr   r   resdefaultmapping_exprold_return_dtyper:   s          r@   rt   z'DuckDBExpr.replace_strict.<locals>.func.  s    99'BK !H  j$- na|T&JCPQFS	
 )K()G  %bii07dmmUWX:AB3.BBN Cs   AB:B?ru   rv   )	r   
ValueErrorr   listr   r   r6   r7   r8   )
r:   r   oldnewr   r   new_rt   r   r   s
   ``  `   @@r@   replace_strictzDuckDBExpr.replace_strict  s     j aCS/!c^Sc^
dd+	 	& ~~"&"="=#77MM  
 	
rB   c                    t        |       S r4   r   rF   s    r@   strzDuckDBExpr.strI      (..rB   c                    t        |       S r4   r
   rF   s    r@   dtzDuckDBExpr.dtM  s    *400rB   c                    t        |       S r4   r   rF   s    r@   r   zDuckDBExpr.listQ  s    &t,,rB   c                    t        |       S r4   r   rF   s    r@   structzDuckDBExpr.structU  r   rB   r4   )r;   z'EvalSeries[DuckDBLazyFrame, Expression]r<   zDuckDBWindowFunction | Noner=   EvalNames[DuckDBLazyFrame]r>   zAliasNames | Noner?   r   r2   r   rw   None)rw   r!   ) r   NN)rL   r!   rM   Sequence[str | Expression]rN   r   rO   
int | NonerP   r   rI   Sequence[bool] | NonerJ   r   rw   r!   )rW   r   rL   r!   rN   zSequence[str]rw   r!   )rL   r!   rN   r   rw   r!   )rL   r!   rf   boolrw   r!   )rw   r*   )rw   r"   )rs   r   rz   r,   rw   r"   )r   r   rz   r,   rw   r"   )rL   r!   rr   r   rw   r!   )r   r   r   r/   rw   r"   )r   Sequence[Any]rw   r"   )r   zSelf | Noner   zFillNullStrategy | Noner   r   rw   r"   )r   r.   rw   r"   )
r   zDuckDBExpr | NoDefaultr   r  r   r  r   zIntoDType | Nonerw   r"   )rw   r   )rw   r   )rw   r   )rw   r   )$__name__
__module____qualname__r   DUCKDB_implementationrA   rG   rQ   rZ   r_   rb   rg   rj   rn   classmethodr{   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   propertyr   r   r   r   r   rB   r@   r1   r1   1   s   $++O
 8<M *8)>)>M5M 5M
  :M .M M 'M 
M , 46/1!%#
 -1,0

 1
 -	

 
 
 *
 *
 

*DD#-D9FD	D98
6
' 
9

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