o
    $&]i                     @  s"  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 d dlmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZmZ er~d d
lmZ d dl 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)m*Z*m+Z+ G dd deeef e	eef Z,dS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralProtocol)LazyExpr)
AliasNames	EvalNames
EvalSeriesNativeExprTWindowFunction)WindowInputs)combine_alias_output_namescombine_evaluate_output_names)SQLLazyFrameT)ImplementationVersionextend_boolnot_implemented)Sequence)Self)r	   r   )SQLExprDateTimeNamesSpace)SQLExprStringNamespace)SQLNamespace)ModeKeepStrategyPythonLiteral
RankMethodc                   @  s  e Zd ZU ded< ded< ded< ded< d	ed
< ded< 	dejd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,d-Zdd.d/Zdd2d3Zdd5d6Zedd7d8Zdd>d?ZddBdCZddEdFZddGdHZddJdKZddLdMZddPdQZ	dddUdVZ	W	W		d dddXd!dadbZd"dfdgZ	dd#dndoZed$dqdrZed%dsdtZed&dwdxZ d'dydzZ!d(d{d|Z"d(d}d~Z#d(ddZ$d(ddZ%d(ddZ&d(ddZ'd(ddZ(d(ddZ)d(ddZ*d(ddZ+d(ddZ,d(ddZ-d(ddZ.d(ddZ/d(ddZ0d(ddZ1d(ddZ2d(ddZ3d(ddZ4d(ddZ5d)ddZ6d)ddZ7d)ddZ8d)ddZ9d*ddZ:d*ddZ;d)ddZ<d+ddZ=d)ddZ>d)ddZ?d)ddZ@d)ddZAd)ddZBd,ddZCd-ddÄZDd.ddńZEd)ddǄZFd/ddʄZGd)dd̄ZHd)dd΄ZId)ddЄZJd)dd҄ZKd)ddԄZLd0dd؄ZMd1ddڄZNd1dd܄ZOd1ddބZPd1ddZQd1ddZRd2ddZSd2ddZTd3ddZUd3ddZVd)ddZWd4ddZXd)ddZYd)ddZZd)ddZ[d)ddZ\d5ddZ]d6ddZ^d)ddZ_d7ddZ`d8ddZaed9dd	Zbed:ddZced Zeed Zfed ZgdS (;  SQLExpr&EvalSeries[SQLLazyFrameT, NativeExprT]_callEvalNames[SQLLazyFrameT]_evaluate_output_namesAliasNames | None_alias_output_namesr   _versionr   _implementation1WindowFunction[SQLLazyFrameT, NativeExprT] | None_window_functionN)implementationcallwindow_functionevaluate_output_namesalias_output_namesversionr)   returnNonec                C     d S N )selfr*   r+   r,   r-   r.   r)   r3   r3   P/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_sql/expr.py__init__*   s   	zSQLExpr.__init__dfr   Sequence[NativeExprT]c                 C  
   |  |S r2   )r    )r4   r7   r3   r3   r5   __call__5   s   
zSQLExpr.__call__3SQLNamespace[SQLLazyFrameT, Self, Any, NativeExprT]c                 C  r1   r2   r3   r4   r3   r3   r5   __narwhals_namespace__8   s   zSQLExpr.__narwhals_namespace__Callable[..., NativeExprT]expressifiable_argsr   c                  s   d fdd}|S )Nr7   r   r/   list[NativeExprT]c                   s2    } fdd  D fdd|D S )Nc                   s   i | ]
\}}|  |qS r3   )_evaluate_single_output_expr.0keyvaluer7   r3   r5   
<dictcomp>A   s    
zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<dictcomp>c                      g | ]
} |fi qS r3   r3   rC   native_seriesr*   other_native_seriesr3   r5   
<listcomp>E       zBSQLExpr._callable_to_eval_series.<locals>.func.<locals>.<listcomp>)items)r7   native_series_listr*   r?   r4   )r7   rL   r5   func?   s   
z.SQLExpr._callable_to_eval_series.<locals>.func)r7   r   r/   r@   r3   )r4   r*   r?   rR   r3   rQ   r5   _callable_to_eval_series<   s   z SQLExpr._callable_to_eval_series*WindowFunction[SQLLazyFrameT, NativeExprT]c                     d	 fdd}|S )
Nr7   r   window_inputsWindowInputs[NativeExprT]r/   r8   c                   s8     } fdd D fdd|D S )Nc                   s   i | ]\}}|  |qS r3   )_evaluate_window_exprrB   r7   rV   r3   r5   rG   X   s    zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<dictcomp>c                   rH   r3   r3   rI   rK   r3   r5   rM   \   rN   zHSQLExpr._push_down_window_function.<locals>.window_f.<locals>.<listcomp>)r+   rO   )r7   rV   rP   rQ   )r7   rL   rV   r5   window_fO   s   z4SQLExpr._push_down_window_function.<locals>.window_fr7   r   rV   rW   r/   r8   r3   )r4   r*   r?   rZ   r3   rQ   r5   _push_down_window_functionL   s   z"SQLExpr._push_down_window_functionc                 C  s    | j | j|| j| j| j| jdS Nr,   r-   r.   r)   )	__class__r    r"   r$   r%   r&   )r4   r+   r3   r3   r5   _with_window_functionc   s   zSQLExpr._with_window_functionwindow_funcc                K  s,   | j | j|fi ||| j| j| j| jdS r]   )r_   rS   r"   r$   r%   r&   )r4   r*   ra   r?   r3   r3   r5   _with_callableo   s   zSQLExpr._with_callablec                K  s:   | j | j|fi || j|fi || j| j| j| jdS r]   r_   rS   r\   r"   r$   r%   r&   )r4   r*   r?   r3   r3   r5   _with_elementwise   s   zSQLExpr._with_elementwiseopotherc                 C  s2   | j | j||d| j||d| j| j| j| jdS )Nrf   r^   rc   )r4   re   rf   r3   r3   r5   _with_binary   s   zSQLExpr._with_binaryrR   c                  sN   | j  d u r	d n d u rn fdd}t| | j| j| j|| j| jdS )Nc                   s    | S r2   r3   )output_namescurrent_alias_output_namesrR   r3   r5   <lambda>       z2SQLExpr._with_alias_output_names.<locals>.<lambda>r^   )r$   typer    r(   r"   r%   r&   )r4   rR   r-   r3   rj   r5   _with_alias_output_names   s   z SQLExpr._with_alias_output_namesc                   s   d	 fdd} j p|S )
Nr7   r   inputsrW   r/   r8   c                   "    j rJ  fdd| D S )Nc                   s   g | ]	} | jqS r3   )_window_expressionpartition_byrC   exprrp   r4   r3   r5   rM      s    zHSQLExpr.window_function.<locals>.default_window_func.<locals>.<listcomp>order_byr7   rp   r<   rp   r5   default_window_func   s   
z4SQLExpr.window_function.<locals>.default_window_funcr7   r   rp   rW   r/   r8   )r(   )r4   r{   r3   r<   r5   r+      s   
zSQLExpr.window_functionnamestrargsNativeExprT | PythonLiteralr   c                 G  s   |   j|g|R  S r2   )r=   	_function)r4   r}   r   r3   r3   r5   r         zSQLExpr._functionrE   r   c                 C  s   |   |S r2   )r=   _litr4   rE   r3   r3   r5   r         zSQLExpr._litru   c                 G  s   |   j| S r2   )r=   	_coalesce)r4   ru   r3   r3   r5   r      r   zSQLExpr._coalescec                 C  r1   r2   r3   r<   r3   r3   r5   _count_star       zSQLExpr._count_starrx   c                 G  r1   r2   r3   r4   ru   rx   r3   r3   r5   _first   r   zSQLExpr._firstc                 G  r1   r2   r3   r   r3   r3   r5   _last   r   zSQLExpr._lastignore_nullsboolc                C  r1   r2   r3   )r4   ru   r   r3   r3   r5   
_any_value   r   zSQLExpr._any_value	condition	otherwiseNativeExprT | Nonec                 C  s   |   |||S r2   )r=   _when)r4   r   rE   r   r3   r3   r5   r      s   zSQLExpr._whenr3   
descending
nulls_lastrs   Sequence[str | NativeExprT]
rows_start
int | Nonerows_endr   Sequence[bool] | Noner   c                C  r1   r2   r3   )r4   ru   rs   rx   r   r   r   r   r3   r3   r5   rr      s   
zSQLExpr._window_expression	func_name'Literal['sum', 'max', 'min', 'product']reversec                  rU   )
Nr7   r   rp   rW   r/   r8   c                   s,   t tj  fdd| D S )Nc                   s@   g | ]} d | j|jj  ddqS )isnullr   r   r   r   )r   r   rr   rs   rx   rt   )flagsr   rp   r4   r3   r5   rM      s    
z:SQLExpr._cum_window_func.<locals>.func.<locals>.<listcomp>r   lenrx   ry   r   r   r4   r   rp   r5   rR      s   z&SQLExpr._cum_window_func.<locals>.funcr|   r3   )r4   r   r   rR   r3   r   r5   _cum_window_func   s   zSQLExpr._cum_window_func$Literal['sum', 'mean', 'std', 'var']window_sizeintmin_samplesddofcenterc          	        s`   g d|r|d d }|d d }||  |n|d  dd fdd}|S )N)summeanstdvar      r   r7   r   rp   rW   r/   r8   c                   s   dv r nGdkrdkrd n<dv rdkrd n1dkr(dkr(d n&dkr3dkr3d	 nd
v rAd d}t |d d d}t ||j|jd fdd| D S )N>   r   r   r   r   var_popr   var_sampr   
stddev_popstddev_samp>   r   r   z;Only ddof=0 and ddof=1 are currently supported for rolling_.z,Only the following functions are supported: z.
Got: )rs   rx   r   r   c              
     sN   g | ]#} jd |fi kj |fi qS )count)r   rr   r   r   rt   )func_r   r4   window_kwargsr3   r5   rM     s    
z>SQLExpr._rolling_window_func.<locals>.func.<locals>.<listcomp>)
ValueErrorrs   rx   r7   rp   msgr   endr   r   r4   startsupported_funcs)r   r   r5   rR      s.   z*SQLExpr._rolling_window_func.<locals>.funcr|   r3   )	r4   r   r   r   r   r   half	remainderrR   r3   r   r5   _rolling_window_func   s   	

$zSQLExpr._rolling_window_functuple[int, ...]c                 C  s
   | j  S r2   )r&   _backend_versionr<   r3   r3   r5   r   %  s   
zSQLExpr._backend_versionc                C  r1   r2   r3   )clsru   r}   r3   r3   r5   _alias_native)     zSQLExpr._alias_native*Callable[[list[NativeExprT]], NativeExprT]exprsc                   sH   d fdd}d fd	d
} d }| ||t   t  |j|jdS )Nr7   r   r/   r8   c                   s    fddD gS )Nc                   s   g | ]}| D ]}|qqS r3   r3   rC   ru   erF   r3   r5   rM   1      zISQLExpr._from_elementwise_horizontal_op.<locals>.call.<locals>.<listcomp>r3   rF   r   rR   rF   r5   r*   0  s   z5SQLExpr._from_elementwise_horizontal_op.<locals>.callrV   rW   c                   s    fddD }|gS )Nc                   s"   g | ]}|  D ]}|q
qS r3   )r+   r   rY   r3   r5   rM   6  s   " zTSQLExpr._from_elementwise_horizontal_op.<locals>.window_function.<locals>.<listcomp>r3   )r7   rV   lstr   rY   r5   r+   3  s   
z@SQLExpr._from_elementwise_horizontal_op.<locals>.window_functionr   )r+   r,   r-   r.   r)   r7   r   r/   r8   r[   )r   r   r%   r&   )r   rR   r   r*   r+   contextr3   r   r5   _from_elementwise_horizontal_op,  s   z'SQLExpr._from_elementwise_horizontal_opc                 C  s   | j j S )a	  Return `True` for multi-output aggregations without names.

        For example, column `'a'` only appears in the output as a grouping key:

            df.group_by('a').agg(nw.all().sum())

        It does not get included in:

            nw.all().sum().
        )	_metadataexpansion_kindis_multi_unnamedr<   r3   r3   r5   _is_multi_output_unnamedC  s   z SQLExpr._is_multi_output_unnamedc                 C     |  dd |S )Nc                 S  r9   r2   )__eq__ru   rf   r3   r3   r5   rl   R     
 z SQLExpr.__eq__.<locals>.<lambda>rh   r4   rf   r3   r3   r5   r   Q     zSQLExpr.__eq__c                 C  r   )Nc                 S  r9   r2   )__ne__r   r3   r3   r5   rl   U  r   z SQLExpr.__ne__.<locals>.<lambda>r   r   r3   r3   r5   r   T  r   zSQLExpr.__ne__c                 C  r   )Nc                 S  r9   r2   )__add__r   r3   r3   r5   rl   X  r   z!SQLExpr.__add__.<locals>.<lambda>r   r   r3   r3   r5   r   W  r   zSQLExpr.__add__c                 C  r   )Nc                 S  r9   r2   )__sub__r   r3   r3   r5   rl   [  r   z!SQLExpr.__sub__.<locals>.<lambda>r   r   r3   r3   r5   r   Z  r   zSQLExpr.__sub__c                 C     |  dd |dS )Nc                 S  s   ||  S r2   r3   r   r3   r3   r5   rl   ^      z"SQLExpr.__rsub__.<locals>.<lambda>literalrh   aliasr   r3   r3   r5   __rsub__]  r   zSQLExpr.__rsub__c                 C  r   )Nc                 S  r9   r2   )__mul__r   r3   r3   r5   rl   a  r   z!SQLExpr.__mul__.<locals>.<lambda>r   r   r3   r3   r5   r   `  r   zSQLExpr.__mul__c                 C  r   )Nc                 S  r9   r2   )__truediv__r   r3   r3   r5   rl   d  r   z%SQLExpr.__truediv__.<locals>.<lambda>r   r   r3   r3   r5   r   c  r   zSQLExpr.__truediv__c                 C  r   )Nc                 S  s   ||  S r2   r3   r   r3   r3   r5   rl   g  r   z&SQLExpr.__rtruediv__.<locals>.<lambda>r   r   r   r3   r3   r5   __rtruediv__f  r   zSQLExpr.__rtruediv__c                 C  r   )Nc                 S  r9   r2   )__pow__r   r3   r3   r5   rl   j  r   z!SQLExpr.__pow__.<locals>.<lambda>r   r   r3   r3   r5   r   i  r   zSQLExpr.__pow__c                 C  r   )Nc                 S  s   ||  S r2   r3   r   r3   r3   r5   rl   m  r   z"SQLExpr.__rpow__.<locals>.<lambda>r   r   r   r3   r3   r5   __rpow__l  r   zSQLExpr.__rpow__c                 C  r   )Nc                 S  r9   r2   )__mod__r   r3   r3   r5   rl   p  r   z!SQLExpr.__mod__.<locals>.<lambda>r   r   r3   r3   r5   r   o  r   zSQLExpr.__mod__c                 C  r   )Nc                 S  s   ||  S r2   r3   r   r3   r3   r5   rl   s  r   z"SQLExpr.__rmod__.<locals>.<lambda>r   r   r   r3   r3   r5   __rmod__r  r   zSQLExpr.__rmod__c                 C  r   )Nc                 S  r9   r2   )__ge__r   r3   r3   r5   rl   v  r   z SQLExpr.__ge__.<locals>.<lambda>r   r   r3   r3   r5   r   u  r   zSQLExpr.__ge__c                 C  r   )Nc                 S  r9   r2   )__gt__r   r3   r3   r5   rl   y  r   z SQLExpr.__gt__.<locals>.<lambda>r   r   r3   r3   r5   r   x  r   zSQLExpr.__gt__c                 C  r   )Nc                 S  r9   r2   )__le__r   r3   r3   r5   rl   |  r   z SQLExpr.__le__.<locals>.<lambda>r   r   r3   r3   r5   r   {  r   zSQLExpr.__le__c                 C  r   )Nc                 S  r9   r2   )__lt__r   r3   r3   r5   rl     r   z SQLExpr.__lt__.<locals>.<lambda>r   r   r3   r3   r5   r   ~  r   zSQLExpr.__lt__c                 C  r   )Nc                 S  r9   r2   )__and__r   r3   r3   r5   rl     r   z!SQLExpr.__and__.<locals>.<lambda>r   r   r3   r3   r5   r     r   zSQLExpr.__and__c                 C  r   )Nc                 S  r9   r2   )__or__r   r3   r3   r5   rl     r   z SQLExpr.__or__.<locals>.<lambda>r   r   r3   r3   r5   r     r   zSQLExpr.__or__c                      d fdd} j ||dS )	Nru   r   rf   r/   c                   s&     | dkt| | d S Nr   r   r   re   floordivr   r<   r3   r5   rR        z"SQLExpr.__floordiv__.<locals>.funcrg   ru   r   rf   r   r/   r   r   r4   rf   rR   r3   r<   r5   __floordiv__  s   zSQLExpr.__floordiv__c                   s"   d	 fdd} j ||ddS )
Nru   r   rf   r/   c                   s&     |  dkt||  d S r   r   r   r<   r3   r5   rR     r   z#SQLExpr.__rfloordiv__.<locals>.funcrg   r   r   r   r   r3   r<   r5   __rfloordiv__  s   zSQLExpr.__rfloordiv__c                   (   d fdd}d fdd}  ||S )Nru   r   r/   c                         d|  dS )Nbool_andTr   r   r   ru   r<   r3   r5   f     zSQLExpr.all.<locals>.fr7   r   rp   rW   r8   c                       fdd| D S )Nc              
     0   g | ]} d | jdqS )r   Tr   rr   r   rs   r   rt   rv   r3   r5   rM         z1SQLExpr.all.<locals>.window_f.<locals>.<listcomp>r3   ry   r<   rz   r5   rZ        zSQLExpr.all.<locals>.window_fru   r   r/   r   r|   rb   r4   r  rZ   r3   r<   r5   all     zSQLExpr.allc                   r   )Nru   r   r/   c                   r   )Nbool_orFr   r  r<   r3   r5   r    r  zSQLExpr.any.<locals>.fr7   r   rp   rW   r8   c                   r  )Nc              
     r  )r  Fr  rt   rv   r3   r5   rM     r  z1SQLExpr.any.<locals>.window_f.<locals>.<listcomp>r3   ry   r<   rz   r5   rZ     r  zSQLExpr.any.<locals>.window_fr	  r|   r
  r  r3   r<   r5   any  r  zSQLExpr.anyc                         fddS )Nc                        d| S )Nmaxr   r  r<   r3   r5   rl     rm   zSQLExpr.max.<locals>.<lambda>r
  r<   r3   r<   r5   r       zSQLExpr.maxc                   r  )Nc                   r  )Nr   r  r  r<   r3   r5   rl     rm   zSQLExpr.mean.<locals>.<lambda>r
  r<   r3   r<   r5   r     r  zSQLExpr.meanc                     d fdd} |S )Nru   r   r/   c                   sd    dkr
 d| S  dkr d| S  d| }t d|  dt|dt|  S )Nr   r   r   r   r   sqrtr   re   mulsubru   	n_samplesr   r4   r3   r5   rR     s   
zSQLExpr.std.<locals>.funcr	  r
  r4   r   rR   r3   r  r5   r        
zSQLExpr.stdc                  r  )Nru   r   r/   c                   s\    dkr
 d| S  dkr d| S  d| }t d| t|dt|  S )Nr   r   r   r   r   r  r  r  r3   r5   rR     s   
zSQLExpr.var.<locals>.funcr	  r
  r  r3   r  r5   r     r  zSQLExpr.varc                   r  )Nc                   r  )Nmedianr  r  r<   r3   r5   rl     rm   z SQLExpr.median.<locals>.<lambda>r
  r<   r3   r<   r5   r    r  zSQLExpr.medianfloat | Nonec                   s   d fdd}  |S )Nru   r   r/   c                   s      d|  | S )Nisnan)r   r   r   r  r   r3   r5   	_fill_nan  s   z#SQLExpr.fill_nan.<locals>._fill_nanr	  rd   )r4   rE   r"  r3   r   r5   fill_nan  s   
zSQLExpr.fill_nanc                   r  )Nc                   r  )Nminr  r  r<   r3   r5   rl     rm   zSQLExpr.min.<locals>.<lambda>r
  r<   r3   r<   r5   r%    r  zSQLExpr.minc                   r  )Nc                   r  )Nr   r  r  r<   r3   r5   rl     rm   zSQLExpr.count.<locals>.<lambda>r
  r<   r3   r<   r5   r     r  zSQLExpr.countc                   r   )Nru   r   r/   c                   r   )Nr   r   r   r  r<   r3   r5   r    r  zSQLExpr.sum.<locals>.fr7   r   rp   rW   r8   c                   rq   )Nc              
     r  )r   r   r  rt   rv   r3   r5   rM     r  z1SQLExpr.sum.<locals>.window_f.<locals>.<listcomp>rw   ry   r<   rz   r5   rZ     s   
zSQLExpr.sum.<locals>.window_fr	  r|   r
  r  r3   r<   r5   r     s   zSQLExpr.sumc                   sX   j  jddd fdd}d fdd}||S )Nr   r   ru   r   r/   c              
     s(   t  d|  d d| S )Ncount_distinctr  r   )re   addr   r  )Foner4   zeror3   r5   rR     s   zSQLExpr.n_unique.<locals>.funcr7   r   rp   rW   r8   c                   s     fdd| D S )Nc                   sD   g | ]}t  d |j d d|jqS )r&  r  r   )re   r'  rs   r   rt   )r(  Wrp   r)  r4   r*  r3   r5   rM     s    z6SQLExpr.n_unique.<locals>.window_f.<locals>.<listcomp>r3   ry   r(  r+  r)  r4   r*  rz   r5   rZ     s   z"SQLExpr.n_unique.<locals>.window_fr	  r|   )r   rr   r   rb   )r4   rR   rZ   r3   r,  r5   n_unique  s   zSQLExpr.n_uniquec                   r  )Nc                   r  )Nabsr  r  r<   r3   r5   rl      rm   zSQLExpr.abs.<locals>.<lambda>r#  r<   r3   r<   r5   r.    r  zSQLExpr.abslower_boundupper_boundc                   s   d	 fdd} j |||dS )
Nru   r   r/  r0  r/   c                   s     d  d| ||S )Ngreatestleastr  )ru   r/  r0  r<   r3   r5   _clip#  s   zSQLExpr.clip.<locals>._clip)r/  r0  )ru   r   r/  r   r0  r   r/   r   r#  )r4   r/  r0  r3  r3   r<   r5   clip"  s   zSQLExpr.clipc                   r   )	Nru   r   r/  r/   c                        d| |S )Nr1  r  )ru   r/  r<   r3   r5   r3  /  r   z!SQLExpr.clip_lower.<locals>._clip)r/  )ru   r   r/  r   r/   r   r#  )r4   r/  r3  r3   r<   r5   
clip_lower.     zSQLExpr.clip_lowerc                   r   )	Nru   r   r0  r/   c                   r5  )Nr2  r  )ru   r0  r<   r3   r5   r3  5  r   z!SQLExpr.clip_upper.<locals>._clip)r0  )ru   r   r0  r   r/   r   r#  )r4   r0  r3  r3   r<   r5   
clip_upper4  r7  zSQLExpr.clip_upperc                   r  )Nc                   r  )Nr   r  r  r<   r3   r5   rl   ;  rm   z!SQLExpr.is_null.<locals>.<lambda>r#  r<   r3   r<   r5   is_null:  r  zSQLExpr.is_nulldecimalsc                        fddS )Nc                   s    d|  S )Nround)r   r   r  r:  r4   r3   r5   rl   ?  s    zSQLExpr.round.<locals>.<lambda>r#  )r4   r:  r3   r=  r5   r<  =     zSQLExpr.roundc                   r  )Nc                   r  )Nfloorr  r  r<   r3   r5   rl   C  rm   zSQLExpr.floor.<locals>.<lambda>r#  r<   r3   r<   r5   r?  B  r  zSQLExpr.floorc                   r  )Nc                   r  )Nceilr  r  r<   r3   r5   rl   F  rm   zSQLExpr.ceil.<locals>.<lambda>r#  r<   r3   r<   r5   r@  E  r  zSQLExpr.ceilc                   r  )Nc                   r  )Nsinr  r  r<   r3   r5   rl   I  rm   zSQLExpr.sin.<locals>.<lambda>r#  r<   r3   r<   r5   rA  H  r  zSQLExpr.sinc                   s   d fdd}  |S )Nru   r   r/   c                   s*     |  dk  td d| S )Nr   nanr  )r   r   floatr   r  r<   r3   r5   _sqrtL  s   "zSQLExpr.sqrt.<locals>._sqrtr	  r#  )r4   rD  r3   r<   r5   r  K  s   
zSQLExpr.sqrtc                   r  )Nc                   r  )Nexpr  r  r<   r3   r5   rl   T  rm   zSQLExpr.exp.<locals>.<lambda>r#  r<   r3   r<   r5   rE  S  r  zSQLExpr.expbaserC  c                   r  )Nru   r   r/   c                   s`   j }| dk td| dktdt|d| |d S )Nr   rB  z-inflog)r   r   r   rC  re   truediv)ru   r(  rF  r4   r3   r5   _logW  s   zSQLExpr.log.<locals>._logr	  r#  )r4   rF  rJ  r3   rI  r5   rG  V  s   
zSQLExpr.logc                C     |  | jd|dS )Nr   r   r`   r   r4   r   r3   r3   r5   cum_sumf     zSQLExpr.cum_sumc                C  rK  )Nr  rL  rM  rN  r3   r3   r5   cum_maxi  rP  zSQLExpr.cum_maxc                C  rK  )Nr%  rL  rM  rN  r3   r3   r5   cum_minl  rP  zSQLExpr.cum_minc                     d	 fdd} |S )
Nr7   r   rp   rW   r/   r8   c                   s*   t tj  fdd| D S )Nc              
     s.   g | ]}j d |jj  ddqS )r   r   r   rr   r   rs   rx   rt   r   rp   r4   r3   r5   rM   t  s    	
z3SQLExpr.cum_count.<locals>.func.<locals>.<listcomp>r   ry   r   r4   r   r5   rR   p     	zSQLExpr.cum_count.<locals>.funcr|   r`   )r4   r   rR   r3   rV  r5   	cum_counto  s   
zSQLExpr.cum_countc                C  rK  )NproductrL  rM  rN  r3   r3   r5   cum_prod  r>  zSQLExpr.cum_prodc                C     |  | jd|||dS )Nr   r   r`   r   r4   r   r   r   r3   r3   r5   rolling_sum     zSQLExpr.rolling_sumc                C  r\  )Nr   r]  r^  r_  r3   r3   r5   rolling_mean  ra  zSQLExpr.rolling_meanc             	   C     |  | jd||||dS )Nr   r   r   r^  r4   r   r   r   r   r3   r3   r5   rolling_var  
   
zSQLExpr.rolling_varc             	   C  rc  )Nr   rd  r^  re  r3   r3   r5   rolling_std  rg  zSQLExpr.rolling_stdc                      d	 fdd}  |S )
Nr7   r   rp   rW   r/   r8   c                   s&   j  j fdd| D S )Nc              	     s*   g | ]}t | d |jjqS lag)re   r  rs   rx   rt   r(  rp   windowr3   r5   rM     s    z.SQLExpr.diff.<locals>.func.<locals>.<listcomp>)r   rr   ry   r<   rl  r5   rR     s
   zSQLExpr.diff.<locals>.funcr|   rX  r4   rR   r3   r<   r5   diff     

zSQLExpr.diffnc                   rS  )
Nr7   r   rp   rW   r/   r8   c                   s    fdd| D S )Nc              	     s(   g | ]} d | j jqS rj  rT  rt   )rp   rq  r4   r3   r5   rM     s    z/SQLExpr.shift.<locals>.func.<locals>.<listcomp>r3   ry   rq  r4   rz   r5   rR     s   zSQLExpr.shift.<locals>.funcr|   rX  )r4   rq  rR   r3   rr  r5   shift  s   

zSQLExpr.shiftc                   ri  )
Nr7   r   rp   rW   r/   r8   c                   r  )Nc                   s8   g | ]} d g  j|R  jdkqS )
row_numberr   rr   r   rs   rx   r   rt   rv   r3   r5   rM     s    z;SQLExpr.is_first_distinct.<locals>.func.<locals>.<listcomp>r3   ry   r<   rz   r5   rR     s   z'SQLExpr.is_first_distinct.<locals>.funcr|   rX  rn  r3   r<   r5   is_first_distinct  s   
zSQLExpr.is_first_distinctc                   ri  )
Nr7   r   rp   rW   r/   r8   c                   s*   t dtj  fdd| D S )NTc              	     s>   g | ]}j d g j|R j  ddkqS )rt  r   r   ru  rt   rU  r3   r5   rM     s    	z:SQLExpr.is_last_distinct.<locals>.func.<locals>.<listcomp>r   ry   r<   r   r5   rR     rW  z&SQLExpr.is_last_distinct.<locals>.funcr|   rX  rn  r3   r<   r5   is_last_distinct  s   
zSQLExpr.is_last_distinctc                   ri  )
Nr7   r   rp   rW   r/   r8   c                   r  )Nc                   *   g | ]} j|g jR   jqS r3   )rr   r   rx   rs   rt   rv   r3   r5   rM         z/SQLExpr.first.<locals>.func.<locals>.<listcomp>r3   ry   r<   rz   r5   rR        zSQLExpr.first.<locals>.funcr|   rX  rn  r3   r<   r5   first  rp  zSQLExpr.firstc                   ri  )
Nr7   r   rp   rW   r/   r8   c                   r  )Nc                   rx  r3   )rr   r   rx   rs   rt   rv   r3   r5   rM     ry  z.SQLExpr.last.<locals>.func.<locals>.<listcomp>r3   ry   r<   rz   r5   rR     rz  zSQLExpr.last.<locals>.funcr|   rX  rn  r3   r<   r5   last  rp  zSQLExpr.lastc                  r;  )Nc                   s   j |  dS )N)r   )r   r  r   r4   r3   r5   rl     s    z#SQLExpr.any_value.<locals>.<lambda>r
  )r4   r   r3   r}  r5   	any_value  r>  zSQLExpr.any_valuemethodr   c                  sv   dv r
 dndkr dn d	ddfdd d fdd}d fdd}||S )N>   r  r%  averagerankdense
dense_rankrt  r3   ru   r   rs   r   r   r   r/   c          	        s     }|| f|gdgd}dg || R i}j}j}dkr;tt| fi |||fi |d}n-dkr`t| fi |tt||fi |dd}n| fi |}|d|  |S )	NT)rs   rx   r   r   rs   r  r   r  g       @r   )	r   rr   r   re   r  r'  r   rH  r   )	ru   rs   r   
count_exprr   count_window_kwargsrm  r(  	rank_expr)rR   r  r4   r3   r5   _rank
  s6   zSQLExpr.rank.<locals>._rankc                   s    | dS )Nr   r3   r  )r  r   r3   r5   _unpartitioned_rank.  s   z)SQLExpr.rank.<locals>._unpartitioned_rankr7   r   rp   rW   r8   c                   s,    j r	d}t| fdd| D S )Nz[`rank` followed by `over` with `order_by` specified is not supported for SQL-like backends.c                   s   g | ]
} |j d qS )r  rs   rt   )r  r   rp   r3   r5   rM   7  rN   z;SQLExpr.rank.<locals>._partitioned_rank.<locals>.<listcomp>)rx   NotImplementedErrorr   )r  r   r4   rz   r5   _partitioned_rank1  s   z'SQLExpr.rank.<locals>._partitioned_rank)r3   )ru   r   rs   r   r   r   r/   r   r	  r|   )r   rb   )r4   r  r   r  r  r3   )r  r   rR   r  r4   r5   r    s   
$zSQLExpr.rankc                   s<   dfdd d fdd	}d fdd} ||S )Nru   r   rs   str | NativeExprTr/   c                   s"       | g|R  dkS )Nr   )rr   r   r   )ru   rs   r<   r3   r5   
_is_unique?  s
   z%SQLExpr.is_unique.<locals>._is_uniquec                   s    | S r2   r3   r  )r  r3   r5   _unpartitioned_is_uniqueF  s   z3SQLExpr.is_unique.<locals>._unpartitioned_is_uniquer7   r   rp   rW   r8   c                   s"    j rJ  fdd| D S )Nc                   s   g | ]} |gj R  qS r3   r  rt   )r  rp   r3   r5   rM   M  r   zESQLExpr.is_unique.<locals>._partitioned_is_unique.<locals>.<listcomp>rw   ry   r  r4   rz   r5   _partitioned_is_uniqueI  s   
z1SQLExpr.is_unique.<locals>._partitioned_is_unique)ru   r   rs   r  r/   r   r	  r|   )rb   r`   )r4   r  r  r3   r  r5   	is_unique>  s   
zSQLExpr.is_uniqueSequence[str]c                   s.   d fdd}j |jjjjdS )	Nr7   r   r/   r8   c                   s    | t S r2   )r+   r   rF   rx   rs   r4   r3   r5   rR   W  r  zSQLExpr.over.<locals>.funcr^   r   )r_   r"   r$   r%   r&   )r4   rs   rx   rR   r3   r  r5   overT  s   zSQLExpr.overkeepr   c                  s6   |dkrd| d j  d}t|  fddS )Nr  z`Expr.mode(keep='z#')` is not implemented for backend z3

Hint: Use `nw.col(...).mode(keep='any')` instead.c                   r  )Nmoder  r  r<   r3   r5   rl   j  rm   zSQLExpr.mode.<locals>.<lambda>)r&   r  rb   )r4   r  r   r3   r<   r5   r  b  s
   zSQLExpr.modeSQLExprStringNamespace[Self]c                 C  r1   r2   r3   r<   r3   r3   r5   r~   m  r   zSQLExpr.strSQLExprDateTimeNamesSpace[Self]c                 C  r1   r2   r3   r<   r3   r3   r5   dtp  r   z
SQLExpr.dtr2   )r*   r   r+   r'   r,   r!   r-   r#   r.   r   r)   r   r/   r0   r   )r/   r;   )r*   r>   r?   r   r/   r   )r*   r>   r?   r   r/   rT   )r+   rT   r/   r   )r*   r>   ra   r'   r?   r   r/   r   )r*   r>   r?   r   r/   r   )re   r>   rf   r   r/   r   )rR   r#   r/   r   )r/   rT   )r}   r~   r   r   r/   r   )rE   r   r/   r   r	  )r/   r   )ru   r   rx   r~   r/   r   )ru   r   r   r   r/   r   )r   r   rE   r   r   r   r/   r   )r3   r3   NN)ru   r   rs   r   rx   r   r   r   r   r   r   r   r   r   r/   r   )r   r   r   r   r/   rT   )r   r   r   r   r   r   r   r   r   r   r/   rT   )r/   r   )ru   r   r}   r~   r/   r   )rR   r   r   r   r/   r   )r/   r   )rf   r   r/   r   )r/   r   )r   r   r/   r   )rE   r   r/   r   )r/  r   r0  r   r/   r   )r/  r   r/   r   )r0  r   r/   r   )r:  r   r/   r   )rF  rC  r/   r   )r   r   r/   r   )r   r   r   r   r   r   r/   r   )
r   r   r   r   r   r   r   r   r/   r   )rq  r   r/   r   )r   r   r/   r   )r  r   r   r   r/   r   )rs   r   rx   r  r/   r   )r  r   r/   r   )r/   r  )r/   r  )h__name__
__module____qualname____annotations__r   DUCKDBr6   r:   r=   rS   r\   r`   rb   rd   rh   ro   propertyr+   r   r   r   r   r   r   r   r   rr   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r  r$  r%  r   r   r-  r.  r4  r6  r8  r9  r<  r?  r@  rA  r  rE  rG  rO  rQ  rR  rY  r[  r`  rb  rf  rh  ro  rs  rv  rw  r{  r|  r~  r  r  r  r  r~   r  r   
drop_nullsfilteruniquer3   r3   r3   r5   r   "   s   
 
9		
<
r   )-
__future__r   operatorre   typingr   r   r   r   r   narwhals._compliant.exprr   narwhals._compliant.typingr	   r
   r   r   r   narwhals._compliant.windowr   narwhals._expression_parsingr   r   narwhals._sql.typingr   narwhals._utilsr   r   r   r   collections.abcr   typing_extensionsr   narwhals._sql.expr_dtr   narwhals._sql.expr_strr   narwhals._sql.namespacer   narwhals.typingr   r   r   r   r3   r3   r3   r5   <module>   s$    &