o
    $&]i0                     @  sx  d dl mZ d dlZd dl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 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mZ d d
lmZ d dlm Z m!Z!m"Z"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.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dlm6Z6 d dl7m8Z8m9Z9m:Z: e/e1e&f Z;e*e& Z<G dd ded Z=dS )    )annotationsN)TYPE_CHECKINGAnyCallablecast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)	DeferredTimeZoneFcolgenerate_order_by_sqllitnarwhals_to_native_dtypesql_expressionwhenwindow_expression)SQLExpr)ImplementationVersionextend_bool
no_default)Sequence)
Expression)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace)	NoDefault)_LimitedContext)FillNullStrategy	IntoDTypeRollingInterpolationMethodc                   @  sd  e Zd ZejZ	dzejdd{ddZd|ddZ				d}dddd~d"d#Zdd'd(Z	dd)d*Z
dd+d,Zdd/d0Zdd2d3Zdd5d6Zedd:d;Zedd>d?ZeddAdBZddCdDZddEdFZddGdHZddMdNZddOdPZddQdRZddSdTZddUdVZddYdZZdd`daZddddeZddldmZeddodpZ eddrdsZ!eddudvZ"eddxdyZ#dS )
DuckDBExprN)implementationcall'EvalSeries[DuckDBLazyFrame, Expression]window_functionDuckDBWindowFunction | Noneevaluate_output_namesEvalNames[DuckDBLazyFrame]alias_output_namesAliasNames | Noneversionr   r0   r   returnNonec                C  s"   || _ || _|| _|| _|| _d S N)_call_evaluate_output_names_alias_output_names_version_window_function)selfr1   r3   r5   r7   r9   r0    rC   S/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_duckdb/expr.py__init__4   s
   

zDuckDBExpr.__init__r    c                 C  s   t dt S Ncount)r   r   rB   rC   rC   rD   _count_starD   s   zDuckDBExpr._count_starrC   
descending
nulls_lastexprpartition_bySequence[str | Expression]order_by
rows_start
int | Nonerows_endrK   Sequence[bool] | NonerL   c             	   C  s   t |||||||dS )NrJ   )r   )rB   rM   rN   rP   rQ   rS   rK   rL   rC   rC   rD   _window_expressionG   s   zDuckDBExpr._window_expressionfunctionstrSequence[str]c                C  s8   t dt|}t|||d}t| d| d| dS )NFrJ   ( ))r   lenr   r   )rB   rV   rM   rP   flagsorder_by_sqlrC   rC   rD   _first_last\   s
   zDuckDBExpr._first_lastc                 G     |  d||S )Nfirstr_   rB   rM   rP   rC   rC   rD   _firstf      zDuckDBExpr._firstc                 G  r`   )Nlastrb   rc   rC   rC   rD   _lasti   re   zDuckDBExpr._lastignore_nullsboolc                C  s   |r|  d|S |  d|S )N	any_valuera   )	_function)rB   rM   rh   rC   rC   rD   
_any_valuel   s
   
zDuckDBExpr._any_valuer)   c                 C  s   ddl m} || jdS )Nr   r(   )r9   )narwhals._duckdb.namespacer)   r@   )rB   r)   rC   rC   rD   __narwhals_namespace__u   s   z!DuckDBExpr.__narwhals_namespace__r!   c                 C  s   |  tdgg S )N   )overr   rH   rC   rC   rD   	broadcastz      zDuckDBExpr.broadcastevaluate_column_namescontextr+   c                 s    d fdd}| | d |j dS )	Ndfr'   r:   list[Expression]c                   s   dd  | D S )Nc                 S  s   g | ]}t |qS rC   r   ).0namerC   rC   rD   
<listcomp>       z>DuckDBExpr.from_column_names.<locals>.func.<locals>.<listcomp>rC   ru   rs   rC   rD   func   rr   z*DuckDBExpr.from_column_names.<locals>.funcr5   r7   r9   ru   r'   r:   rv   )r@   )clsrs   rt   r~   rC   r}   rD   from_column_names}   s   zDuckDBExpr.from_column_namescolumn_indicesintc                  s&   d fdd}| ||   d |jdS )	Nru   r'   r:   rv   c                   s   | j   fddD S )Nc                   s   g | ]}t  | qS rC   rw   )rx   icolumnsrC   rD   rz      s    z@DuckDBExpr.from_column_indices.<locals>.func.<locals>.<listcomp>r   r|   r   r   rD   r~      s   z,DuckDBExpr.from_column_indices.<locals>.funcr   r   )_eval_names_indicesr@   )r   rt   r   r~   rC   r   rD   from_column_indices   s   zDuckDBExpr.from_column_indicesry   c                 C  s
   | |S r<   )alias)r   rM   ry   rC   rC   rD   _alias_native   s   
zDuckDBExpr._alias_nativec                 C  s   t dtj}| |S )NzCallable[..., Expression])r   operatorinvert_with_elementwise)rB   r   rC   rC   rD   
__invert__   s   
zDuckDBExpr.__invert__c                   s,   j  ddd}d fdd}||S )NrM   r    r:   c                 S  s   t d| }t d| |td  t d||td   }t|tdktd t|tdkttdt|tdktd|S 	NrG   skewness   sqrtro   r   nang        )r   r   r   	otherwisefloat)rM   rG   sample_skewnessrC   rC   rD   r~      s   

zDuckDBExpr.skew.<locals>.funcru   r'   inputsDuckDBWindowInputsrv   c                   s   g }| D ]P} t d||j} t d||j|td  t d||td   }|t|tdktd t|tdkttdt|tdktd| q|S r   )r   rN   r   appendr   r   r   )ru   r   retrM   rG   r   WrB   rC   rD   window_f   s"   
z!DuckDBExpr.skew.<locals>.window_frM   r    r:   r    ru   r'   r   r   r:   rv   )rU   _with_callable)rB   r~   r   rC   r   rD   skew   s   
zDuckDBExpr.skewc                 C     |  dd S )Nc                 S  
   t d| S )Nkurtosis_popr   rM   rC   rC   rD   <lambda>      
 z%DuckDBExpr.kurtosis.<locals>.<lambda>r   rH   rC   rC   rD   kurtosis   re   zDuckDBExpr.kurtosisquantiler   interpolationr.   c                   s   d fdd}|  |S )NrM   r    r:   c                   s$    dkrt d| tS d}t|)Nlinearquantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)r   r   NotImplementedError)rM   msgr   r   rC   rD   r~      s   z!DuckDBExpr.quantile.<locals>.funcr   r   )rB   r   r   r~   rC   r   rD   r      s   
zDuckDBExpr.quantilec                 C  r   )Nc                 S  s   t dS rF   r   )_exprrC   rC   rD   r      s    z DuckDBExpr.len.<locals>.<lambda>r   rH   rC   rC   rD   r\      re   zDuckDBExpr.lenc                 C  r   )Nc                 S  s   t d|  dS )Nsumr   )r   isnullr   r   rC   rC   rD   r      r{   z'DuckDBExpr.null_count.<locals>.<lambda>r   rH   rC   rC   rD   
null_count   re   zDuckDBExpr.null_countc                 C  r   )Nc                 S  r   )Nisnanr   r   rC   rC   rD   r      r   z#DuckDBExpr.is_nan.<locals>.<lambda>r   rH   rC   rC   rD   is_nan   re   zDuckDBExpr.is_nanc                 C  r   )Nc                 S  r   )Nisfiniter   r   rC   rC   rD   r      r   z&DuckDBExpr.is_finite.<locals>.<lambda>r   rH   rC   rC   rD   	is_finite   re   zDuckDBExpr.is_finiteotherSequence[Any]c                   s   |   fddS )Nc                   s   t dt | S )Ncontains)r   r   r   r   rC   rD   r      s    z"DuckDBExpr.is_in.<locals>.<lambda>r   )rB   r   rC   r   rD   is_in   rr   zDuckDBExpr.is_invalueSelf | NonestrategyFillNullStrategy | Nonelimitc                   sf   d ur!j dk rd d}t|d fd
d}|S ddd}|d us,J j||dS )N)ro      z`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.ru   r'   r   r   r:   Sequence[Expression]c                   sV   dkrdnd dkrd ur nd dfndf\ fdd| D S )Nforward
last_valuefirst_valuer   c              
     s*   g | ]}t t |jjd dqS )T)rQ   rS   rh   )r   r   rN   rP   rx   rM   	fill_funcr   rS   rQ   rC   rD   rz      s    	zEDuckDBExpr.fill_null.<locals>._fill_with_strategy.<locals>.<listcomp>rC   )ru   r   r   rB   r   r   rD   _fill_with_strategy   s   	z1DuckDBExpr.fill_null.<locals>._fill_with_strategyrM   r    r   r   c                 S  s
   t | |S r<   )r   )rM   r   rC   rC   rD   _fill_constant  s   
z,DuckDBExpr.fill_null.<locals>._fill_constant)r   )ru   r'   r   r   r:   r   )rM   r    r   r   r:   r    )_backend_versionr   _with_window_functionr   )rB   r   r   r   r   r   r   rC   r   rD   	fill_null   s   


zDuckDBExpr.fill_nulldtyper-   c                   s:   d fdd}d fd	d
}j ||jjjdS )Nru   r'   r:   rv   c                   s.   t | j}tj|  fdd| D S )Nc                      g | ]}|  qS rC   r   r   native_dtyperC   rD   rz         z1DuckDBExpr.cast.<locals>.func.<locals>.<listcomp>)r   nativer   r@   )ru   tzr   rB   r   rD   r~     s   
zDuckDBExpr.cast.<locals>.funcr   r   c                   s2   t | j}tj|  fdd| |D S )Nc                   r   rC   r   r   r   rC   rD   rz     r   z5DuckDBExpr.cast.<locals>.window_f.<locals>.<listcomp>)r   r   r   r@   r3   )ru   r   r   r   r   rD   r     s   
z!DuckDBExpr.cast.<locals>.window_fr   r   r   )	__class__r>   r?   r@   )rB   r   r~   r   rC   r   rD   r     s   zDuckDBExpr.castdefaultDuckDBExpr | NoDefaultoldnewreturn_dtypeIntoDType | Nonec                  sj    t u r
d}t|tt|tt|}td|d
 fdd}j|d jjjd	S )NzM`replace_strict` requires an explicit value for `default` for duckdb backend.mapru   r'   r:   rv   c                   sV   |    fdd| D }r)t| j}tj|fdd|D S |S )Nc              
     s8   g | ]}t td |tdtd|td qS )r   list_extractmap_extractro   )r   r   r   r   r   )default_colmapping_exprold_rC   rD   rz   1  s    
z;DuckDBExpr.replace_strict.<locals>.func.<locals>.<listcomp>c                   r   rC   r   )rx   resr   rC   rD   rz   >  r   )_evaluate_single_output_exprr   r   r   r@   )ru   resultsr   r   r   r   r   rB   )r   r   rD   r~   .  s   


z'DuckDBExpr.replace_strict.<locals>.funcr   r   )	r   
ValueErrorr   listr   r   r>   r?   r@   )rB   r   r   r   r   r   new_r~   rC   r   rD   replace_strict  s   zDuckDBExpr.replace_strictr   c                 C     t | S r<   r   rH   rC   rC   rD   rW   I     zDuckDBExpr.strr
   c                 C  r   r<   r	   rH   rC   rC   rD   dtM  r   zDuckDBExpr.dtr   c                 C  r   r<   r   rH   rC   rC   rD   r   Q  r   zDuckDBExpr.listr   c                 C  r   r<   r   rH   rC   rC   rD   structU  r   zDuckDBExpr.structr<   )r1   r2   r3   r4   r5   r6   r7   r8   r9   r   r0   r   r:   r;   )r:   r    )rC   rC   NN)rM   r    rN   rO   rP   rO   rQ   rR   rS   rR   rK   rT   rL   rT   r:   r    )rV   rW   rM   r    rP   rX   r:   r    )rM   r    rP   rW   r:   r    )rM   r    rh   ri   r:   r    )r:   r)   )r:   r!   )rs   r6   rt   r+   r:   r!   )r   r   rt   r+   r:   r!   )rM   r    ry   rW   r:   r    )r   r   r   r.   r:   r!   )r   r   r:   r!   )r   r   r   r   r   rR   r:   r!   )r   r-   r:   r!   )
r   r   r   r   r   r   r   r   r:   r!   )r:   r   )r:   r
   )r:   r   )r:   r   )$__name__
__module____qualname__r   DUCKDB_implementationrE   rI   rU   r_   rd   rg   rl   rn   rq   classmethodr   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   propertyrW   r   r   r   rC   rC   rC   rD   r/   1   s^    






	



&







%
*r/   )r'   r    )>
__future__r   r   typingr   r   r   r   duckdbr   r   narwhals._duckdb.expr_dtr
   narwhals._duckdb.expr_listr   narwhals._duckdb.expr_strr   narwhals._duckdb.expr_structr   narwhals._duckdb.utilsr   r   r   r   r   r   r   r   r   narwhals._sql.exprr   narwhals._utilsr   r   r   r   collections.abcr   r    typing_extensionsr!   narwhals._compliantr"   narwhals._compliant.typingr#   r$   r%   r&   narwhals._duckdb.dataframer'   rm   r)   narwhals._typingr*   r+   narwhals.typingr,   r-   r.   DuckDBWindowFunctionr   r/   rC   rC   rC   rD   <module>   s2    ,