
    /_i              	      P   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 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 d dlmZmZ d dl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( d dl)m*Z*m+Z+m,Z, ejZ                  Z- G d de eedef         Z.y)    )annotationsN)reduce)chain)TYPE_CHECKINGAny)CoalesceOperator
ExpressionDuckDBLazyFrame
DuckDBExpr)DuckDBSelectorNamespace)DeferredTimeZoneF
concat_strduckdb_dtypesfunctionlitnarwhals_to_native_dtypewhen)combine_alias_output_namescombine_evaluate_output_names)SQLNamespace)Implementation)Iterable)DuckDBPyRelation)WindowInputs)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y	)DuckDBNamespacer   _implementationc                   || _         y N)_version)selfversions     Y/var/www/html/land_sniper/venv/lib/python3.12/site-packages/narwhals/_duckdb/namespace.py__init__zDuckDBNamespace.__init__0   s	        c                ,    t        j                  |       S r&   )r   from_namespacer(   s    r*   	selectorszDuckDBNamespace.selectors3   s    &55d;;r,   c                    t         S r&   r   r/   s    r*   _exprzDuckDBNamespace._expr7   s    r,   c                    t         S r&   r
   r/   s    r*   
_lazyframezDuckDBNamespace._lazyframe;   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._litB   s    5zr,   Nc                T    |t        ||      S t        ||      j                  |      S r&   )r   	otherwise)r(   	conditionr:   r=   s       r*   _whenzDuckDBNamespace._whenE   s/     	5))Iu%//	::r,   c                    t        | S r&   )r   )r(   exprss     r*   	_coalescezDuckDBNamespace._coalesceO   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xrF   s     r*   	<genexpr>z)DuckDBNamespace.concat.<locals>.<genexpr>Y   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)rH   ys     r*   <lambda>z(DuckDBNamespace.concat.<locals>.<lambda>d   s    !''!* r,   )
_native_framelistrF   all	TypeErrornativeduckdbsql_with_nativer   )
r(   itemshowitemnative_itemsfirstmsgres_itemrF   s
            @r*   concatzDuckDBNamespace.concatR   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        j                   fdD              }rt        |digS t        |      }t	        t
        j                  d |D              }d |D        }t        | t        |di      gS )Nc              3  .   K   | ]  } |        y wr&    )rG   edfs     r*   rI   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>k   s     <RqQrU<Rs   	separatorc              3  <   K   | ]  }|j                           y wr&   )isnull)rG   ss     r*   rI   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>o   s     -GQahhj-Gs   c              3  F   K   | ]  }|j                  t                y wr&   )castVARCHAR)rG   cs     r*   rI   z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>p   s     6Aw6   !)r   from_iterabler   tupler   operatoror_r   )rf   cols	null_maskcols_strrA   ignore_nullsrg   s   `   r*   funcz(DuckDBNamespace.concat_str.<locals>.funcj   st    ).)<)<<RE<R)RD"D>I>??;Dx||-G$-GHI66H)Z%OY%OPQQr,   callevaluate_output_namesalias_output_namesr)   rf   r   returnlist[Expression])r2   r   r   r'   )r(   rg   rw   rA   rx   s    ``` r*   r   zDuckDBNamespace.concat_strg   s;    	R 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   rG   cols     r*   rI   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>}   s     )XC*:3A*G)Xro   c              3  v   K   | ]1  }|j                         j                  t        j                         3 y wr&   )	isnotnullrl   r   BIGINTr   s     r*   rI   z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s'     Zcs}}33M4H4HIZs   79)rq   r   rr   add)rt   totalcounts      r*   rx   z-DuckDBNamespace.mean_horizontal.<locals>.func{   sH    ;D8<<)XSW)XYEZUYZE 5= r,   )rt   zIterable[Expression]r~   r	   )r2   _from_elementwise_horizontal_op)r(   rA   rx   s      r*   mean_horizontalzDuckDBNamespace.mean_horizontalz   s%    	! :tzz99$GGGr,   c                t     d fd	 	 	 	 	 	 dfd} j                  |d d  j                        S )Nc                    t        | j                        }2t        j                  |      }t	              j                  |      gS t	              gS r&   )r   rT   r   r'   r   rl   )rf   tztargetdtyper(   r:   s      r*   rx   z!DuckDBNamespace.lit.<locals>.func   sK    !")),B 1%KE
/00J<r,   c                     |       S r&   rd   )rf   _window_inputsrx   s     r*   window_funcz(DuckDBNamespace.lit.<locals>.window_func   s     8Or,   c                    dgS )Nliteralrd   _dfs    r*   rO   z%DuckDBNamespace.lit.<locals>.<lambda>   s    yk r,   )r{   r|   r)   r}   )rf   r   r   zWindowInputs[Expression]r~   r   r2   r'   )r(   r:   r   r   rx   s   ``` @r*   r   zDuckDBNamespace.lit   sP    	 		1I		
 zz"9#MM  
 	
r,   c                J    dd}| j                  |d d | j                        S )Nc                    t        d      gS )Nr   )r   r   s    r*   rx   z!DuckDBNamespace.len.<locals>.func   s    gJ<r,   c                    dgS )Nlenrd   r   s    r*   rO   z%DuckDBNamespace.len.<locals>.<lambda>   s    ug r,   ry   )r   r   r~   r   r   )r(   rx   s     r*   r   zDuckDBNamespace.len   s/    	  zz"5#MM	  
 	
r,   )r)   r   r~   None)r~   r   )r~   ztype[DuckDBExpr])r~   ztype[DuckDBLazyFrame])r6   strr7   r	   r~   r	   )r:   r   r~   r	   r&   )r>   r	   r:   r	   r=   zExpression | Noner~   r	   )rA   r	   r~   r	   )rX   zIterable[DuckDBLazyFrame]rY   r   r~   r   )rA   r   rg   r   rw   boolr~   r   )rA   r   r~   r   )r:   r!   r   zIntoDType | Noner~   r   )r~   r   )__name__
__module____qualname__r   DUCKDBr$   __annotations__r+   propertyr0   r2   r4   r8   r;   r?   rB   r`   r   r   r   r   rd   r,   r*   r#   r#   +   s     '5&;&;O^;  < <    % (,	;; ; %	;
 
;('.'8D'	'*
 
-0
@D
	
&	H
*	
r,   r#   r   )/
__future__r   rr   	functoolsr   	itertoolsr   typingr   r   rU   r   r	   narwhals._duckdb.dataframer   narwhals._duckdb.exprr   narwhals._duckdb.selectorsr   narwhals._duckdb.utilsr   r   r   r   r   r   r   r   narwhals._expression_parsingr   r   narwhals._sql.namespacer   narwhals._utilsr   collections.abcr   r   narwhals._compliant.windowr   r   narwhals.typingr   r    r!   rm   r#   rd   r,   r*   <module>r      s}    "    %  / 6 , >	 	 	 1 *('7'II


x
*.@*LMx
r,   