o
    Lh$                     @  s   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rdd 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 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                   @  s   e Zd ZU ejZded< dddd7ddZeddd8d!d"Z	ed9d$d%Z
d:d'd(Zd;d)d*Zd+d,d<d0d1Zd=d5d6Ze ZdS )>	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          	      C  s>   || _ || _|| _|| _|| _|| _|| _|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    r4   U/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_arrow/expr.py__init__   s   

zArrowExpr.__init__ )r   cls
type[Self]evaluate_column_namescontextr   r   c                 s$   d	 fdd}| |d| d |j dS )
Ndfr   r(   list[ArrowSeries]c              
     sL   z fdd D W S  t y% } z   }r || d }~ww )Nc                   s"   g | ]}t  j| | jd qS ))namer%   )r   nativer0   ).0column_namer<   r4   r5   
<listcomp>@   s    z=ArrowExpr.from_column_names.<locals>.func.<locals>.<listcomp>)KeyError_check_columns_exist)r<   eerrorr:   rB   r5   func>   s   
z)ArrowExpr.from_column_names.<locals>.funcr   r   r   r!   r#   r%   r<   r   r(   r=   )r0   )r8   r:   r;   r   rI   r4   rH   r5   from_column_names5   s   	zArrowExpr.from_column_namescolumn_indicesc                  s*   d
 fdd}| |dd|   d |jd	S )Nr<   r   r(   r=   c                   s"   j j  fddD S )Nc                   s$   g | ]}t j|  | d qS ))r>   r;   )r   from_native)r@   icolsr<   tblr4   r5   rC   Y   s    z?ArrowExpr.from_column_indices.<locals>.func.<locals>.<listcomp>)r?   columnsrB   rM   rP   r5   rI   V   s
   z+ArrowExpr.from_column_indices.<locals>.funcr   nthrJ   rK   )_eval_names_indicesr0   )r8   r;   rM   rI   r4   rT   r5   from_column_indicesT   s   zArrowExpr.from_column_indicesr   c                 C  s   ddl m} || jdS )Nr   r   )r%   )narwhals._arrow.namespacer   r0   )r3   r   r4   r4   r5   __narwhals_namespace__g   s   z ArrowExpr.__narwhals_namespace__c                 C  s   d S r*   r4   )r3   r4   r4   r5   __narwhals_expr__l   s    zArrowExpr.__narwhals_expr__F)returns_scalarr[   booldict[str, Any]c                C  s   |rddiS i S )N_return_py_scalarFr4   )r3   r[   r4   r4   r5   _reuse_series_extra_kwargsn   s   z$ArrowExpr._reuse_series_extra_kwargspartition_bySequence[str]order_byc                   sx   rj d urj jsd}t|s  sJ d fdd}ndfdd}j|jd	 jd
 jjjdS )Nz[Only aggregation or literal operations are supported in grouped `over` context for PyArrow.r<   r   r(   Sequence[ArrowSeries]c                   s`   t d| j}| j|d djddd} | j|gdd}t| |j  fdd|D S )	N   )rb   F)
descending
nulls_lastT)strictc                   s   g | ]}| |j qS r4   )_with_nativer?   take)r@   ssorting_indicesr4   r5   rC      s    0ArrowExpr.over.<locals>.func.<locals>.<listcomp>)	r	   rS   with_row_indexsortdroppcsort_indices
get_columnr?   )r<   tokenresult)rb   r3   rk   r5   rI      s   zArrowExpr.over.<locals>.funcc                   sv   t | g \}}t| }rd| d}t|| jdd | j j ddd  fdd	|D S )
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suffixc                   s   g | ]}  |qS r4   )rs   )r@   aliastmpr4   r5   rC      s    rm   )r   setintersectionNotImplementedErrorgroup_byaggsimple_selectjoin)r<   output_namesaliasesoverlapmsg)r`   r3   r~   r5   rI      s   

   z->overrJ   )r<   r   r(   rc   )	r2   is_scalar_liker   	__class__r,   r-   r.   r/   r0   )r3   r`   rb   r   rI   r4   )rb   r`   r3   r5   overs   s&   
zArrowExpr.over)r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   r&   r   r'   r(   r)   )
r8   r9   r:   r"   r;   r   r   r    r(   r   )rM   r   r;   r   r(   r   )r(   r   )r(   r)   )r[   r\   r(   r]   )r`   ra   rb   ra   r(   r   )__name__
__module____qualname__r   PYARROWr   __annotations__r6   classmethodrL   rW   rY   rZ   r_   r   r
   ewm_meanr4   r4   r4   r5   r      s    
 



9r   r   )#
__future__r   typingr   r   pyarrow.computecomputerq   narwhals._arrow.seriesr   narwhals._compliantr   narwhals._expression_parsingr   narwhals._utilsr   r	   r
   collections.abcr   typing_extensionsr   narwhals._arrow.dataframer   rX   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   r4   r4   r4   r5   <module>   s     