
    Wh              	         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	 d dl
Z
d dl
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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% d dl&m'Z' erd dl(m)Z) 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def         Z0 G d de%deef         Z1 G d de$deef   e      Z2y)    )annotationsN)reduce)chain)TYPE_CHECKINGAny)CoalesceOperator
Expression)BIGINTVARCHARDuckDBLazyFrame
DuckDBExpr)DuckDBSelectorNamespace)DeferredTimeZoneF
concat_strfunctionlitnarwhals_to_native_dtypewhen)combine_alias_output_namescombine_evaluate_output_names)SQLNamespace)SQLThenSQLWhen)Implementation)Iterable)DuckDBPyRelation)Version)ConcatMethod	IntoDTypeNonNestedLiteralc                      e Zd ZU ej                  Zded<   ddZedd       Z	edd       Z
edd       ZddZddZ	 d	 	 	 	 	 	 	 dd
ZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZddZddZd dZy	)!DuckDBNamespacer   _implementationc                   || _         y N)_version)selfversions     T/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_duckdb/namespace.py__init__zDuckDBNamespace.__init__.   s	        c                ,    t        j                  |       S r(   )r   from_namespacer*   s    r,   	selectorszDuckDBNamespace.selectors1   s    &55d;;r.   c                    t         S r(   r   r1   s    r,   _exprzDuckDBNamespace._expr5       r.   c                    t         S r(   r   r1   s    r,   
_lazyframezDuckDBNamespace._lazyframe9   s    r.   c                    t        |g| S r(   )r   )r*   nameargss      r,   	_functionzDuckDBNamespace._function=   s    $t$$r.   c                    t        |      S r(   )r   )r*   values     r,   _litzDuckDBNamespace._lit@   s    5zr.   Nc                T    |t        ||      S t        ||      j                  |      S r(   )r   	otherwise)r*   	conditionr=   r@   s       r,   _whenzDuckDBNamespace._whenC   s/     	5))Iu%//	::r.   c                    t        | S r(   )r   )r*   exprss     r,   	_coalescezDuckDBNamespace._coalesceM   s    ''r.   c                 	 |D cg c]  }|j                    }}t        |      }|d   }|j                  	|dk(  r$t        	fd|dd  D              sd}t	        |      |dk(  r<|j
                  }|dd  D ]  }t        j                  d      } |j                  |      S t        d |      }|j                  |      S c c}w )	Nr   verticalc              3  <   K   | ]  }|j                   k(    y wr(   )schema).0xrI   s     r,   	<genexpr>z)DuckDBNamespace.concat.<locals>.<genexpr>W   s     (OV);(Os      z&inputs should all have the same schemadiagonalz]
                    from res select * union all by name from _item select *
                c                $    | j                  |      S r(   )union)rK   ys     r,   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>b   s    !''!* r.   )
_native_framelistrI   all	TypeErrornativeduckdbsql_with_nativer   )
r*   itemshowitemnative_itemsfirstmsgres_itemrI   s
            @r,   concatzDuckDBNamespace.concatP   s     8==t**==Ua*S(OU12Y(O%O:CC. *,,C%ab) jj " 
 %%c**,l;!!#&&! >s   B?c               n    dfd}| j                  |t         t         | j                        S )Nc                    t        t        j                   fdD                    }	st        t        j
                  d |D              }t        |      D cg c]L  \  }}|t        |      dz
  k(  r|j                  t              fn|j                  t              t        
      fN c}}D cg c]  }|D ]  }|  }}}t        | t        |       gS t        |d
igS c c}}w c c}}w )Nc              3  .   K   | ]  } |        y wr(    )rJ   exprdfs     r,   rL   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>i   s     +GDH+Gs   c              3  <   K   | ]  }|j                           y wr(   )isnull)rJ   ss     r,   rL   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>k   s     8R8Rs   rM   	separator)rT   r   from_iterabler   operatoror_	enumeratelencastr   r   r   r   )ri   colsnull_mask_resulticolrK   rQ   cols_separatedrD   ignore_nullsrm   s   `       r,   funcz(DuckDBNamespace.concat_str.<locals>.funch   s    +++G+GGHD#)(,,8RT8R#S  '0o	 #As D	A- '*,!hhw/Y@A	" 	"  	"	" 	" ..
N0KLMM:	:;;	"s   AC&3C,callevaluate_output_namesalias_output_namesr+   ri   r   returnlist[Expression])r4   r   r   r)   )r*   rm   ry   rD   rz   s    ``` r,   r   zDuckDBNamespace.concat_stre   s:    	<" zz"?"G95AMM	  
 	
r.   c                D    dd} | j                   j                  |g| S )Nc                    t        |       } t        t        j                  d | D              t        t        j                  d | D              z  S )Nc              3  F   K   | ]  }t        |t        d               yw)r   N)r   r   rJ   rw   s     r,   rL   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s     M/SV<Ms   !c              3  b   K   | ]'  }|j                         j                  t               ) y wr(   )	isnotnullrs   r
   r   s     r,   rL   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s!     %Sscmmo&:&:6&B%Ss   -/)rT   r   ro   add)rt   s    r,   rz   z-DuckDBNamespace.mean_horizontal.<locals>.func   sB    :DMMx||%Sd%STU Ur.   )rt   zIterable[Expression]r   r	   )r4   _from_elementwise_horizontal_op)r*   rD   rz   s      r,   mean_horizontalzDuckDBNamespace.mean_horizontal   s&    	U :tzz99$GGGr.   c                0    t         j                  ||       S )N)context)
DuckDBWhen	from_expr)r*   	predicates     r,   r   zDuckDBNamespace.when   s    ##It#<<r.   c                X     d fd} j                  |d d  j                        S )Nc                    t        | j                        }2t        j                  |      }t	              j                  |      gS t	              gS r(   )r   rW   r   r)   r   rs   )ri   tztargetdtyper*   r=   s      r,   rz   z!DuckDBNamespace.lit.<locals>.func   sK    !")),B 1%KE
/00J<r.   c                    dgS )Nliteralrg   _dfs    r,   rR   z%DuckDBNamespace.lit.<locals>.<lambda>   s    yk r.   )r}   r~   r+   r   r4   r)   )r*   r=   r   rz   s   ``` r,   r   zDuckDBNamespace.lit   s0    	  zz"9#MM	  
 	
r.   c                J    dd}| j                  |d d | j                        S )Nc                    t        d      gS )Ncount)r   r   s    r,   rz   z!DuckDBNamespace.len.<locals>.func   s    gJ<r.   c                    dgS )Nrr   rg   r   s    r,   rR   z%DuckDBNamespace.len.<locals>.<lambda>   s    ug r.   r{   )r   r   r   r   r   )r*   rz   s     r,   rr   zDuckDBNamespace.len   s/    	  zz"5#MM	  
 	
r.   )r+   r    r   None)r   r   )r   ztype[DuckDBExpr])r   ztype[DuckDBLazyFrame])r9   strr:   r	   r   r	   )r=   r   r   r	   r(   )rA   r	   r=   r	   r@   zExpression | Noner   r	   )rD   r	   r   r	   )r[   zIterable[DuckDBLazyFrame]r\   r!   r   r   )rD   r   rm   r   ry   boolr   r   )rD   r   r   r   )r   r   r   r   )r=   r#   r   zIntoDType | Noner   r   )r   r   )__name__
__module____qualname__r   DUCKDBr&   __annotations__r-   propertyr2   r4   r7   r;   r>   rB   rE   rc   r   r   r   r   rr   rg   r.   r,   r%   r%   )   s     '5&;&;O^;  < <    % (,	;; ; %	;
 
;('.'8D'	'*
 
-0
@D
	
6H=
	
r.   r%   r   c                      e Zd Zedd       Zy)r   c                    t         S r(   )
DuckDBThenr1   s    r,   _thenzDuckDBWhen._then   r5   r.   N)r   ztype[DuckDBThen])r   r   r   r   r   rg   r.   r,   r   r      s     r.   r   r   c                      e Zd Zy)r   N)r   r   r   rg   r.   r,   r   r      s    r.   r   )3
__future__r   ro   	functoolsr   	itertoolsr   typingr   r   rX   r   r	   duckdb.typingr
   r   narwhals._duckdb.dataframer   narwhals._duckdb.exprr   narwhals._duckdb.selectorsr   narwhals._duckdb.utilsr   r   r   r   r   r   r   narwhals._expression_parsingr   r   narwhals._sql.namespacer   narwhals._sql.when_thenr   r   narwhals._utilsr   collections.abcr   r   r    narwhals.typingr!   r"   r#   r%   r   r   rg   r.   r,   <module>r      s    "    %  / ) 6 , >   1 4 *(''II{
*.@*LM{
|*J
BC  V*J
BCZ Ur.   