
    hh                       d dl mZ d dlmZ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mZmZ er2d 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lm!Z! d dlm"Z"m#Z#  G d dedef                   Z$dS )    )annotations)TYPE_CHECKINGAnyN)ArrowSeries)	EagerExpr)!evaluate_output_names_and_aliases)Implementationgenerate_temporary_column_namenot_implemented)Sequence)Self)ArrowDataFrameArrowNamespace)
AliasNames	EvalNames
EvalSeriesScalarKwargs)ExprMetadata)Version_LimitedContextc                      e Zd ZU ej        Zded<   dddd/dZeddd0d             Z	ed1d"            Z
d2d$Zd%d&d3d*Zd4d.Z e            ZdS )5	ArrowExprr	   _implementationN)scalar_kwargsimplementationcall'EvalSeries[ArrowDataFrame, ArrowSeries]depthintfunction_namestrevaluate_output_namesEvalNames[ArrowDataFrame]alias_output_namesAliasNames | Noneversionr   r   ScalarKwargs | Noner   Implementation | NonereturnNonec                   || _         || _        || _        || _        || _        || _        || _        |pi | _        d | _        d S )N)_call_depth_function_name_evaluate_output_names_alias_output_names_version_scalar_kwargs	_metadata)	selfr   r   r!   r#   r%   r'   r   r   s	            K/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_arrow/expr.py__init__zArrowExpr.__init__    sP     
+&;##5 +1r.2     )r!   cls
type[Self]evaluate_column_namescontextr   r   c              <    dfd} | |d|d |j                   S )	Ndfr   r*   list[ArrowSeries]c                     	  fd            D             S # t           $ r)}                                           x}r|| d }~ww xY w)Nc                T    g | ]$}t          j        |         |j                   %S ))namer'   )r   nativer2   ).0column_namer?   s     r6   
<listcomp>z=ArrowExpr.from_column_names.<locals>.func.<locals>.<listcomp>A   sJ        $  	+.["+    r8   )KeyError_check_columns_exist)r?   eerrorr<   s   `  r6   funcz)ArrowExpr.from_column_names.<locals>.func?   s    
    (='<R'@'@	       334I4I"4M4MNNN5 'Q&s    
A$A		Ar   r   r!   r#   r%   r'   r?   r   r*   r@   )r2   )r:   r<   r=   r!   rL   s    `   r6   from_column_nameszArrowExpr.from_column_names6   sQ    	 	 	 	 	 	 s'"7#$
 
 
 	
r8   column_indicesc               b    d	fd} | |dd|                                d |j                  S )
Nr?   r   r*   r@   c                F      j          j         fdD             S )Nc                V    g | ]%}t          j        |         |                    &S ))rC   r=   )r   from_native)rE   icolsr?   tbls     r6   rG   z?ArrowExpr.from_column_indices.<locals>.func.<locals>.<listcomp>Z   sC        'AT!WbIII  r8   )rD   columns)r?   rV   rW   rP   s   `@@r6   rL   z+ArrowExpr.from_column_indices.<locals>.funcW   sI    )C:D     '   r8   r   nthrM   rN   )_eval_names_indicesr2   )r:   r=   rP   rL   s     ` r6   from_column_indiceszArrowExpr.from_column_indicesU   s_    	 	 	 	 	 	 s"%"9"9."I"I#$
 
 
 	
r8   r   c                0    ddl m}  || j                  S )Nr   r   )r'   )narwhals._arrow.namespacer   r2   )r5   r   s     r6   __narwhals_namespace__z ArrowExpr.__narwhals_namespace__h   s)    <<<<<<~dm4444r8   F)returns_scalarr_   booldict[str, Any]c                   |rddini S )N_return_py_scalarF )r5   r_   s     r6   _reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargsm   s     0>E#U++2Er8   partition_bySequence[str]order_byc                      j         rj        sd}t          |          ssJ d fd}nd fd}                     | j        dz    j        d	z    j         j         j        
          S )Nz[Only aggregation or literal operations are supported in grouped `over` context for PyArrow.r?   r   r*   Sequence[ArrowSeries]c                z   t          d| j                  } |                     |d           j        ddd}  |                     |gd                    }$j        rt          |           fd|D             S t          j        | 	                    |          j
                  fd|D             S )	N   )rh   F
descending
nulls_lastT)strictc                    g | ]<}|                     t          j        |                                                    =S rd   )_with_nativeparepeatitem)rE   ssizes     r6   rG   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s9    WWW!ANN29QVVXXt+D+DEEWWWr8   c                j    g | ]/}|                     |j                                                0S rd   )rr   rD   take)rE   rv   sorting_indicess     r6   rG   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s3    XXX1qx}}_'E'EFFXXXr8   )r
   rX   with_row_indexsortdropis_scalar_likelenpcsort_indices
get_columnrD   )r?   tokenresultsrw   rz   metarh   r5   s      @@r6   rL   zArrowExpr.over.<locals>.func}   s    6q"*EEAR&&ut&<<A%E   $rwwwtw<<==#(;# r77DWWWWwWWWW
 #%/"--2F2F2M"N"NXXXXPWXXXXr8   c                t   r | j         ddd} t          | g           \  }}t          |                                        x}rd| d}t	          |          |                     d                                         | j                             dd          fd	|D             S )
NFrm   zColumn names zV appear in both expression output names and in `over` keys.
This is not yet supported.)drop_null_keysleft_right)howleft_onright_onsuffixc                :    g | ]}                     |          S rd   )r   )rE   aliastmps     r6   rG   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s%    CCC%u--CCCr8   )	r|   r   setintersectionNotImplementedErrorgroup_byaggsimple_selectjoin)	r?   output_namesaliasesoverlapmsgr   rh   rf   r5   s	        @r6   rL   zArrowExpr.over.<locals>.func   s     P (uOOOB(I$PRTV(W(W%g!,//<<\JJJ7 35 5 5 5  .c222kk,ukEEII$OO&b&5::()# ;   DCCC7CCCCr8      z->overrM   )r?   r   r*   rj   )	r4   r~   r   	__class__r.   r/   r0   r1   r2   )r5   rf   rh   r   rL   r   s   ```  @r6   overzArrowExpr.overr   s    ~ 	+D,T5H,oC%c*** .	D OOOY Y Y Y Y Y Y Y Y&D D D D D D D D0 ~~+/-8"&"=#7M  
 
 	
r8   )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   )rP   r    r=   r   r*   r   )r*   r   )r_   r`   r*   ra   )rf   rg   rh   rg   r*   r   )__name__
__module____qualname__r	   PYARROWr   __annotations__r7   classmethodrO   r[   r^   re   r   r   ewm_meanrd   r8   r6   r   r      s         &4&<O<<<< .2043 3 3 3 3 3,   
 
 
 
 
 [
< 
 
 
 [
$5 5 5 5 ).F F F F F F
=
 =
 =
 =
~   HHHr8   r   r   )%
__future__r   typingr   r   pyarrowrs   pyarrow.computecomputer   narwhals._arrow.seriesr   narwhals._compliantr   narwhals._expression_parsingr   narwhals._utilsr	   r
   r   collections.abcr   typing_extensionsr   narwhals._arrow.dataframer   r]   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   rd   r8   r6   <module>r      s   " " " " " " % % % % % % % %           . . . . . . ) ) ) ) ) ) J J J J J J           	9((((((&&&&&&888888888888ZZZZZZZZZZZZ99999988888888T! T! T! T! T!	*K78 T! T! T! T! T!r8   