
    Wh                        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 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"y)    )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	 	 	 	 	 	 	 	 	 dd       Z	edd	       Z
dd
Zdd	 	 	 ddZddZ e       Zy)	ArrowExprr	   _implementationN)scalar_kwargsimplementationc                   || _         || _        || _        || _        || _        || _        || _        |xs i | _        d | _        y )N)_call_depth_function_name_evaluate_output_names_alias_output_names_version_scalar_kwargs	_metadata)	selfcalldepthfunction_nameevaluate_output_namesalias_output_namesversionr   r   s	            N/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_arrow/expr.py__init__zArrowExpr.__init__   sL     
+&;##5 +1r.2     )r)   c              @    dfd} | |d|d |j                         S )Nc                    	  |       D cg c]'  }t        | j                  |   || j                        ) c}S c c}w # t        $ r"}| j	                   |             x}r|| d }~ww xY w)N)namer,   )r   nativer#   KeyError_check_columns_exist)dfcolumn_nameeerrorevaluate_column_namess       r-   funcz)ArrowExpr.from_column_names.<locals>.func>   s    

 (=R'@	 $  		+.["++    334I"4MNN5NQ&s%   
A ,<A A 	A,
A''A,r   r(   r)   r*   r+   r,   r7   r   returnzlist[ArrowSeries])r#   )clsr;   contextr)   r<   s    `   r-   from_column_nameszArrowExpr.from_column_names5   s/    	 '"7#$$
 	
r/   c               ^    dfd} | |dd| j                        d |j                        S )Nc                    | j                   }| j                  }D cg c]   }t        j                  ||   ||   |       " c}S c c}w )N)r3   rA   )r4   columnsr   from_native)r7   tblcolsicolumn_indicess       r-   r<   z+ArrowExpr.from_column_indices.<locals>.funcV   sN    ))C::D ( ''AT!WbI  s   %Ar   nthr=   r>   )_eval_names_indicesr#   )r@   rA   rJ   r<   s     ` r-   from_column_indiceszArrowExpr.from_column_indicesT   s:    	 "%"9"9."I#$$
 	
r/   c                4    ddl m}  || j                        S )Nr   r   )r,   )narwhals._arrow.namespacer   r#   )r&   r   s     r-   __narwhals_namespace__z ArrowExpr.__narwhals_namespace__g   s    <dmm44r/   F)returns_scalarc                   |rddiS i S )N_return_py_scalarF )r&   rQ   s     r-   _reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargsl   s     0>#U+E2Er/   c                2    r/ j                   # j                   j                  sd}t        |      ssJ d fd}nd fd} j                  | j                  dz    j
                  dz    j                   j                   j                        S )Nz[Only aggregation or literal operations are supported in grouped `over` context for PyArrow.c                   t        d| j                        } | j                  |d       j                  ddd}  | j	                  |gd            }t        j                  | j                  |      j                        }|D cg c],  }|j                  |j                  j                  |            . c}S c c}w )N   )order_byF)
descending
nulls_lastT)strict)r
   rE   with_row_indexsortdroppcsort_indices
get_columnr4   _with_nativetake)r7   tokenresultsorting_indicessrY   r&   s        r-   r<   zArrowExpr.over.<locals>.func   s    6q"**EAR&&ut&<AA%E bggugdg;< #%//"--2F2M2M"NPVW1qxx}}_'EFWWWs   1B<c                P   t        | g       \  }}t        |      j                        x}rd| d}t        |      | j	                  d      j                        } | j                   j                  |dd      }|D cg c]  }|j                  |       c}S c c}w )NzColumn names zV appear in both expression output names and in `over` keys.
This is not yet supported.F)drop_null_keysleft_right)howleft_onright_onsuffix)	r   setintersectionNotImplementedErrorgroup_byaggsimple_selectjoinrb   )	r7   output_namesaliasesoverlapmsgtmpaliaspartition_byr&   s	          r-   r<   zArrowExpr.over.<locals>.func   s    (I$PRTV(W%g!,/<<\JJ7J (y 15 5  .c22kk,ukEII$O&b&&5::()# ;  <CC%u-CCCs   B#   z->overr=   )r7   r   r?   zSequence[ArrowSeries])	r%   is_scalar_likers   	__class__r   r    r!   r"   r#   )r&   r~   rY   r{   r<   s   ```  r-   overzArrowExpr.overq   s    *NN11oC%c** O8
XD* ~~++/--8"&"="=#77MM  
 	
r/   )r'   z'EvalSeries[ArrowDataFrame, ArrowSeries]r(   intr)   strr*   EvalNames[ArrowDataFrame]r+   zAliasNames | Noner,   r   r   zScalarKwargs | Noner   zImplementation | Noner?   None)
r@   z
type[Self]r;   r   rA   r   r)   r   r?   r   )rJ   r   rA   r   r?   r   )r?   r   )rQ   boolr?   zdict[str, Any])r~   Sequence[str]rY   r   r?   r   )__name__
__module____qualname__r	   PYARROWr   __annotations__r.   classmethodrB   rM   rP   rU   r   r   ewm_meanrT   r/   r-   r   r      s   &4&<&<O^< .204353 	3
 3  93 .3 3 +3 .3 
3,   

8

 !
 
 

 
< 
 
$5 ).F!%F	F
7
r  Hr/   r   r   )#
__future__r   typingr   r   pyarrow.computecomputer`   narwhals._arrow.seriesr   narwhals._compliantr   narwhals._expression_parsingr   narwhals._utilsr	   r
   r   collections.abcr   typing_extensionsr   narwhals._arrow.dataframer   rO   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   rT   r/   r-   <module>r      sW    " %  . ) J  (&88ZZ98N!	*K78 N!r/   