o
    Lh)                     @  st  d dl mZ d dlZd dl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 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 d d
lmZmZ d dlm Z  d dl!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l!m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 e/e1e&f Z:e*e& Z;G dd de d Z<dS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralcast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace)DeferredTimeZoneFcollitnarwhals_to_native_dtypewhenwindow_expression)ExprKindExprMetadata)SQLExpr)ImplementationVersion)Sequence)
Expression)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace)_LimitedContext)FillNullStrategy	IntoDTypeNonNestedLiteralRollingInterpolationMethodc                   @  sZ  e Zd ZejZ	dqejddrddZdsddZ				dtddddud"d#Zdvd$d%Z	dwd'd(Z
dxd,d-Zedyd1d2Zedzd5d6Zed{d9d:Zd|d;d<Zd|d=d>Zd|d?d@Zd}dEdFZd|dGdHZd|dIdJZd~dLdMZd~dNdOZd|dPdQZd|dRdSZd|dTdUZddXdYZdd_d`ZddcddZeddfdgZeddidjZ eddldmZ!eddodpZ"dS )
DuckDBExprN)implementationcall'EvalSeries[DuckDBLazyFrame, Expression]window_functionDuckDBWindowFunction | Noneevaluate_output_namesEvalNames[DuckDBLazyFrame]alias_output_namesAliasNames | Noneversionr   r/   r   returnNonec                C  s(   || _ || _|| _|| _d | _|| _d S N)_call_evaluate_output_names_alias_output_names_version	_metadata_window_function)selfr0   r2   r4   r6   r8   r/    rC   V/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_duckdb/expr.py__init__7   s   

zDuckDBExpr.__init__r   c                 C  s   t dt S Ncount)r   r	   rB   rC   rC   rD   _count_starH   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_expressionK   s   zDuckDBExpr._window_expressionc                 C  s   d S r;   rC   rH   rC   rC   rD   __narwhals_expr__`   s    zDuckDBExpr.__narwhals_expr__r(   c                 C  s   ddl m} || jdS )Nr   r'   )r8   )narwhals._duckdb.namespacer(   r?   )rB   r(   rC   rC   rD   __narwhals_namespace__b   s   z!DuckDBExpr.__narwhals_namespace__kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r    c                 C  s6   |t ju r| S | jdk rd}t|| tdgg S )N      z`At least version 1.3 of DuckDB is required for binary operations between aggregates and columns.r\   )r   LITERAL_backend_versionNotImplementedErroroverr   )rB   rY   msgrC   rC   rD   	broadcastg   s   

zDuckDBExpr.broadcastevaluate_column_namescontextr)   c                 s    d fdd}| | d |j dS )	Ndfr&   r9   list[Expression]c                   s   dd  | D S )Nc                 S  s   g | ]}t |qS rC   r   ).0namerC   rC   rD   
<listcomp>x       z>DuckDBExpr.from_column_names.<locals>.func.<locals>.<listcomp>rC   rf   rd   rC   rD   funcw      z*DuckDBExpr.from_column_names.<locals>.funcr4   r6   r8   rf   r&   r9   rg   )r?   )clsrd   re   ro   rC   rn   rD   from_column_nameso   s   zDuckDBExpr.from_column_namescolumn_indicesintc                  s&   d fdd}| ||   d |jdS )	Nrf   r&   r9   rg   c                   s   | j   fddD S )Nc                   s   g | ]}t  | qS rC   rh   )ri   icolumnsrC   rD   rk      s    z@DuckDBExpr.from_column_indices.<locals>.func.<locals>.<listcomp>rx   rm   ru   rx   rD   ro      s   z,DuckDBExpr.from_column_indices.<locals>.funcrq   rr   )_eval_names_indicesr?   )rs   re   ru   ro   rC   rz   rD   from_column_indices   s   zDuckDBExpr.from_column_indicesrj   strc                 C  s
   | |S r;   )alias)rs   rM   rj   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                 C     ddd}|  |S )NrM   r   r9   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   sqrtr\   r   nang        )r   r   r   	otherwisefloat)rM   rG   sample_skewnessrC   rC   rD   ro      s   

zDuckDBExpr.skew.<locals>.funcrM   r   r9   r   _with_callablerB   ro   rC   rC   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      zDuckDBExpr.kurtosisquantiler   interpolationr-   c                   s   d fdd}|  |S )NrM   r   r9   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   r`   )rM   rb   r   r   rC   rD   ro      s   z!DuckDBExpr.quantile.<locals>.funcr   r   )rB   r   r   ro   rC   r   rD   r      s   
zDuckDBExpr.quantilec                 C  r   )NrM   r   r9   c                 S  s2   t dt d| t dt|  tdtd S )Narray_unique	array_aggmaxr   r\   )r   r   	isnotnullr   r   r   rC   rC   rD   ro      s   z!DuckDBExpr.n_unique.<locals>.funcr   r   r   rC   rC   rD   n_unique   s   

zDuckDBExpr.n_uniquec                 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   len   r   zDuckDBExpr.lenddofc                   D    dkr|  dd S  dkr|  dd S d fd	d
}|  |S )Nr   c                 S  r   )N
stddev_popr   r   rC   rC   rD   r      r   z DuckDBExpr.std.<locals>.<lambda>r\   c                 S  r   )Nstddev_sampr   r   rC   rC   rD   r      r   rM   r   r9   c                   s0   t d| }t d| t d| t d|t   S )NrG   r   r   r   r   rM   	n_samplesr   rC   rD   _std   s   
zDuckDBExpr.std.<locals>._stdr   r   )rB   r   r   rC   r   rD   std   s   
zDuckDBExpr.stdc                   r   )Nr   c                 S  r   )Nvar_popr   r   rC   rC   rD   r      r   z DuckDBExpr.var.<locals>.<lambda>r\   c                 S  r   )Nvar_sampr   r   rC   rC   rD   r      r   rM   r   r9   c                   s$   t d| }t d| | |t   S )NrG   r   r   r   r   rC   rD   _var   s   
zDuckDBExpr.var.<locals>._varr   r   )rB   r   r   rC   r   rD   var   s   
zDuckDBExpr.varc                 C  r   )Nc                 S  s   t d|  dS )Nsumrv   )r   isnullr   r   rC   rC   rD   r      rl   z'DuckDBExpr.null_count.<locals>.<lambda>r   rH   rC   rC   rD   
null_count   r   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   r   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   r   zDuckDBExpr.is_finiteotherSequence[Any]c                   s   |   fddS )Nc                   s   t dt | S )Ncontainsr   r   r   rC   rD   r      s    z"DuckDBExpr.is_in.<locals>.<lambda>r   )rB   r   rC   r   rD   is_in   rp   zDuckDBExpr.is_invalueSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc                   sZ   d ur!j dk rd d}t|d fd
d}|S ddd}j||dS )Nr[   z`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.rf   r&   inputsDuckDBWindowInputsr9   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   ignore_nulls)r   r   rN   rP   ri   rM   	fill_funcr   rS   rQ   rC   rD   rk      s    	zEDuckDBExpr.fill_null.<locals>._fill_with_strategy.<locals>.<listcomp>rC   )rf   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   )rf   r&   r   r   r9   r   )rM   r   r   r   r9   r   )r_   r`   _with_window_functionr   )rB   r   r   r   rb   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 )Nrf   r&   r9   rg   c                   s.   t | j}tj|  fdd| D S )Nc                      g | ]}|  qS rC   r   r   native_dtyperC   rD   rk         z1DuckDBExpr.cast.<locals>.func.<locals>.<listcomp>)r   nativer   r?   )rf   tzr   rB   r   rD   ro     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   rk     r   z5DuckDBExpr.cast.<locals>.window_f.<locals>.<listcomp>)r   r   r   r?   r2   )rf   r   r   r   r   rD   window_f  s   
z!DuckDBExpr.cast.<locals>.window_frq   rr   )rf   r&   r   r   r9   rg   )	__class__r=   r>   r?   )rB   r   ro   r   rC   r   rD   r     s   zDuckDBExpr.castr   c                 C     t | S r;   r   rH   rC   rC   rD   r}   #     zDuckDBExpr.strr   c                 C  r   r;   r
   rH   rC   rC   rD   dt'  r   zDuckDBExpr.dtr   c                 C  r   r;   r   rH   rC   rC   rD   list+  r   zDuckDBExpr.listr   c                 C  r   r;   r   rH   rC   rC   rD   struct/  r   zDuckDBExpr.structr;   )r0   r1   r2   r3   r4   r5   r6   r7   r8   r   r/   r   r9   r:   )r9   r   )rC   rC   NN)rM   r   rN   rO   rP   rO   rQ   rR   rS   rR   rK   rT   rL   rT   r9   r   )r9   r:   )r9   r(   )rY   rZ   r9   r    )rd   r5   re   r)   r9   r    )ru   rv   re   r)   r9   r    )rM   r   rj   r}   r9   r   )r9   r    )r   r   r   r-   r9   r    )r   rv   r9   r    )r   r   r9   r    )r   r   r   r   r   rR   r9   r    )r   r+   r9   r    )r9   r   )r9   r   )r9   r   )r9   r   )#__name__
__module____qualname__r   DUCKDB_implementationrE   rI   rU   rV   rX   rc   classmethodrt   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyr}   r   r   r   rC   rC   rC   rD   r.   4   s\    









	







'r.   )r&   r   )=
__future__r   r   typingr   r   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   narwhals._expression_parsingr   r   narwhals._sql.exprr   narwhals._utilsr   r   collections.abcr   r   typing_extensionsr    narwhals._compliantr!   narwhals._compliant.typingr"   r#   r$   r%   narwhals._duckdb.dataframer&   rW   r(   r)   narwhals.typingr*   r+   r,   r-   DuckDBWindowFunctionr   r.   rC   rC   rC   rD   <module>   s2    $	