
    }i$                       d dl mZ d dlmZ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mZ d dlmZmZmZ d dlmZ er*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$ d dlm%Z%m&Z&  G d dedef                   Z'dS )    )annotations)TYPE_CHECKINGAnycastN)ArrowSeries)	EagerExpr)evaluate_nodes!evaluate_output_names_and_aliases)Implementationgenerate_temporary_column_namenot_implemented)col)Sequence)Self)ArrowDataFrameArrowNamespace)
AliasNames	EvalNames
EvalSeries)Version_LimitedContextc                      e Zd ZU ej        Zded<   ej        dd(dZed)d            Z	ed*d            Z
d+dZddd,d!Zd-d$Zd.d&Z e            Zd'S )/	ArrowExprr   _implementation)implementationcall'EvalSeries[ArrowDataFrame, ArrowSeries]evaluate_output_namesEvalNames[ArrowDataFrame]alias_output_namesAliasNames | Noneversionr   r   returnNonec               >    || _         || _        || _        || _        d S )N)_call_evaluate_output_names_alias_output_names_version)selfr   r   r!   r#   r   s         H/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_arrow/expr.py__init__zArrowExpr.__init__    s&     
&;##5     cls
type[Self]evaluate_column_namescontextr   r   c              8    df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   nativer*   ).0column_namer4   s     r,   
<listcomp>z=ArrowExpr.from_column_names.<locals>.func.<locals>.<listcomp>8   sJ        $  	+.["+    r.   )KeyError_check_columns_exist)r4   eerrorr1   s   `  r,   funcz)ArrowExpr.from_column_names.<locals>.func6   s    
    (='<R'@'@	       334I4I"4M4MNNN5 'Q&s    
A$A		Ar   r!   r#   r4   r   r$   r5   )r*   )r/   r1   r2   rA   s    `  r,   from_column_nameszArrowExpr.from_column_names.   sK    	 	 	 	 	 	 s"7#$	
 
 
 	
r.   column_indicesintc               ^    dfd} | ||                                d |j                  S )Nr4   r   r$   r5   c                F      j          j         fdD             S )Nc                V    g | ]%}t          j        |         |                    &S ))r8   r2   )r   from_native)r:   icolsr4   tbls     r,   r<   z?ArrowExpr.from_column_indices.<locals>.func.<locals>.<listcomp>O   sC        'AT!WbIII  r.   )r9   columns)r4   rL   rM   rE   s   `@@r,   rA   z+ArrowExpr.from_column_indices.<locals>.funcL   sI    )C:D     '   r.   rB   rC   )_eval_names_indicesr*   )r/   r2   rE   rA   s     ` r,   from_column_indiceszArrowExpr.from_column_indicesJ   sY    	 	 	 	 	 	 s"%"9"9."I"I#$	
 
 
 	
r.   r   c                0    ddl m}  || j                  S )Nr   r   )r#   )narwhals._arrow.namespacer   r*   )r+   r   s     r,   __narwhals_namespace__z ArrowExpr.__narwhals_namespace__[   s)    <<<<<<~dm4444r.   F)returns_scalarrT   booldict[str, Any]c                   |rddini S )N_return_py_scalarF )r+   rT   s     r,   _reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargs`   s     0>E#U++2Er.   order_bySequence[str]c                ~     sJ  j         d fd}                     | j         j         j                  S )Nr4   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   )r[   F
descending
nulls_lastT)strictc                    g | ]<}|                     t          j        |                                                    =S rY   )_with_nativeparepeatitem)r:   ssizes     r,   r<   zFArrowExpr._over_without_partition_by.<locals>.func.<locals>.<listcomp>u   s9    SSSary4'@'@AASSSr.   c                j    g | ]/}|                     |j                                                0S rY   )rf   r9   take)r:   rj   sorting_indicess     r,   r<   zFArrowExpr._over_without_partition_by.<locals>.func.<locals>.<listcomp>{   s3    TTTqANN18==#A#ABBTTTr.   )r   rN   with_row_indexsortdropis_scalar_likelenpcsort_indices
get_columnr9   )r4   tokenresultsrk   rn   metar[   r+   s      @@r,   rA   z2ArrowExpr._over_without_partition_by.<locals>.funck   s    21bjAAE=""54"88=e  B d277E7478899GD$7 2wwSSSS7SSSS
 !obmmE.B.B.IJJOTTTTGTTTTr.   rB   r4   r   r$   r^   )	_metadata	__class__r(   r)   r*   )r+   r[   rA   ry   s   `` @r,   _over_without_partition_byz$ArrowExpr._over_without_partition_bye   sx     ~	U 	U 	U 	U 	U 	U 	U 	U$ ~~"&"=#7M	  
 
 	
r.   partition_byc                    ssJ                                 S  j        r5j        j        j        rj        j        j        sd}t          |          t          t          t           j        
                                                              d fd}                     | j         j         j                  S )	NzOnly elementary aggregations are supported for `.over` in PyArrow backend when `partition_by` is specified.

Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/r4   r   r$   r^   c           
                                         }j        |                     t          dt	          d d         |                              } t          | g           \  }}t          dt          |                     d                                       |                    }nt          | g           \  }}}r | j	        ddd} t          |                                        x}rd| d}t          |           | j         }d |j        j        D             }t!          |          sR|                     d                              |          |                    d	d
          fd|D             S | j        | j        }
}	                                 }g }g }t)          |j        |          D ]\  }}|s|                    |           t-          d|
          }|                    |           |
                    |           |j                            |	                    |                              d                                          j        ||          }|                    |j                            |                      | j        | }|                    |d                              |          } |j        |                     |||dd
          fd|D             S )Nr   Fra   zColumn names zV appear in both expression output names and in `over` keys.
This is not yet supported.c                $    g | ]}|j         d k    S )r   )
null_count)r:   cas     r,   r<   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s    RRRr*RRRr.   )drop_null_keysleft_right)howleft_onright_onsuffixc                :    g | ]}                     |          S rY   rv   )r:   aliastmps     r,   r<   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s%    CCC%u--CCCr.   r`   encode)r2   r8   inner)r   r   r   r   c                :    g | ]}                     |          S rY   r   )r:   r   rets     r,   r<   z0ArrowExpr.over.<locals>.func.<locals>.<listcomp>   s%    ???eCNN5))???r.   )rS   prevwith_columnsr   r	   r
   nw_col_append_node_to_compliant_exprrp   setintersectionNotImplementedErrorsimple_selectr9   rN   anygroup_byaggjoinzipappendr   _seriesrJ   columndictionary_encodecombine_chunksindices_expr_from_series)r4   plx_aliasesleaf_ceoverlapmsgpartition_tbl	has_nulls
tbl_nativecurrent_cols
group_keysencoded_colscol_namehas_nulltmp_namer   tbl_encodedwindowedr   r   ry   nodesr[   r~   r+   s                      @@r,   rA   zArrowExpr.over.<locals>.func   sf   --//Cy$__T+~eCRCjRU7V7V%W%WXX>tRLL
7G$11%)<<OOPSTT 
 ?tRLL
7 LRWh5UKKKg,,33LAAAw /1G 1 1 1  *#...,B,l;MRR]5I5QRRRIy>> 	Dkk,ukEEII'RR#((()# )   DCCC7CCCC')y"*J--//C$&J,.L&)-*?&K&K I I"( I%%h////=aNNH%%h/// ''111!k55&--h77..x88+^--$ #% 6 	 	G !''	(>(>w(G(GHHHH)"/<8K"++Ju+MMQQRYZZH+++Z8=="# >  C @???w????r.   rB   rz   )r}   r{   current_nodekindrr   r   is_elementwiser   listreversediter_nodes_reversedr|   r(   r)   r*   )r+   r~   r[   r   rA   ry   r   s   ```  @@r,   overzArrowExpr.over   s    	=OOO228<<< ~ 
	+!&5
	+	%di.F%_  &c***Xd4>#E#E#G#GHHIIJJI	@ I	@ I	@ I	@ I	@ I	@ I	@ I	@ I	@ I	@V ~~"&"=#7M	  
 
 	
r.   N)r   r   r   r    r!   r"   r#   r   r   r   r$   r%   )r/   r0   r1   r    r2   r   r$   r   )rE   rF   r2   r   r$   r   )r$   r   )rT   rU   r$   rV   )r[   r\   r$   r   )r~   r\   r[   r\   r$   r   )__name__
__module____qualname__r   PYARROWr   __annotations__r-   classmethodrD   rP   rS   rZ   r}   r   r   ewm_meanrY   r.   r,   r   r      s        &4&<O<<<< *8)?            
 
 
 [
6 
 
 
 [
 5 5 5 5 ).F F F F F F

 
 
 
>i
 i
 i
 i
V   HHHr.   r   r   )(
__future__r   typingr   r   r   pyarrowrg   pyarrow.computecomputert   narwhals._arrow.seriesr   narwhals._compliantr   narwhals._expression_parsingr	   r
   narwhals._utilsr   r   r   narwhals.functionsr   r   collections.abcr   typing_extensionsr   narwhals._arrow.dataframer   rR   r   narwhals._compliant.typingr   r   r   r   r   r   rY   r.   r,   <module>r      s   " " " " " " + + + + + + + + + +           . . . . . . ) ) ) ) ) ) Z Z Z Z Z Z Z Z         
 - , , , , , 9((((((&&&&&&888888888888LLLLLLLLLL88888888R! R! R! R! R!	*K78 R! R! R! R! R!r.   