
    }i0                       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rXd 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=dS )    )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	 	 	 	 daddddbd Zdcd$Z	ddd%Z
ddd&Zded)Zdfd+Zdgd-Zedhd1            Zedid4            Zedjd6            Zdgd7Zdgd8Zdgd9Zdkd>Zdgd?Zdgd@ZdgdAZdgdBZdldEZdmdKZdndNZdodUZedpdW            Z edqdY            Z!edrd[            Z"edsd]            Z#dS )t
DuckDBExprN)implementationcall'EvalSeries[DuckDBLazyFrame, Expression]window_functionDuckDBWindowFunction | Noneevaluate_output_namesEvalNames[DuckDBLazyFrame]alias_output_namesAliasNames | Noneversionr   r2   r   returnNonec               L    || _         || _        || _        || _        || _        d S N)_call_evaluate_output_names_alias_output_names_version_window_function)selfr3   r5   r7   r9   r;   r2   s          I/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_duckdb/expr.py__init__zDuckDBExpr.__init__4   s0     
&;##5 =L    r!   c                :    t          dt                                S Ncount)r   r	   rE   s    rF   _count_starzDuckDBExpr._count_starD   s    .**+++rH    
descending
nulls_lastexprpartition_bySequence[str | Expression]order_by
rows_start
int | Nonerows_endrP   Sequence[bool] | NonerQ   c          	     .    t          |||||||          S )NrO   )r   )rE   rR   rS   rU   rV   rX   rP   rQ   s           rF   _window_expressionzDuckDBExpr._window_expressionG   s0     !!!
 
 
 	
rH   functionstrSequence[str]c                   t          dt          |                    }t          |||d}t          | d| d| d          S )NFrO   ( ))r   lenr   r   )rE   r\   rR   rU   flagsorder_by_sqls         rF   _first_lastzDuckDBExpr._first_last\   s]     E3x==11,%E
 
 
 BBDBB<BBBCCCrH   c                0    |                      d||          S )Nfirstrf   rE   rR   rU   s      rF   _firstzDuckDBExpr._firstf   s    x888rH   c                0    |                      d||          S )Nlastri   rj   s      rF   _lastzDuckDBExpr._lasti   s    h777rH   ignore_nullsboolc               ^    |r|                      d|          n|                      d|          S )N	any_valuerh   )	_function)rE   rR   ro   s      rF   
_any_valuezDuckDBExpr._any_valuel   s5    
 /DNN;---..	
rH   r*   c                0    ddl m}  || j                  S )Nr   r)   )r;   )narwhals._duckdb.namespacer*   rC   )rE   r*   s     rF   __narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__u   s)    >>>>>>t}5555rH   r"   c                J    |                      t          d          gg           S )N   )overr   rL   s    rF   	broadcastzDuckDBExpr.broadcastz   s    yy#a&&2&&&rH   evaluate_column_namescontextr,   c              8    dfd} | |d |j                   S )Ndfr(   r<   list[Expression]c                .    d  |           D             S )Nc                ,    g | ]}t          |          S rN   r   ).0names     rF   
<listcomp>z>DuckDBExpr.from_column_names.<locals>.func.<locals>.<listcomp>   s    DDD$CIIDDDrH   rN   )r   r|   s    rF   funcz*DuckDBExpr.from_column_names.<locals>.func   s#    DD*?*?*C*CDDDDrH   r7   r9   r;   r   r(   r<   r   )rC   )clsr|   r}   r   s    `  rF   from_column_nameszDuckDBExpr.from_column_names}   sQ    	E 	E 	E 	E 	E 	E s"7#$	
 
 
 	
rH   column_indicesintc               ^    dfd} | ||                                d |j                  S )Nr   r(   r<   r   c                0    | j         fdD             S )Nc                :    g | ]}t          |                   S rN   r   )r   icolumnss     rF   r   z@DuckDBExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   s#    <<<C
OO<<<rH   )r   )r   r   r   s    @rF   r   z,DuckDBExpr.from_column_indices.<locals>.func   s%    jG<<<<^<<<<rH   r   r   )_eval_names_indicesrC   )r   r}   r   r   s     ` rF   from_column_indiceszDuckDBExpr.from_column_indices   sY    	= 	= 	= 	= 	= 	= s"%"9"9."I"I#$	
 
 
 	
rH   r   c                ,    |                     |          S r?   )alias)r   rR   r   s      rF   _alias_nativezDuckDBExpr._alias_native   s    zz$rH   c                `    t          dt          j                  }|                     |          S )NzCallable[..., Expression])r   operatorinvert_with_elementwise)rE   r   s     rF   
__invert__zDuckDBExpr.__invert__   s(    18?CC%%f---rH   c                V      j         dd}d fd
}                     ||          S )NrR   r!   r<   c           
     H   t          d|           }t          d|           |t          d          z
  z  t          d||t          d          z
  z            z  }t          |t          d          k    t          d                                         t          |t          d          k    t          t	          d                                                  t          |t          d          k    t          d                                        |                              S 	NrK   skewness   sqrtry   r   nang        )r   r   r   	otherwisefloat)rR   rK   sample_skewnesss      rF   r   zDuckDBExpr.skew.<locals>.func   s    gt$$E *d##3q66>#FEUSVV^4556 
 QT33==Uc!ff_c%,,&7&788BB#a&&#c((33==oNN   rH   r   r(   inputsDuckDBWindowInputsr   c                   g } |           D ]W} t          d|          |j                  } t          d|          |j                  |t          d          z
  z  t          d||t          d          z
  z            z  }|                    t	          |t          d          k    t          d                                         t	          |t          d          k    t          t          d                                                  t	          |t          d          k    t          d                                        |                                         Y|S r   )r   rS   r   appendr   r   r   )r   r   retrR   rK   r   WrE   s         rF   window_fz!DuckDBExpr.skew.<locals>.window_f   sD   CR  !GT**F,?@@ Aa
D))6+>??s1vv~'Q 899:  
 

#a&&#d))44>>Uc!ff_c%,,.?.?@@JJ #a&&#c((;;EEoVV      JrH   rR   r!   r<   r!   r   r(   r   r   r<   r   )r[   _with_callable)rE   r   r   r   s   `  @rF   skewzDuckDBExpr.skew   s[    #	 	 	 		 	 	 	 	 	 	& ""4222rH   c                .    |                      d           S )Nc                "    t          d|           S )Nkurtosis_popr   rR   s    rF   <lambda>z%DuckDBExpr.kurtosis.<locals>.<lambda>   s    .$0G0G rH   r   rL   s    rF   kurtosiszDuckDBExpr.kurtosis   s    ""#G#GHHHrH   quantiler   interpolationr/   c                >    dfd}|                      |          S )NrR   r!   r<   c                n    dk    rt          d| t                              S d}t          |          )Nlinearquantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)r   r   NotImplementedError)rR   msgr   r   s     rF   r   z!DuckDBExpr.quantile.<locals>.func   s9    (($H>>>XC%c***rH   r   r   )rE   r   r   r   s    `` rF   r   zDuckDBExpr.quantile   s=    	+ 	+ 	+ 	+ 	+ 	+ 	+ ""4(((rH   c                .    |                      d           S )Nc                     t          d          S rJ   r   )_exprs    rF   r   z DuckDBExpr.len.<locals>.<lambda>   s    7 rH   r   rL   s    rF   rc   zDuckDBExpr.len   s    ""#;#;<<<rH   c                .    |                      d           S )Nc                l    t          d|                                                     d                    S )Nsumr   )r   isnullr   r   s    rF   r   z'DuckDBExpr.null_count.<locals>.<lambda>   s&    %9K9KE9R9R0S0S rH   r   rL   s    rF   
null_countzDuckDBExpr.null_count   s    ""#S#STTTrH   c                .    |                      d           S )Nc                "    t          d|           S )Nisnanr   r   s    rF   r   z#DuckDBExpr.is_nan.<locals>.<lambda>   s    1Wd3C3C rH   r   rL   s    rF   is_nanzDuckDBExpr.is_nan   s    %%&C&CDDDrH   c                .    |                      d           S )Nc                "    t          d|           S )Nisfiniter   r   s    rF   r   z&DuckDBExpr.is_finite.<locals>.<lambda>   s    1Z3F3F rH   r   rL   s    rF   	is_finitezDuckDBExpr.is_finite   s    %%&F&FGGGrH   otherSequence[Any]c                4    |                      fd          S )Nc                @    t          dt                    |           S )Ncontains)r   r   )rR   r   s    rF   r   z"DuckDBExpr.is_in.<locals>.<lambda>   s    1ZUT3R3R rH   r   )rE   r   s    `rF   is_inzDuckDBExpr.is_in   s!    %%&R&R&R&RSSSrH   valueSelf | NonestrategyFillNullStrategy | Nonelimitc                     = j         dk     rd d}t          |          d fd
}                     |          S dd}|J                      ||          S )N)ry      z`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.r   r(   r   r   r<   Sequence[Expression]c                    dk    rdnddk    r	 nd dfndf\  fd |           D             S )Nforward
last_valuefirst_valuer   c           
     j    g | ]/}t          t          |          j        j        d           0S )T)rV   rX   ro   )r   r   rS   rU   )r   rR   	fill_funcr   rX   rV   s     rF   r   zEDuckDBExpr.fill_null.<locals>._fill_with_strategy.<locals>.<listcomp>   s[     
 
 
  &)T**+#-!)%)  
 
 
rH   rN   )r   r   r   rX   rV   r   rE   r   s    `@@@rF   _fill_with_strategyz1DuckDBExpr.fill_null.<locals>._fill_with_strategy   s     -5	,A,ALL}	  9,,  %0eVVdA>>U %
H

 
 
 
 
 
 
 !%R
 
 
 
rH   rR   r!   r   r   c                "    t          | |          S r?   )r   )rR   r   s     rF   _fill_constantz,DuckDBExpr.fill_null.<locals>._fill_constant  s    #D%000rH   )r   )r   r(   r   r   r<   r   )rR   r!   r   r   r<   r!   )_backend_versionr   _with_window_functionr   )rE   r   r   r   r   r   r   s   ` ``   rF   	fill_nullzDuckDBExpr.fill_null   s     $v--eHeee)#...       * --.ABBB	1 	1 	1 	1    %%nE%BBBrH   dtyper.   c                t     d
 fd}d fd}                      || j         j         j        	          S )Nr   r(   r<   r   c                    t          | j                  }t          j        |          fd |           D             S )Nc                :    g | ]}|                               S rN   r   r   rR   native_dtypes     rF   r   z1DuckDBExpr.cast.<locals>.func.<locals>.<listcomp>  s%    AAADIIl++AAArH   )r   nativer   rC   )r   tzr   r   rE   s     @rF   r   zDuckDBExpr.cast.<locals>.func  sH    !"),,B3E4="MMLAAAARAAAArH   r   r   c                    t          | j                  }t          j        |          fd                    | |          D             S )Nc                :    g | ]}|                               S rN   r   r   s     rF   r   z5DuckDBExpr.cast.<locals>.window_f.<locals>.<listcomp>  s%    YYYDIIl++YYYrH   )r   r   r   rC   r5   )r   r   r   r   r   rE   s      @rF   r   z!DuckDBExpr.cast.<locals>.window_f  sQ    !"),,B3E4="MMLYYYY8L8LRQW8X8XYYYYrH   r   r   r   )	__class__rA   rB   rC   )rE   r   r   r   s   ``  rF   r   zDuckDBExpr.cast  s    	B 	B 	B 	B 	B 	B 	B
	Z 	Z 	Z 	Z 	Z 	Z 	Z
 ~~"&"=#7M  
 
 	
rH   defaultDuckDBExpr | NoDefaultoldnewreturn_dtypeIntoDType | Nonec               :   	 t           u rd}t          |          t          t          |                    t          t          |                    c	}t	          d	|          d		 fd}                     |d  j         j         j                  S )
NzM`replace_strict` requires an explicit value for `default` for duckdb backend.mapr   r(   r<   r   c                    |                                fd 	|           D             }r8t          | j                  }t          	j        |          fd|D             S |S )Nc                    g | ]_}t          t          d |          t          dt          d|          t          d                                                            `S )r   list_extractmap_extractry   )r   r   r   r   )r   rR   default_colmapping_exprold_s     rF   r   z;DuckDBExpr.replace_strict.<locals>.func.<locals>.<listcomp>1  sw         j$-- na|T&J&JCPQFFSS	 
 )K((  rH   c                :    g | ]}|                               S rN   r   )r   resr   s     rF   r   z;DuckDBExpr.replace_strict.<locals>.func.<locals>.<listcomp>>  s%    BBB3..BBBrH   )_evaluate_single_output_exprr   r   r   rC   )
r   resultsr   r  r   r   r  r  r   rE   s
      @@rF   r   z'DuckDBExpr.replace_strict.<locals>.func.  s    99'BBK      !DHH  G  C%bi007dmUWXXBBBB'BBBBNrH   r   r   )	r   
ValueErrorr   listr   r   rA   rB   rC   )
rE   r   r   r   r   r   new_r   r  r  s
   ``  `   @@rF   replace_strictzDuckDBExpr.replace_strict  s     j  aCS//!c^^Sc^^
dd++	 	 	 	 	 	 	 	 	 	& ~~"&"=#7M  
 
 	
rH   r   c                     t          |           S r?   r   rL   s    rF   r]   zDuckDBExpr.strI      (...rH   r   c                     t          |           S r?   r
   rL   s    rF   dtzDuckDBExpr.dtM  s    *4000rH   r   c                     t          |           S r?   r   rL   s    rF   r  zDuckDBExpr.listQ  s    &t,,,rH   r   c                     t          |           S r?   r   rL   s    rF   structzDuckDBExpr.structU  r  rH   r?   )r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r2   r   r<   r=   )r<   r!   )rN   rN   NN)rR   r!   rS   rT   rU   rT   rV   rW   rX   rW   rP   rY   rQ   rY   r<   r!   )r\   r]   rR   r!   rU   r^   r<   r!   )rR   r!   rU   r]   r<   r!   )rR   r!   ro   rp   r<   r!   )r<   r*   )r<   r"   )r|   r8   r}   r,   r<   r"   )r   r   r}   r,   r<   r"   )rR   r!   r   r]   r<   r!   )r   r   r   r/   r<   r"   )r   r   r<   r"   )r   r   r   r   r   rW   r<   r"   )r   r.   r<   r"   )
r   r   r   r   r   r   r   r   r<   r"   )r<   r   )r<   r   )r<   r   )r<   r   )$__name__
__module____qualname__r   DUCKDB_implementationrG   rM   r[   rf   rk   rn   rt   rw   r{   classmethodr   r   r   r   r   r   r   rc   r   r   r   r   r   r   r  propertyr]   r  r  r  rN   rH   rF   r1   r1   1   s       $+O
 8<M *8)>M M M M M M , , , , 46/1!%#
 -1,0
 
 
 
 
 
*D D D D9 9 9 98 8 8 8
 
 
 
6 6 6 6
' ' ' ' 
 
 
 [
" 

 

 

 [

       [ . . . .$3 $3 $3 $3LI I I I	) 	) 	) 	)= = = =U U U UE E E EH H H HT T T T#C #C #C #CJ
 
 
 
&(
 (
 (
 (
T / / / X/ 1 1 1 X1 - - - X- / / / X/ / /rH   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(   rv   r*   narwhals._typingr+   r,   narwhals.typingr-   r.   r/   DuckDBWindowFunctionr   r1   rN   rH   rF   <module>r0     s   " " " " " "  5 5 5 5 5 5 5 5 5 5 5 5 3 3 3 3 3 3 3 3 @ @ @ @ @ @ > > > > > > ? ? ? ? ? ? B B B B B B
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ' & & & & & L L L L L L L L L L L L 2((((((!!!!!!&&&&&&000000            ;:::::::::::******//////WWWWWWWWWW)/:*EF%j1f/ f/ f/ f/ f/89 f/ f/ f/ f/ f/rH   