
    hh.                       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mZmZ d d
lmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z& erTd dl'm(Z( d dl	m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl#m7Z7 d dl8m9Z9m:Z:m;Z;m<Z< e2e4e)f         Z=e-e)         Z> G d de"d                   Z?dS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)	DeferredTimeZoneFcolgenerate_order_by_sqllitnarwhals_to_native_dtypesql_expressionwhenwindow_expression)ExprKindExprMetadata)SQLExpr)ImplementationVersionextend_bool)Sequence)
Expression)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace)_LimitedContext)FillNullStrategy	IntoDTypeNonNestedLiteralRollingInterpolationMethodc                     e Zd Zej        Z	 dYej        ddZdZd[dZ	 	 	 	 d\dddd]d Zd^d$Z	d_d%Z
d_d&Zd`d(Zdad,Zedbd0            Zedcd3            Zeddd5            Zded6Zded7Zded8Zdfd=Zded>Zdgd@ZdgdAZdedBZdedCZdedDZdhdGZdidMZdjdPZedkdR            Z edldT            Z!edmdV            Z"edndX            Z#dS )o
DuckDBExprN)implementationcall'EvalSeries[DuckDBLazyFrame, Expression]window_functionDuckDBWindowFunction | Noneevaluate_output_namesEvalNames[DuckDBLazyFrame]alias_output_namesAliasNames | Noneversionr    r4   r   returnNonec               Z    || _         || _        || _        || _        d | _        || _        d S N)_call_evaluate_output_names_alias_output_names_version	_metadata_window_function)selfr5   r7   r9   r;   r=   r4   s          L/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_duckdb/expr.py__init__zDuckDBExpr.__init__9   s7     
&;##5 .2=L    r#   c                :    t          dt                                S Ncount)r   r
   rH   s    rI   _count_starzDuckDBExpr._count_starJ   s    .**+++rK    
descending
nulls_lastexprpartition_bySequence[str | Expression]order_by
rows_start
int | Nonerows_endrS   Sequence[bool] | NonerT   c          	     .    t          |||||||          S )NrR   )r   )rH   rU   rV   rX   rY   r[   rS   rT   s           rI   _window_expressionzDuckDBExpr._window_expressionM   s0     !!!
 
 
 	
rK   functionstrSequence[str]c                   t          dt          |                    }t          |||d}t          | d| d| d          S )NFrR   ( ))r!   lenr   r   )rH   r_   rU   rX   flagsorder_by_sqls         rI   _first_lastzDuckDBExpr._first_lastb   s]     E3x==11,%E
 
 
 BBDBB<BBBCCCrK   c                0    |                      d||          S )Nfirstri   rH   rU   rX   s      rI   _firstzDuckDBExpr._firstl   s    x888rK   c                0    |                      d||          S )Nlastrl   rm   s      rI   _lastzDuckDBExpr._lasto   s    h777rK   r,   c                0    ddl m}  || j                  S )Nr   r+   )r=   )narwhals._duckdb.namespacer,   rE   )rH   r,   s     rI   __narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__r   s)    >>>>>>t}5555rK   kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r$   c                    |t           j        u r| S | j        dk     rd}t          |          |                     t          d          gg           S )N      z`At least version 1.3 of DuckDB is required for binary operations between aggregates and columns.ry   )r   LITERAL_backend_versionNotImplementedErroroverr   )rH   ru   msgs      rI   	broadcastzDuckDBExpr.broadcastw   sR    8###K 6))tC%c***yy#a&&2&&&rK   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 rQ   r   ).0names     rI   
<listcomp>z>DuckDBExpr.from_column_names.<locals>.func.<locals>.<listcomp>   s    DDD$CIIDDDrK   rQ   )r   r   s    rI   funcz*DuckDBExpr.from_column_names.<locals>.func   s#    DD*?*?*C*CDDDDrK   r9   r;   r=   r   r*   r>   r   )rE   )clsr   r   r   s    `  rI   from_column_nameszDuckDBExpr.from_column_names   sQ    	E 	E 	E 	E 	E 	E s"7#$	
 
 
 	
rK   column_indicesintc               ^    dfd} | ||                                d |j                  S )Nr   r*   r>   r   c                0    | j         fdD             S )Nc                :    g | ]}t          |                   S rQ   r   )r   icolumnss     rI   r   z@DuckDBExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   s#    <<<C
OO<<<rK   )r   )r   r   r   s    @rI   r   z,DuckDBExpr.from_column_indices.<locals>.func   s%    jG<<<<^<<<<rK   r   r   )_eval_names_indicesrE   )r   r   r   r   s     ` rI   from_column_indiceszDuckDBExpr.from_column_indices   sY    	= 	= 	= 	= 	= 	= s"%"9"9."I"I#$	
 
 
 	
rK   r   c                ,    |                     |          S rA   )alias)r   rU   r   s      rI   _alias_nativezDuckDBExpr._alias_native   s    zz$rK   c                `    t          dt          j                  }|                     |          S )NzCallable[..., Expression])r   operatorinvert_with_elementwise)rH   r   s     rI   
__invert__zDuckDBExpr.__invert__   s(    18?CC%%f---rK   c                V      j         dd}d fd
}                     ||          S )NrU   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 	NrN   skewness   sqrtry   r   nang        )r   r   r   	otherwisefloat)rU   rN   sample_skewnesss      rI   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   rK   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   rV   r   appendr   r   r   )r   r   retrU   rN   r   WrH   s         rI   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      JrK   rU   r#   r>   r#   r   r*   r   r   r>   r   )r^   _with_callable)rH   r   r   r   s   `  @rI   skewzDuckDBExpr.skew   s[    #	 	 	 		 	 	 	 	 	 	& ""4222rK   c                .    |                      d           S )Nc                "    t          d|           S )Nkurtosis_popr   rU   s    rI   <lambda>z%DuckDBExpr.kurtosis.<locals>.<lambda>   s    .$0G0G rK   r   rO   s    rI   kurtosiszDuckDBExpr.kurtosis   s    ""#G#GHHHrK   quantiler   interpolationr1   c                >    dfd}|                      |          S )NrU   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   r}   )rU   r   r   r   s     rI   r   z!DuckDBExpr.quantile.<locals>.func   s9    (($H>>>XC%c***rK   r   r   )rH   r   r   r   s    `` rI   r   zDuckDBExpr.quantile   s=    	+ 	+ 	+ 	+ 	+ 	+ 	+ ""4(((rK   c                .    |                      d           S )Nc                     t          d          S rM   r   )_exprs    rI   r   z DuckDBExpr.len.<locals>.<lambda>   s    7 rK   r   rO   s    rI   rf   zDuckDBExpr.len   s    ""#;#;<<<rK   ddofc                   dk    r|                      d           S dk    r|                      d           S d	fd}|                      |          S )
Nr   c                "    t          d|           S )N
stddev_popr   r   s    rI   r   z DuckDBExpr.std.<locals>.<lambda>   s    AlD4I4I rK   ry   c                "    t          d|           S )Nstddev_sampr   r   s    rI   r   z DuckDBExpr.std.<locals>.<lambda>   s    AmT4J4J rK   rU   r#   r>   c                    t          d|           }t          d|           t          d|          z  t          d|t                    z
            z  S )NrN   r   r   r   r   rU   	n_samplesr   s     rI   _stdzDuckDBExpr.std.<locals>._std   sS    '4((I,%%FI&&'Vi#d))3557rK   r   r   )rH   r   r   s    ` rI   stdzDuckDBExpr.std   sy    199&&'I'IJJJ199&&'J'JKKK	 	 	 	 	 	 ""4(((rK   c                   dk    r|                      d           S dk    r|                      d           S d	fd}|                      |          S )
Nr   c                "    t          d|           S )Nvar_popr   r   s    rI   r   z DuckDBExpr.var.<locals>.<lambda>   s    Ai4F4F rK   ry   c                "    t          d|           S )Nvar_sampr   r   s    rI   r   z DuckDBExpr.var.<locals>.<lambda>   s    Aj$4G4G rK   rU   r#   r>   c                p    t          d|           }t          d|           |z  |t                    z
  z  S )NrN   r   r   r   s     rI   _varzDuckDBExpr.var.<locals>._var   s7    '4((IY%%	1YT5JKKrK   r   r   )rH   r   r   s    ` rI   varzDuckDBExpr.var   s    199&&'F'FGGG199&&'G'GHHH	L 	L 	L 	L 	L 	L ""4(((rK   c                .    |                      d           S )Nc                l    t          d|                                                     d                    S )Nsumr   )r   isnullr   r   s    rI   r   z'DuckDBExpr.null_count.<locals>.<lambda>   s&    %9K9KE9R9R0S0S rK   r   rO   s    rI   
null_countzDuckDBExpr.null_count   s    ""#S#STTTrK   c                .    |                      d           S )Nc                "    t          d|           S )Nisnanr   r   s    rI   r   z#DuckDBExpr.is_nan.<locals>.<lambda>   s    1Wd3C3C rK   r   rO   s    rI   is_nanzDuckDBExpr.is_nan   s    %%&C&CDDDrK   c                .    |                      d           S )Nc                "    t          d|           S )Nisfiniter   r   s    rI   r   z&DuckDBExpr.is_finite.<locals>.<lambda>   s    1Z3F3F rK   r   rO   s    rI   	is_finitezDuckDBExpr.is_finite   s    %%&F&FGGGrK   otherSequence[Any]c                4    |                      fd          S )Nc                @    t          dt                    |           S )Ncontainsr   )rU   r   s    rI   r   z"DuckDBExpr.is_in.<locals>.<lambda>  s    1ZUT3R3R rK   r   )rH   r   s    `rI   is_inzDuckDBExpr.is_in  s!    %%&R&R&R&RSSSrK   valueSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc                     = j         dk     rd d}t          |          d fd
}                     |          S dd}                     ||          S )Nrx   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)rY   r[   ignore_nulls)r   r   rV   rX   )r   rU   	fill_funcr   r[   rY   s     rI   r   zEDuckDBExpr.fill_null.<locals>._fill_with_strategy.<locals>.<listcomp>  s[     
 
 
  &)T**+#-!)%)  
 
 
rK   rQ   )r   r   r   r[   rY   r   rH   r   s    `@@@rI   _fill_with_strategyz1DuckDBExpr.fill_null.<locals>._fill_with_strategy  s     -5	,A,ALL}	  9,,  %0eVVdA>>U %
H

 
 
 
 
 
 
 !%R
 
 
 
rK   rU   r#   r   r   c                "    t          | |          S rA   )r	   )rU   r   s     rI   _fill_constantz,DuckDBExpr.fill_null.<locals>._fill_constant'  s    #D%000rK   )r   )r   r*   r   r   r>   r   )rU   r#   r   r   r>   r#   )r|   r}   _with_window_functionr   )rH   r   r   r   r   r   r   s   ` ``   rI   	fill_nullzDuckDBExpr.fill_null  s     $v--eHeee)#...       * --.ABBB	1 	1 	1 	1 %%nE%BBBrK   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 rQ   r   r   rU   native_dtypes     rI   r   z1DuckDBExpr.cast.<locals>.func.<locals>.<listcomp>0  s%    AAADIIl++AAArK   )r   nativer   rE   )r   tzr	  r  rH   s     @rI   r   zDuckDBExpr.cast.<locals>.func-  sH    !"),,B3E4="MMLAAAARAAAArK   r   r   c                    t          | j                  }t          j        |          fd                    | |          D             S )Nc                :    g | ]}|                               S rQ   r  r  s     rI   r   z5DuckDBExpr.cast.<locals>.window_f.<locals>.<listcomp>5  s%    YYYDIIl++YYYrK   )r   r
  r   rE   r7   )r   r   r  r	  r  rH   s      @rI   r   z!DuckDBExpr.cast.<locals>.window_f2  sQ    !"),,B3E4="MMLYYYY8L8LRQW8X8XYYYYrK   r   r   r   )	__class__rC   rD   rE   )rH   r  r   r   s   ``  rI   r   zDuckDBExpr.cast,  s    	B 	B 	B 	B 	B 	B 	B
	Z 	Z 	Z 	Z 	Z 	Z 	Z
 ~~"&"=#7M  
 
 	
rK   r   c                     t          |           S rA   r   rO   s    rI   r`   zDuckDBExpr.str?      (...rK   r   c                     t          |           S rA   r   rO   s    rI   dtzDuckDBExpr.dtC  s    *4000rK   r   c                     t          |           S rA   r   rO   s    rI   listzDuckDBExpr.listG  s    &t,,,rK   r   c                     t          |           S rA   r   rO   s    rI   structzDuckDBExpr.structK  r  rK   rA   )r5   r6   r7   r8   r9   r:   r;   r<   r=   r    r4   r   r>   r?   )r>   r#   )rQ   rQ   NN)rU   r#   rV   rW   rX   rW   rY   rZ   r[   rZ   rS   r\   rT   r\   r>   r#   )r_   r`   rU   r#   rX   ra   r>   r#   )rU   r#   rX   r`   r>   r#   )r>   r,   )ru   rv   r>   r$   )r   r:   r   r-   r>   r$   )r   r   r   r-   r>   r$   )rU   r#   r   r`   r>   r#   )r>   r$   )r   r   r   r1   r>   r$   )r   r   r>   r$   )r   r   r>   r$   )r   r   r   r   r   rZ   r>   r$   )r  r/   r>   r$   )r>   r   )r>   r   )r>   r   )r>   r   )$__name__
__module____qualname__r   DUCKDB_implementationrJ   rP   r^   ri   rn   rq   rt   r   classmethodr   r   r   r   r   r   r   rf   r   r   r   r   r   r   r  r   propertyr`   r  r  r  rQ   rK   rI   r3   r3   6   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N
 
 
 
& / / / X/ 1 1 1 X1 - - - X- / / / X/ / /rK   r3   )r*   r#   )@
__future__r   r   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   r   r   narwhals._expression_parsingr   r   narwhals._sql.exprr   narwhals._utilsr   r    r!   collections.abcr"   r#   typing_extensionsr$   narwhals._compliantr%   narwhals._compliant.typingr&   r'   r(   r)   narwhals._duckdb.dataframer*   rs   r,   r-   narwhals.typingr.   r/   r0   r1   DuckDBWindowFunctionr   r3   rQ   rK   rI   <module>r0     s   " " " " " "  > > > > > > > > > > > > > > 3 3 3 3 3 3 3 3 @ @ @ @ @ @ > > > > > > ? ? ? ? ? ? B B B B B B
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 @ ? ? ? ? ? ? ? & & & & & & @ @ @ @ @ @ @ @ @ @ 2((((((!!!!!!&&&&&&000000            ;::::::::::://////            */:*EF%j1W/ W/ W/ W/ W/89 W/ W/ W/ W/ W/rK   