o
    $&]i                     @  s6  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rd 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j-Z-G dd de eedef Z.dS )    )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                   @  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d@ddZ	dAdBd d!ZdCd#d$ZdDd*d+ZdEd0d1ZdFd2d3ZdGd7d8ZdHd9d:ZdS )IDuckDBNamespacer   _implementationversionr   returnNonec                C  s
   || _ d S N)_version)selfr#    r)   X/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_duckdb/namespace.py__init__0      
zDuckDBNamespace.__init__r   c                 C  s
   t | S r&   )r   from_namespacer(   r)   r)   r*   	selectors3   s   
zDuckDBNamespace.selectorstype[DuckDBExpr]c                 C     t S r&   r   r.   r)   r)   r*   _expr7      zDuckDBNamespace._exprtype[DuckDBLazyFrame]c                 C  r1   r&   r	   r.   r)   r)   r*   
_lazyframe;   r3   zDuckDBNamespace._lazyframenamestrargsr   c                 G  s   t |g|R  S r&   )r   )r(   r6   r8   r)   r)   r*   	_function?   s   zDuckDBNamespace._functionvaluer   c                 C  s   t |S r&   )r   )r(   r:   r)   r)   r*   _litB      zDuckDBNamespace._litN	condition	otherwiseExpression | Nonec                 C  s"   |d u r	t ||S t |||S r&   )r   r>   )r(   r=   r:   r>   r)   r)   r*   _whenE   s   
zDuckDBNamespace._whenexprsc                 G  s   t | S r&   )r   )r(   rA   r)   r)   r*   	_coalesceO   r<   zDuckDBNamespace._coalesceitemsIterable[DuckDBLazyFrame]howr   r
   c                  s   dd |D }t |}|d }|j |dkr+t fdd|dd  D s+d}t||d	krE|j}|dd  D ]}td
}q8||S tdd |}||S )Nc                 S  s   g | ]}|j qS r)   )_native_frame).0itemr)   r)   r*   
<listcomp>U   s    z*DuckDBNamespace.concat.<locals>.<listcomp>r   verticalc                 3  s    | ]}|j  kV  qd S r&   schema)rG   xrK   r)   r*   	<genexpr>Y       z)DuckDBNamespace.concat.<locals>.<genexpr>   z&inputs should all have the same schemadiagonalz]
                    from res select * union all by name from _item select *
                c                 S  s
   |  |S r&   )union)rM   yr)   r)   r*   <lambda>d   s   
 z(DuckDBNamespace.concat.<locals>.<lambda>)	listrL   all	TypeErrornativeduckdbsql_with_nativer   )r(   rC   rE   native_itemsfirstmsgres_itemr)   rK   r*   concatR   s   &

zDuckDBNamespace.concatr   	separatorignore_nullsboolc                  s.   d fdd}| j |t  t  | jdS )	Ndfr
   r$   list[Expression]c                   sp   t  fddD }rt|digS t|}ttjdd |D }dd |D }t| t|digS )Nc                 3  s    | ]}| V  qd S r&   r)   )rG   ere   r)   r*   rN   k       z;DuckDBNamespace.concat_str.<locals>.func.<locals>.<genexpr>rb   c                 s  s    | ]}|  V  qd S r&   )isnull)rG   sr)   r)   r*   rN   o   ri   c                 s  s    | ]}| tV  qd S r&   )castVARCHAR)rG   cr)   r)   r*   rN   p   rO   )r   from_iterabler   tupler   operatoror_r   )re   cols	null_maskcols_strrA   rc   rb   rh   r*   funcj   s   z(DuckDBNamespace.concat_str.<locals>.funccallevaluate_output_namesalias_output_namesr#   re   r
   r$   rf   )r2   r   r   r'   )r(   rb   rc   rA   rw   r)   rv   r*   r   g   s   	zDuckDBNamespace.concat_strc                 G  s   ddd}| j j|g|R  S )Nrs   Iterable[Expression]r$   r   c                 S  s<   t | } ttjdd | D }ttjdd | D }|| S )Nc                 s  s    | ]
}t |td V  qdS )r   N)r   r   rG   colr)   r)   r*   rN   }   s    z@DuckDBNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s     | ]}|  tjV  qd S r&   )	isnotnullrl   r   BIGINTr~   r)   r)   r*   rN      s    )rp   r   rq   add)rs   totalcountr)   r)   r*   rw   {   s   z-DuckDBNamespace.mean_horizontal.<locals>.func)rs   r}   r$   r   )r2   _from_elementwise_horizontal_op)r(   rA   rw   r)   r)   r*   mean_horizontalz   s   
zDuckDBNamespace.mean_horizontalr    dtypeIntoDType | Nonec                   s:   d fdddfd	d
}j |dd d jdS )Nre   r
   r$   rf   c                   s:   t | j} d urt j|}t|gS tgS r&   )r   rX   r   r'   r   rl   )re   tztarget)r   r(   r:   r)   r*   rw      s
   

z!DuckDBNamespace.lit.<locals>.func_window_inputsWindowInputs[Expression]c                   s    | S r&   r)   )re   r   )rw   r)   r*   window_func   s   z(DuckDBNamespace.lit.<locals>.window_funcc                 S     dgS )Nliteralr)   _dfr)   r)   r*   rT          z%DuckDBNamespace.lit.<locals>.<lambda>)rz   r{   r#   r|   )re   r
   r   r   r$   rf   r2   r'   )r(   r:   r   r   r)   )r   rw   r(   r:   r*   r      s   zDuckDBNamespace.litc                 C  s"   d
dd}| j |dd d | jd	S )Nr   r
   r$   rf   c                 S  s
   t dgS )Nr   )r   r   r)   r)   r*   rw      r,   z!DuckDBNamespace.len.<locals>.funcc                 S  r   )Nlenr)   r   r)   r)   r*   rT      r   z%DuckDBNamespace.len.<locals>.<lambda>rx   )r   r
   r$   rf   r   )r(   rw   r)   r)   r*   r      s   
zDuckDBNamespace.len)r#   r   r$   r%   )r$   r   )r$   r0   )r$   r4   )r6   r7   r8   r   r$   r   )r:   r   r$   r   r&   )r=   r   r:   r   r>   r?   r$   r   )rA   r   r$   r   )rC   rD   rE   r   r$   r
   )rA   r   rb   r7   rc   rd   r$   r   )rA   r   r$   r   )r:   r    r   r   r$   r   )r$   r   )__name__
__module____qualname__r   DUCKDBr"   __annotations__r+   propertyr/   r2   r5   r9   r;   r@   rB   ra   r   r   r   r   r)   r)   r)   r*   r!   +   s&   
 








r!   r   )/
__future__r   rq   	functoolsr   	itertoolsr   typingr   r   rY   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!   r)   r)   r)   r*   <module>   s0    (

