o
    篪g%                     @  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
mZ d d	lmZ d d
lmZ d dlmZ d dlmZ erpd 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 G dd dZG dd deZdS )    )annotationsN)TYPE_CHECKING)Any)Iterable)SequenceColumnExpression)
DuckDBExpr)ExprKind)_parse_time_unit_and_time_zone)%dtype_matches_time_unit_and_time_zone)import_dtypes_module)timezone)Self)DuckDBLazyFrame)DType)TimeUnit)Versionc                   @  sf   e Zd Zd%d	d
Zd&ddZd'ddZd(ddZd(ddZd(ddZd(ddZ	d(ddZ
d)d"d#Zd$S )*DuckDBSelectorNamespaceselfr   backend_versiontuple[int, ...]versionr   returnNonec                C  s   || _ || _d S N)_backend_version_version)r   r   r    r   V/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/narwhals/_duckdb/selectors.py__init__   s   
z DuckDBSelectorNamespace.__init__dtypesIterable[DType | type[DType]]DuckDBSelectorc              	     8   d fdd}d fdd	}t |d
|d | jtj| jdS )Ndfr   r   list[duckdb.Expression]c                       fdd j D S )Nc                   s"   g | ]} j | v rt|qS r   )schemar   .0colr%   r!   r   r   
<listcomp>&   s    zBDuckDBSelectorNamespace.by_dtype.<locals>.func.<locals>.<listcomp>columnsr%   r!   r0   r   func%   s   z.DuckDBSelectorNamespace.by_dtype.<locals>.funcSequence[str]c                   r'   )Nc                   s   g | ]} j | v r|qS r   )r(   r)   r,   r   r   r-   +   s    zSDuckDBSelectorNamespace.by_dtype.<locals>.evaluate_output_names.<locals>.<listcomp>r.   r0   r1   r0   r   evaluate_output_names*   s   z?DuckDBSelectorNamespace.by_dtype.<locals>.evaluate_output_namesselectorfunction_namer4   alias_output_namesr   	expr_kindr   r%   r   r   r&   r%   r   r   r3   r#   r   r
   	TRANSFORMr   )r   r!   r2   r4   r   r1   r   by_dtype$      z DuckDBSelectorNamespace.by_dtypepatternstrc              	     r$   )Nr%   r   r   r&   c                       fdd| j D S )Nc                   s    g | ]}t  |rt|qS r   )researchr   r)   r@   r   r   r-   9   s
    zADuckDBSelectorNamespace.matches.<locals>.func.<locals>.<listcomp>r.   r0   rE   r   r   r2   8   s   
z-DuckDBSelectorNamespace.matches.<locals>.funcr3   c                   rB   )Nc                   s   g | ]
}t  |r|qS r   )rC   rD   r)   rE   r   r   r-   >       zRDuckDBSelectorNamespace.matches.<locals>.evaluate_output_names.<locals>.<listcomp>r.   r0   rE   r   r   r4   =   s   z>DuckDBSelectorNamespace.matches.<locals>.evaluate_output_namesr5   r6   r:   r;   r<   )r   r@   r2   r4   r   rE   r   matches7   r?   zDuckDBSelectorNamespace.matchesc                 C  sD   t | j}| |j|j|j|j|j|j|j	|j
|j|j|j|jhS r   )r   r   r>   Int128Int64Int32Int16Int8UInt128UInt64UInt32UInt16UInt8Float64Float32r   r!   r   r   r   numericJ   s    
zDuckDBSelectorNamespace.numericc                 C     t | j}| |jhS r   )r   r   r>   CategoricalrT   r   r   r   categorical]      
z#DuckDBSelectorNamespace.categoricalc                 C  rV   r   )r   r   r>   StringrT   r   r   r   stringa   rY   zDuckDBSelectorNamespace.stringc                 C  rV   r   )r   r   r>   BooleanrT   r   r   r   booleane   rY   zDuckDBSelectorNamespace.booleanc              	   C  s*   ddd}t |ddd	 d | jtj| jd
S )Nr%   r   r   r&   c                 S  s   dd | j D S )Nc                 S  s   g | ]}t |qS r   r   r)   r   r   r   r-   k   s    z=DuckDBSelectorNamespace.all.<locals>.func.<locals>.<listcomp>r.   r0   r   r   r   r2   j   s   z)DuckDBSelectorNamespace.all.<locals>.funcr5   c                 S  s   | j S r   r.   r0   r   r   r   <lambda>p   s    z-DuckDBSelectorNamespace.all.<locals>.<lambda>r6   r:   r<   )r   r2   r   r   r   alli   s   
zDuckDBSelectorNamespace.all	time_unit$TimeUnit | Iterable[TimeUnit] | None	time_zone7str | timezone | Iterable[str | timezone | None] | Nonec              	     s\   t | jd t||d\d fdd}d fd
d}t|d|d | jtj| jdS )N)r   )r`   rb   r%   r   r   r&   c                       fdd j D S )Nc                   s*   g | ]}t  j| d rt|qS )dtyper!   
time_units
time_zones)r   r(   r   r)   r%   r!   rg   rh   r   r   r-      s    zBDuckDBSelectorNamespace.datetime.<locals>.func.<locals>.<listcomp>r.   r0   r!   rg   rh   r0   r   r2         z.DuckDBSelectorNamespace.datetime.<locals>.funcr3   c                   rd   )Nc                   s&   g | ]}t  j| d r|qS re   )r   r(   r)   ri   r   r   r-      s    zRDuckDBSelectorNamespace.datetime.<locals>.evalute_output_names.<locals>.<listcomp>r.   r0   rj   r0   r   evalute_output_names   rk   z>DuckDBSelectorNamespace.datetime.<locals>.evalute_output_namesr5   r6   r:   r;   )r   r   r   r#   r   r
   r=   )r   r`   rb   r2   rl   r   rj   r   datetimew   s   
z DuckDBSelectorNamespace.datetimeN)r   r   r   r   r   r   r   r   )r   r   r!   r"   r   r#   )r   r   r@   rA   r   r#   r   r   r   r#   )r   r   r`   ra   rb   rc   r   r#   )__name__
__module____qualname__r    r>   rG   rU   rX   r[   r]   r_   rm   r   r   r   r   r      s    







r   c                   @  sH   e Zd ZdddZddd	ZdddZdddZdddZdddZdS )r#   r   r   r   rA   c                 C  s   d| j  dS )NzDuckDBSelector(function_name=))_function_namer   r   r   r   __repr__   s   zDuckDBSelector.__repr__r	   c              	   C  s$   t | j| j| j| j| j| j| jdS )Nr6   )r	   _callrs   _evaluate_output_names_alias_output_namesr   
_expr_kindr   rt   r   r   r   _to_expr   s   zDuckDBSelector._to_exprotherDuckDBSelector | Anyc              	     sR   t  tr#d fdd}d fdd	}t|d
|d jjjdS    S )Nr%   r   r   r&   c                   6    | } |  | } fddt||D S )Nc                   s   g | ]
\}}| vr|qS r   r   r*   xname	rhs_namesr   r   r-      rF   z8DuckDBSelector.__sub__.<locals>.call.<locals>.<listcomp>rw   rv   zipr%   	lhs_nameslhsr{   r   r   r   call      


z$DuckDBSelector.__sub__.<locals>.call	list[str]c                   &    | } |   fdd|D S )Nc                   s   g | ]}| vr|qS r   r   r*   r   r   r   r   r-          zIDuckDBSelector.__sub__.<locals>.evaluate_output_names.<locals>.<listcomp>rw   r%   r   r   r   r   r4         

z5DuckDBSelector.__sub__.<locals>.evaluate_output_namesr5   r6   r:   r%   r   r   r   
isinstancer#   r   ry   r   rz   r   r{   r   r4   r   r   r   __sub__      

zDuckDBSelector.__sub__c              	     sR   t  tr#d fdd}d fdd	}t|d
|d jjjdS   B S )Nr%   r   r   r&   c                   sH    | } |  | }| }g  fddt||D |S )Nc                 3  s     | ]\}}| vr|V  qd S r   r   r~   r   r   r   	<genexpr>   s    z6DuckDBSelector.__or__.<locals>.call.<locals>.<genexpr>r   )r%   r   r   rhsr   r   r   r      s   



z#DuckDBSelector.__or__.<locals>.callr   c                   s.    | } |  g  fdd|D  S )Nc                 3  s    | ]	}| vr|V  qd S r   r   r   r   r   r   r      s    zGDuckDBSelector.__or__.<locals>.evaluate_output_names.<locals>.<genexpr>r   r   r   r   r   r4      s   

z4DuckDBSelector.__or__.<locals>.evaluate_output_namesr5   r6   r:   r   r   r   r   r   r   __or__   s   


zDuckDBSelector.__or__c              	     sR   t  tr#d fdd}d fdd	}t|d
|d jjjdS   @ S )Nr%   r   r   r&   c                   r}   )Nc                   s   g | ]
\}}| v r|qS r   r   r~   r   r   r   r-      rF   z8DuckDBSelector.__and__.<locals>.call.<locals>.<listcomp>r   r   r   r   r   r      r   z$DuckDBSelector.__and__.<locals>.callr   c                   r   )Nc                   s   g | ]}| v r|qS r   r   r   r   r   r   r-      r   zIDuckDBSelector.__and__.<locals>.evaluate_output_names.<locals>.<listcomp>r   r   r   r   r   r4      r   z5DuckDBSelector.__and__.<locals>.evaluate_output_namesr5   r6   r:   r   r   r   r   r   r   __and__   r   zDuckDBSelector.__and__c                 C  s   t | j| jd |  S )N)r   r   )r   r   r   r_   rt   r   r   r   
__invert__  s   zDuckDBSelector.__invert__N)r   r   r   rA   )r   r   r   r	   )r   r   r{   r|   r   r|   rn   )	ro   rp   rq   ru   rz   r   r   r   r   r   r   r   r   r#      s    




r#   )
__future__r   rC   typingr   r   r   r   duckdbr   narwhals._duckdb.exprr	   narwhals._duckdb.utilsr
   narwhals.utilsr   r   r   rm   r   typing_extensionsr   narwhals._duckdb.dataframer   narwhals.dtypesr   narwhals.typingr   r   r   r#   r   r   r   r   <module>   s.     