
    -Ph                       d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlZd dlmZmZmZ d dlmZmZ d dlmZmZ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l"m#Z#m$Z$ d dl%m&Z& erd dlm'Z' d dl%m(Z( d dl)m*Z*m+Z+m,Z,  G d deeeej-        f                   Z. G d dedeef                   Z/ G d dedeef         e          Z0dS )    )annotationsN)reduce)chain)TYPE_CHECKINGCallableIterableSequence)CoalesceOperator
ExpressionFunctionExpression)BIGINTVARCHAR)LazyNamespaceLazyThenLazyWhenDuckDBLazyFrame
DuckDBExpr)DuckDBSelectorNamespace)
concat_strlitnarwhals_to_native_dtypewhen)combine_alias_output_namescombine_evaluate_output_names)Implementation)DuckDBWindowInputs)Version)ConcatMethod	IntoDTypeNonNestedLiteralc                      e Zd ZU ej        Zded<   d0d	Zed1d            Z	ed2d            Z
ed3d            Zd4dZd5dZd6dZd7d Zd7d!Zd7d"Zd7d#Zd7d$Zd7d%Zd8d(Zd9d-Zd:d.Zd/S );DuckDBNamespacer   _implementationbackend_versiontuple[int, ...]versionr   returnNonec               "    || _         || _        d S N)_backend_version_version)selfr&   r(   s      Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_duckdb/namespace.py__init__zDuckDBNamespace.__init__"   s     /    r   c                *    t          j        |           S r,   )r   from_namespacer/   s    r0   	selectorszDuckDBNamespace.selectors&   s    &5d;;;r2   type[DuckDBExpr]c                    t           S r,   r   r5   s    r0   _exprzDuckDBNamespace._expr*       r2   type[DuckDBLazyFrame]c                    t           S r,   r   r5   s    r0   
_lazyframezDuckDBNamespace._lazyframe.   s    r2   func,Callable[[Iterable[Expression]], Expression]exprsr   c                    d
fd}dfd}|                      ||t           t           | j        | j        	          S )Ndfr   r)   list[Expression]c                :      fdD             } |          gS )Nc              3  8   K   | ]} |          D ]}|V  d S r,    ).0r9   colrB   s      r0   	<genexpr>zBDuckDBNamespace._with_elementwise.<locals>.call.<locals>.<genexpr>6   s8      @@EeeBii@@sC@@@@@@@r2   rF   )rB   colsr@   r>   s   ` r0   callz/DuckDBNamespace._with_elementwise.<locals>.call5   s-    @@@@U@@@DDJJ<r2   window_inputsr   c                >      fdD             } |          gS )Nc              3  N   K   | ]}|                               D ]}|V   d S r,   )window_function)rG   r9   rH   rB   rL   s      r0   rI   zMDuckDBNamespace._with_elementwise.<locals>.window_function.<locals>.<genexpr><   sX        %2G2GM2Z2Z +.      r2   rF   )rB   rL   rJ   r@   r>   s   `` r0   rO   z:DuckDBNamespace._with_elementwise.<locals>.window_function9   sD        !&  D DJJ<r2   )rK   rO   evaluate_output_namesalias_output_namesr&   r(   rB   r   r)   rC   )rB   r   rL   r   r)   rC   r9   r   r   r-   r.   )r/   r>   r@   rK   rO   s    ``  r0   _with_elementwisez!DuckDBNamespace._with_elementwise2   s    	  	  	  	  	  	  	 	  	  	  	  	  	  	  zz+"?"G95A 1M  
 
 	
r2   itemsIterable[DuckDBLazyFrame]howr    r   c                  d |D             }t          |          }|d         }|j        |dk    r4t          fd|dd          D                       sd}t          |          t	          d |          }|                    |          S )Nc                    g | ]	}|j         
S rF   )_native_frame)rG   items     r0   
<listcomp>z*DuckDBNamespace.concat.<locals>.<listcomp>M   s    ===t*===r2   r   verticalc              3  .   K   | ]}|j         k    V  d S r,   )schema)rG   xr_   s     r0   rI   z)DuckDBNamespace.concat.<locals>.<genexpr>Q   s*      (O(OV);(O(O(O(O(O(Or2      z&inputs should all have the same schemac                ,    |                      |          S r,   )union)r`   ys     r0   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>T   s    !''!** r2   )listr_   all	TypeErrorr   _with_native)r/   rU   rW   native_itemsfirstmsgresr_   s          @r0   concatzDuckDBNamespace.concatJ   s     >=u===Ua*S(O(O(O(OU122Y(O(O(O%O%O:CC.. ,,l;;!!#&&&r2   	separatorstrignore_nullsboolc               |    dfd}|                      |t           t           | j        | j                  S )NrB   r   r)   rC   c                F    t          t          j         fdD                                 sct          t          j        d D                       }d fdt                    D             D             }t          | t          |           gS t          digS )Nc              3  .   K   | ]} |          V  d S r,   rF   )rG   exprrB   s     r0   rI   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>[   s+      +G+GDDHH+G+G+G+G+G+Gr2   c              3  >   K   | ]}|                                 V  d S r,   )isnull)rG   ss     r0   rI   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>]   s*      8R8R8R8R8R8R8R8Rr2   c                    g | ]	}|D ]}|
S rF   rF   )rG   r`   rd   s      r0   r\   z<DuckDBNamespace.concat_str.<locals>.func.<locals>.<listcomp>^   sA     	" 	" 	" 	" 	"  	" 	" 	" 	"r2   c                    g | ]_\  }}|t                    d z
  k    r|                    t                    fn(|                    t                    t                    f`S )ra   )lencastr   r   )rG   irH   rJ   ro   s      r0   r\   z<DuckDBNamespace.concat_str.<locals>.func.<locals>.<listcomp>`   sr        #As D		A-- '**,,!hhw//Y@  r2   ro   )	rf   r   from_iterabler   operatoror_	enumerater   r   )rB   null_mask_resultcols_separatedrJ   r@   rq   ro   s   `  @r0   r>   z(DuckDBNamespace.concat_str.<locals>.funcZ   s    ++G+G+G+G+G+G+GGGHHD @#)(,8R8RT8R8R8R#S#S 	" 	"     '0oo	  	" 	" 	" ..
N0KLLMM"D>I>>??r2   rK   rP   rQ   r&   r(   rR   rS   )r/   ro   rq   r@   r>   s    ``` r0   r   zDuckDBNamespace.concat_strW   sp    	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@$ zz"?"G95A 1M  
 
 	
r2   c                &    dd} | j         |g|R  S )NrJ   Iterable[Expression]r)   r   c                6    t          t          j        |           S r,   )r   r   and_rJ   s    r0   r>   z,DuckDBNamespace.all_horizontal.<locals>.funcu   s    (-...r2   rJ   r   r)   r   rT   r/   r@   r>   s      r0   all_horizontalzDuckDBNamespace.all_horizontalt   s3    	/ 	/ 	/ 	/ &t%d3U3333r2   c                &    dd} | j         |g|R  S )NrJ   r   r)   r   c                6    t          t          j        |           S r,   )r   r   r   r   s    r0   r>   z,DuckDBNamespace.any_horizontal.<locals>.func{   s    (,---r2   r   r   r   s      r0   any_horizontalzDuckDBNamespace.any_horizontalz   s3    	. 	. 	. 	. &t%d3U3333r2   c                &    dd} | j         |g|R  S )NrJ   r   r)   r   c                    t          dg| R  S )Ngreatestr   r   s    r0   r>   z,DuckDBNamespace.max_horizontal.<locals>.func   s    %j848888r2   r   r   r   s      r0   max_horizontalzDuckDBNamespace.max_horizontal   s3    	9 	9 	9 	9 &t%d3U3333r2   c                &    dd} | j         |g|R  S )NrJ   r   r)   r   c                    t          dg| R  S )Nleastr   r   s    r0   r>   z,DuckDBNamespace.min_horizontal.<locals>.func   s    %g55555r2   r   r   r   s      r0   min_horizontalzDuckDBNamespace.min_horizontal   s3    	6 	6 	6 	6 &t%d3U3333r2   c                &    dd} | j         |g|R  S )NrJ   r   r)   r   c                J    t          t          j        d | D                       S )Nc              3  P   K   | ]!}t          |t          d                     V  "dS r   Nr
   r   rG   rH   s     r0   rI   z?DuckDBNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>   s3      (W(W3)9#s1vv)F)F(W(W(W(W(W(Wr2   )r   r   addr   s    r0   r>   z,DuckDBNamespace.sum_horizontal.<locals>.func   s$    (,(W(WRV(W(W(WXXXr2   r   r   r   s      r0   sum_horizontalzDuckDBNamespace.sum_horizontal   s7    	Y 	Y 	Y 	Y &t%d3U3333r2   c                &    dd} | j         |g|R  S )NrJ   r   r)   r   c                    t          |           } t          t          j        d | D                       t          t          j        d | D                       z  S )Nc              3  P   K   | ]!}t          |t          d                     V  "dS r   r   r   s     r0   rI   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s3      MM/SVV<<MMMMMMr2   c              3  n   K   | ]0}|                                                     t                    V  1d S r,   )	isnotnullr}   r   r   s     r0   rI   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s8      %S%Sscmmoo&:&:6&B&B%S%S%S%S%S%Sr2   )rf   r   r   r   r   s    r0   r>   z-DuckDBNamespace.mean_horizontal.<locals>.func   sZ    ::DMMMMM x|%S%Sd%S%S%STTU Ur2   r   r   r   s      r0   mean_horizontalzDuckDBNamespace.mean_horizontal   s7    	U 	U 	U 	U &t%d3U3333r2   	predicate
DuckDBWhenc                :    t                               ||           S )N)context)r   	from_expr)r/   r   s     r0   r   zDuckDBNamespace.when   s    ##It#<<<r2   valuer"   dtypeIntoDType | Nonec                b     d fd}                      |d d  j         j                  S )	N_dfr   r)   rC   c                    7t                                        t          j                            gS t                    gS )N)r(   )r   r}   r   r.   )r   r   r/   r   s    r0   r>   z!DuckDBNamespace.lit.<locals>.func   sL     JJOO0NNN  
 JJ<r2   c                    dgS )NliteralrF   r   s    r0   re   z%DuckDBNamespace.lit.<locals>.<lambda>   s    yk r2   )rP   rQ   r&   r(   r   r   r)   rC   r9   r-   r.   )r/   r   r   r>   s   ``` r0   r   zDuckDBNamespace.lit   sa    	  	  	  	  	  	  	  	  zz"9"9# 1M  
 
 	
r2   c                T    dd}|                      |d d | j        | j                  S )	Nr   r   r)   rC   c                "    t          d          gS )Ncountr   r   s    r0   r>   z!DuckDBNamespace.len.<locals>.func   s    &w//00r2   c                    dgS )Nr|   rF   r   s    r0   re   z%DuckDBNamespace.len.<locals>.<lambda>   s    ug r2   r   r   r   )r/   r>   s     r0   r|   zDuckDBNamespace.len   sJ    	1 	1 	1 	1 zz"5"5# 1M  
 
 	
r2   N)r&   r'   r(   r   r)   r*   )r)   r   )r)   r7   )r)   r;   )r>   r?   r@   r   r)   r   )rU   rV   rW   r    r)   r   )r@   r   ro   rp   rq   rr   r)   r   )r@   r   r)   r   )r   r   r)   r   )r   r"   r   r   r)   r   )r)   r   )__name__
__module____qualname__r   DUCKDBr%   __annotations__r1   propertyr6   r9   r=   rT   rn   r   r   r   r   r   r   r   r   r   r|   rF   r2   r0   r$   r$      s         '5&;O;;;;        < < < X<    X    X
 
 
 
0' ' ' '
 
 
 
:4 4 4 44 4 4 44 4 4 44 4 4 44 4 4 44 4 4 4= = = =
 
 
 
$

 

 

 

 

 

r2   r$   c                  D     e Zd Zedd            Zd fdZd fd
Z xZS )r   r)   type[DuckDBThen]c                    t           S r,   )
DuckDBThenr5   s    r0   _thenzDuckDBWhen._then   r:   r2   rB   r   Sequence[Expression]c                v    t           | _         t          | _        t                                          |          S r,   )r   r   super__call__)r/   rB   	__class__s     r0   r   zDuckDBWhen.__call__   s)    	ww###r2   rL   r   c                x    t           | _         t          | _        t                                          ||          S r,   )r   r   r   _window_function)r/   rB   rL   r   s      r0   r   zDuckDBWhen._window_function   s-     	ww''M:::r2   )r)   r   )rB   r   r)   r   )rB   r   rL   r   r)   r   )r   r   r   r   r   r   r   __classcell__)r   s   @r0   r   r      sy           X$ $ $ $ $ $
; ; ; ; ; ; ; ; ; ;r2   r   r   c                      e Zd ZdS )r   N)r   r   r   rF   r2   r0   r   r      s          r2   r   )1
__future__r   r   	functoolsr   	itertoolsr   typingr   r   r   r	   duckdbr
   r   r   duckdb.typingr   r   narwhals._compliantr   r   r   narwhals._duckdb.dataframer   narwhals._duckdb.exprr   narwhals._duckdb.selectorsr   narwhals._duckdb.utilsr   r   r   r   narwhals._expression_parsingr   r   narwhals._utilsr   r   r   narwhals.typingr    r!   r"   DuckDBPyRelationr$   r   r   rF   r2   r0   <module>r      sR   " " " " " "              > > > > > > > > > > > >  C C C C C C C C C C ) ) ) ) ) ) ) ) A A A A A A A A A A 6 6 6 6 6 6 , , , , , , > > > > > > R R R R R R R R R R R R        + * * * * * J888888''''''IIIIIIIIII]
 ]
 ]
 ]
 ]
/:v/FFG]
 ]
 ]
@; ; ; ; ;+ZCD ; ; ;$ W V V V V+ZCDj V V V V Vr2   