o
    h                      @  s4  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 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 d dlmZ d dlmZ d dlmZ erd dl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 d dlm Z  d dl!m"Z" d dlm#Z# d dlm$Z$ G dd dede
f Z%dS )    )annotations)TYPE_CHECKING)Any)SequenceNArrowSeries)	EagerExpr)!evaluate_output_names_and_aliases)is_scalar_like)ColumnNotFoundError)Implementation)generate_temporary_column_name)not_implemented)Self)ArrowDataFrameArrowNamespace)
AliasNames)	EvalNames)
EvalSeries)ExprMetadata)
RankMethod)Version)_FullContextc                   @  s   e Zd ZU ejZded< ddddMddZedddNd#d$Z	edOd&d'Z
dPd)d*ZdQd+d,Zd-d.dRd2d3ZdSd5d6ZdTd8d9ZdUd>d?ZdSd@dAZdSdBdCZdSdDdEZdSdFdGZdVdKdLZe ZdS )W	ArrowExprr   _implementationN)call_kwargsimplementationcall'EvalSeries[ArrowDataFrame, ArrowSeries]depthintfunction_namestrevaluate_output_namesEvalNames[ArrowDataFrame]alias_output_namesAliasNames | Nonebackend_versiontuple[int, ...]versionr   r   dict[str, Any] | Noner   Implementation | NonereturnNonec          
      C  sD   || _ || _|| _|| _|| _|| _|| _|| _|pi | _d | _d S N)	_call_depth_function_name_evaluate_output_names_alias_output_names_backend_version_version_call_kwargs	_metadata)
selfr   r    r"   r$   r&   r(   r*   r   r    r:   H/var/www/vscode/kcb/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 |jdS )
Ndfr   r-   list[ArrowSeries]c              
     sZ   z fdd D W S  t y, } z fdd D }tj| jd|d }~ww )Nc                   s&   g | ]}t  j| | j jd qS )namer(   r*   )r   nativer5   r6   ).0column_namerB   r:   r;   
<listcomp>F   s    z=ArrowExpr.from_column_names.<locals>.func.<locals>.<listcomp>c                   s   g | ]	}| j vr|qS r:   columns)rG   xrI   r:   r;   rJ   P   s    )missing_columnsavailable_columns)KeyErrorr   'from_missing_and_available_column_namesrL   )rB   erN   r@   rI   r;   funcD   s   
	
z)ArrowExpr.from_column_names.<locals>.funcr   r    r"   r$   r&   r(   r*   rB   r   r-   rC   )r5   r6   )r>   r@   rA   r"   rT   r:   rS   r;   from_column_names;   s   	zArrowExpr.from_column_namescolumn_indicesc             	     s>   ddl m  d fdd}| |dd	fd
dd |j|jdS )Nr   r   rB   r   r-   rC   c                   s    fddD S )Nc                   s.   g | ]} j | j j| jjd qS rD   )rF   column_namesr5   r6   )rG   column_index)r   rB   r:   r;   rJ   h   s    
z?ArrowExpr.from_column_indices.<locals>.func.<locals>.<listcomp>r:   rI   r   rX   rI   r;   rT   g   s   z+ArrowExpr.from_column_indices.<locals>.funcnthc                   s    fddD S )Nc                   s   g | ]} j | qS r:   rK   )rG   irI   r:   r;   rJ   v       zCArrowExpr.from_column_indices.<locals>.<lambda>.<locals>.<listcomp>r:   rI   )rX   rI   r;   <lambda>v   s    z/ArrowExpr.from_column_indices.<locals>.<lambda>rU   rV   )narwhals._arrow.seriesr   r5   r6   )r>   rA   rX   rT   r:   r[   r;   from_column_indicesa   s   
zArrowExpr.from_column_indicesr   c                 C  s   ddl m} || j| jdS )Nr   r   )r(   r*   )narwhals._arrow.namespacer   r5   r6   )r9   r   r:   r:   r;   __narwhals_namespace__|   s   z ArrowExpr.__narwhals_namespace__c                 C  s   d S r/   r:   )r9   r:   r:   r;   __narwhals_expr__   s    zArrowExpr.__narwhals_expr__F)returns_scalarre   booldict[str, Any]c                C  s   |rddiS i S )N_return_py_scalarFr:   )r9   re   r:   r:   r;   _reuse_series_extra_kwargs   s   z$ArrowExpr._reuse_series_extra_kwargsreversec                C     | j d|dS )Ncum_sumrj   _reuse_seriesr9   rj   r:   r:   r;   rl         zArrowExpr.cum_sumnc                 C  rk   )Nshift)rr   rn   )r9   rr   r:   r:   r;   rs      rq   zArrowExpr.shiftpartition_bySequence[str]order_bySequence[str] | Nonec              	     s   j d usJ rtj jsd}t|s& d usJ d fdd}ndfdd}j|jd	 jd
 jjj	j
dS )Nz[Only aggregation or literal operations are supported in grouped `over` context for PyArrow.rB   r   r-   Sequence[ArrowSeries]c                   s\   t d| j}| |jddd} | j|gdd}t| |j  fdd|D S )N   F)
descending
nulls_lastT)strictc                   s   g | ]}| |j qS r:   )_with_nativerF   take)rG   ssorting_indicesr:   r;   rJ      s    0ArrowExpr.over.<locals>.func.<locals>.<listcomp>)	r   rL   with_row_indexsortdroppcsort_indices
get_columnrF   )rB   tokenresult)rv   r9   r   r;   rT      s   
zArrowExpr.over.<locals>.funcc                   sx   t | g \}}t| }rd| d}t|| jddi | 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.drop_null_keysFleft_right)howleft_onright_onsuffixc                   s   g | ]}  |qS r:   )r   )rG   aliastmpr:   r;   rJ      r^   r   )r	   setintersectionNotImplementedErrorgroup_byaggsimple_selectjoin)rB   output_namesaliasesoverlapmsg)rt   r9   r   r;   rT      s   

   z->overrU   )rB   r   r-   rx   )r8   r
   kindr   	__class__r1   r2   r3   r4   r5   r6   )r9   rt   rv   r   rT   r:   )rv   rt   r9   r;   over   s"   zArrowExpr.overc                C  rk   )N	cum_countrm   rn   rp   r:   r:   r;   r      rq   zArrowExpr.cum_countc                C  rk   )Ncum_minrm   rn   rp   r:   r:   r;   r      rq   zArrowExpr.cum_minc                C  rk   )Ncum_maxrm   rn   rp   r:   r:   r;   r      rq   zArrowExpr.cum_maxc                C  rk   )Ncum_prodrm   rn   rp   r:   r:   r;   r      rq   zArrowExpr.cum_prodmethodr   rz   c                C  s   | j d||dS )Nrank)r   rz   rn   )r9   r   rz   r:   r:   r;   r      s   zArrowExpr.rank)r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r   r   r+   r   r,   r-   r.   )
r>   r?   r@   r%   rA   r   r"   r#   r-   r   )r>   r?   rX   r!   rA   r   r-   r   )r-   r   )r-   r.   )re   rf   r-   rg   )rj   rf   r-   r   )rr   r!   r-   r   )rt   ru   rv   rw   r-   r   )r   r   rz   rf   r-   r   )__name__
__module____qualname__r   PYARROWr   __annotations__r<   classmethodrW   ra   rc   rd   ri   rl   rs   r   r   r   r   r   r   r   ewm_meanr:   r:   r:   r;   r       s.   
 %





7




r   r   )&
__future__r   typingr   r   r   pyarrow.computecomputer   r`   r   narwhals._compliantr   narwhals._expression_parsingr	   r
   narwhals.exceptionsr   narwhals.utilsr   r   r   typing_extensionsr   narwhals._arrow.dataframer   rb   r   narwhals._compliant.typingr   r   r   r   narwhals.typingr   r   r   r   r:   r:   r:   r;   <module>   s2    