o
    h!                     @  s  d dl mZ d dl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
 d dl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 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 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! d dl m"Z" d dl#m$Z$ erd dl%m&Z& d dl'm(Z( d dl'm)Z) d dl#m*Z* G dd deeeej+f Z,G dd  d ed!ej-ef Z.G d"d# d#ed!ej-ef eZ/dS )$    )annotationsN)reduce)chain)TYPE_CHECKING)Iterable)Sequence)CoalesceOperatorFunctionExpression)BIGINT)VARCHAR)CompliantThen)LazyNamespace)LazyWhenDuckDBLazyFrame
DuckDBExpr)DuckDBSelectorNamespace)
concat_str)lit)narwhals_to_native_dtype)when)combine_alias_output_names)combine_evaluate_output_names)Implementation)DType)ConcatMethod)NonNestedLiteral)Versionc                   @  s   e Zd ZU ejZded< d<d	d
Zed=ddZ	ed>ddZ
ed?ddZd@ddZdAd!d"ZdBd#d$ZdBd%d&ZdBd'd(ZdBd)d*ZdBd+d,ZdBd-d.ZdCd1d2ZdDd7d8ZdEd9d:Zd;S )FDuckDBNamespacer   _implementationbackend_versiontuple[int, ...]versionr   returnNonec                C  s   || _ || _d S N)_backend_version_version)selfr"   r$    r+   N/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_duckdb/namespace.py__init__*   s   
zDuckDBNamespace.__init__r   c                 C  s
   t | S r'   )r   from_namespacer*   r+   r+   r,   	selectors.   s   
zDuckDBNamespace.selectorstype[DuckDBExpr]c                 C     t S r'   r   r/   r+   r+   r,   _expr2      zDuckDBNamespace._exprtype[DuckDBLazyFrame]c                 C  r2   r'   r   r/   r+   r+   r,   
_lazyframe6   r4   zDuckDBNamespace._lazyframeitemsIterable[DuckDBLazyFrame]howr   r   c                  sn   dd |D }t |}|d }|j |dkr+t fdd|dd  D s+d}t|td	d
 |}||S )Nc                 S  s   g | ]}|j qS r+   )_native_frame).0itemr+   r+   r,   
<listcomp>=   s    z*DuckDBNamespace.concat.<locals>.<listcomp>r   verticalc                 3  s    | ]}|j  kV  qd S r'   schema)r;   xr?   r+   r,   	<genexpr>A   s    z)DuckDBNamespace.concat.<locals>.<genexpr>   z&inputs should all have the same schemac                 S  s
   |  |S r'   )union)rA   yr+   r+   r,   <lambda>D   s   
 z(DuckDBNamespace.concat.<locals>.<lambda>)listr@   all	TypeErrorr   _with_native)r*   r7   r9   native_itemsfirstmsgresr+   r?   r,   concat:   s   &
zDuckDBNamespace.concatexprsr   	separatorstrignore_nullsboolc                  s2   d fdd}| j |t  t  | j| jdS )	Ndfr   r%   list[duckdb.Expression]c                   sz   t tfddD  s5ttjdd  D }dd  fddt D D }t| t| gS t digS )Nc                 3  s    | ]}| V  qd S r'   r+   )r;   exprrU   r+   r,   rB   N       z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 s  s    | ]}|  V  qd S r'   )isnull)r;   sr+   r+   r,   rB   P   rY   c                 S  s   g | ]	}|D ]}|qqS r+   r+   )r;   rA   rE   r+   r+   r,   r=   Q   s    z<DuckDBNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                   s>   g | ]\}}|t  d  kr|tfn|ttfqS )rC   )lencastr   r   )r;   icol)colsrQ   r+   r,   r=   S   s    rQ   )	rG   r   from_iterabler   operatoror_	enumerater   r   )rU   null_mask_resultcols_separatedrP   rS   rQ   )r`   rU   r,   funcM   s   
z(DuckDBNamespace.concat_str.<locals>.funccallevaluate_output_namesalias_output_namesr"   r$   rU   r   r%   rV   r3   r   r   r(   r)   )r*   rQ   rS   rP   rh   r+   rg   r,   r   G   s   zDuckDBNamespace.concat_strc                   .   d fdd}| j |t  t  | j| jdS )	NrU   r   r%   rV   c                        fddD }t tj|gS )Nc                 3  "    | ]}| D ]}|V  qqd S r'   r+   r;   r3   crX   r+   r,   rB   i        z?DuckDBNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>)r   rb   and_rU   r`   rP   rX   r,   rh   h      z,DuckDBNamespace.all_horizontal.<locals>.funcri   rm   rn   r*   rP   rh   r+   rw   r,   all_horizontalg      zDuckDBNamespace.all_horizontalc                   ro   )	NrU   r   r%   rV   c                   rp   )Nc                 3  rq   r'   r+   rr   rX   r+   r,   rB   v   rt   z?DuckDBNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>)r   rb   rc   rv   rw   rX   r,   rh   u   rx   z,DuckDBNamespace.any_horizontal.<locals>.funcri   rm   rn   ry   r+   rw   r,   any_horizontalt   r{   zDuckDBNamespace.any_horizontalc                   ro   )	NrU   r   r%   rV   c                   $    fddD }t dg|R  gS )Nc                 3  rq   r'   r+   rr   rX   r+   r,   rB      rt   z?DuckDBNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>greatestr	   rv   rw   rX   r,   rh         z,DuckDBNamespace.max_horizontal.<locals>.funcri   rm   rn   ry   r+   rw   r,   max_horizontal   r{   zDuckDBNamespace.max_horizontalc                   ro   )	NrU   r   r%   rV   c                   r}   )Nc                 3  rq   r'   r+   rr   rX   r+   r,   rB      rt   z?DuckDBNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>leastr	   rv   rw   rX   r,   rh      r   z,DuckDBNamespace.min_horizontal.<locals>.funcri   rm   rn   ry   r+   rw   r,   min_horizontal   r{   zDuckDBNamespace.min_horizontalc                   ro   )	NrU   r   r%   rV   c                   rp   )Nc                 3  s,    | ]}| D ]
}t |td V  qqdS r   Nr   r   )r;   r3   r_   rX   r+   r,   rB      s   * z?DuckDBNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>r   rb   addrv   rw   rX   r,   rh      rx   z,DuckDBNamespace.sum_horizontal.<locals>.funcri   rm   rn   ry   r+   rw   r,   sum_horizontal   r{   zDuckDBNamespace.sum_horizontalc                   s,   d fdd}t |t  t  | j| jdS )	NrU   r   r%   rV   c                   s@    fddD }t tjdd |D t tjdd |D  gS )Nc                   s   g | ]}| D ]}|qqS r+   r+   rr   rX   r+   r,   r=      s    zADuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s    | ]
}t |td V  qdS r   r   r;   r_   r+   r+   r,   rB          z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]
}|  tV  qd S r'   )	isnotnullr]   r   r   r+   r+   r,   rB      r   r   rv   rw   rX   r,   rh      s
   z-DuckDBNamespace.mean_horizontal.<locals>.funcri   rm   )r   r   r   r(   r)   ry   r+   rw   r,   mean_horizontal   s   	zDuckDBNamespace.mean_horizontal	predicate
DuckDBWhenc                 C  s   t j|| dS )N)context)r   	from_expr)r*   r   r+   r+   r,   r      s   zDuckDBNamespace.whenvaluer   dtypeDType | type[DType] | Nonec                   s.   d
 fdd}j |dd d jjd	S )N_dfr   r%   rV   c                   s,    d urt t jdgS t gS )N)r$   )r   r]   r   r)   r   r   r*   r   r+   r,   rh      s   
z!DuckDBNamespace.lit.<locals>.funcc                 S     dgS )Nliteralr+   r   r+   r+   r,   rF          z%DuckDBNamespace.lit.<locals>.<lambda>)rk   rl   r"   r$   r   r   r%   rV   r3   r(   r)   )r*   r   r   rh   r+   r   r,   r      s   	zDuckDBNamespace.litc                 C  s&   d
dd}| j |dd d | j| jd	S )Nr   r   r%   rV   c                 S  s
   t dgS )Ncountr	   r   r+   r+   r,   rh      s   
z!DuckDBNamespace.len.<locals>.funcc                 S  r   )Nr\   r+   r   r+   r+   r,   rF      r   z%DuckDBNamespace.len.<locals>.<lambda>ri   r   r   )r*   rh   r+   r+   r,   r\      s   
zDuckDBNamespace.lenN)r"   r#   r$   r   r%   r&   )r%   r   )r%   r1   )r%   r5   )r7   r8   r9   r   r%   r   )rP   r   rQ   rR   rS   rT   r%   r   )rP   r   r%   r   )r   r   r%   r   )r   r   r   r   r%   r   )r%   r   )__name__
__module____qualname__r   DUCKDBr!   __annotations__r-   propertyr0   r3   r6   rO   r   rz   r|   r   r   r   r   r   r   r\   r+   r+   r+   r,   r    %   s(   
 



 






r    c                      s,   e Zd Zed
ddZd fdd	Z  ZS )r   r%   type[DuckDBThen]c                 C  r2   r'   )
DuckDBThenr/   r+   r+   r,   _then   r4   zDuckDBWhen._thenrU   r   Sequence[duckdb.Expression]c                   s   t | _ t| _t |S r'   )r   r   super__call__)r*   rU   	__class__r+   r,   r      s   zDuckDBWhen.__call__)r%   r   )rU   r   r%   r   )r   r   r   r   r   r   __classcell__r+   r+   r   r,   r      s    r   r   c                   @  s   e Zd ZdS )r   N)r   r   r   r+   r+   r+   r,   r      s    r   )0
__future__r   rb   	functoolsr   	itertoolsr   typingr   r   r   duckdbr   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   narwhals.dtypesr   narwhals.typingr   r   r   DuckDBPyRelationr    
Expressionr   r   r+   r+   r+   r,   <module>   sL    
 :
