o
    Lhί                     @  s  U d dl mZ d dlmZmZ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 d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$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/m0Z0 d dl1m2Z2m3Z3 erd dl4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;Z<d dl=Z>d dl?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR d dlSmTZT d dl*mUZUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZh dZidejd< ed5d#d$Zked6d'd$Zked7d*d$Zked8d-d$Zkd9d.d$ZkG d/d0 d0e$d1 ZlG d2d3 d3e%d4 ZmdS ):    )annotations)TYPE_CHECKINGAnyLiteralcastoverloadNArrowSeriesCatNamespaceArrowSeriesDateTimeNamespaceArrowSeriesListNamespaceArrowSeriesStringNamespaceArrowSeriesStructNamespace)cast_for_truedivchunked_arrayextract_nativefloordiv_compatis_array_or_scalarlitnarwhals_to_native_dtypenative_to_narwhals_dtype
nulls_like
pad_serieszeros)EagerSeriesEagerSeriesHist)ExprKind)assert_never)Implementationgenerate_temporary_column_name
is_list_ofnot_implemented)is_numpy_array_1d)InvalidOperationError
ShapeError)IterableIteratorMappingSequence)
ModuleType)Self	TypeAliasTypeIsArrowDataFrameArrowNamespace)ArrayAnyArrayOrChunkedArrayArrayOrScalarChunkedArrayAny
IncompleteNullPlacementOrder	ScalarAny
TieBreaker	_AsPyType_BasicDataType)HistData)Version_LimitedContext)DType)ClosedIntervalFillNullStrategyInto1DArray	IntoDTypeModeKeepStrategyNonNestedLiteralNumericLiteralPythonLiteral
RankMethodRollingInterpolationMethodSizedMultiIndexSelectorTemporalLiteral_1DArray_2DArray_SliceIndexzHHistData[ChunkedArrayAny, list[ScalarAny] | pa.Int64Array | list[float]]r.   ArrowHistDatavalue$pa.Scalar[_BasicDataType[_AsPyType]]return_py_scalarboolreturnr=   c                 C     d S N rS   rU   rZ   rZ   W/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_arrow/series.pymaybe_extract_py_scalarY      r]   pa.Scalar[pa.StructType]list[dict[str, Any]]c                 C  rX   rY   rZ   r[   rZ   rZ   r\   r]   `   r^   1pa.Scalar[pa.ListType[_BasicDataType[_AsPyType]]]list[_AsPyType]c                 C  rX   rY   rZ   r[   rZ   rZ   r\   r]   g   r^   pa.Scalar[Any] | Anyr   c                 C  rX   rY   rZ   r[   rZ   rZ   r\   r]   n   r^   c                   s*   t r  S |rt d fdd S  S )Nas_pyc                     s    S rY   rZ   rZ   rS   rZ   r\   <lambda>y   s    z)maybe_extract_py_scalar.<locals>.<lambda>)r   rd   getattrr[   rZ   re   r\   r]   u   s
   c                      sR  e Zd ZejZdnd	d
ZedoddZdpddZ	dddqddZ
eddddrd!d"Zds fd%d&Zedtd*d+Zedd,dud-d.Zedvd0d1Zedwd3d4Zdxd6d7Zdyd:d;Zdyd<d=Zdzd>d?Zdzd@dAZdzdBdCZdzdDdEZdzdFdGZdzdHdIZdzdJdKZdzdLdMZdzdNdOZdzdPdQZdzdRdSZ dzdTdUZ!dzdVdWZ"dzdXdYZ#dzdZd[Z$dzd\d]Z%dzd^d_Z&dzd`daZ'dzdbdcZ(dzdddeZ)dzdfdgZ*dzdhdiZ+d{djdkZ,ed|dmdnZ-dodpd}dsdtZ.d~dwdxZ/dodpddzd{Z0dodpdd|d}Z1dodpdd~dZ2dodpdddZ3dodpd}ddZ4dodpd}ddZ5dodpdddZ6d{ddZ7dddZ8dodpdddZ9dodpdddZ:dodpdddZ;dodpdddZ<dodpd}ddZ=dodpd}ddZ>dddZ?edddZ@dddZAdddZBdddZCdddZDddddddZEddddddZFdddZGedddZHd{ddZIdddZJdddÄZKd{ddńZLdodpdddǄZMdodpdddɄZNdddτZOd{ddфZPd{ddӄZQdddքZRdodpd}dd؄ZSdddڄZTddd܄ZUdzddބZVd{ddZWddddZXdddZYdddZZdddZ[dddZ\dddZ]dddZ^ddd Z_dddZ`dddZad{ddZbd{dd	ZcdddZddoddddZedddZfdddZgdddZhdodpdd"d#Ziddd&d'Zjdd)d*Zkdd,d-Zldd0d1Zmd{d2d3Zndd4d5Zodd6d7Zpdd8d9Zqdd:d;Zrdd?d@ZsddAdBZtddCdDZuddEdFZvddIdJZwddNdOZxddQdRZyddTdUZzddVdWZ{ddYdZZ|d{d[d\Z}d{d]d^Z~edd`daZeddcddZeddfdgZeddidjZeddldmZe Z  ZS (  ArrowSeriesnative_seriesr7   namestrversionr@   rW   Nonec                C  s   || _ || _|| _d| _d S )NF)_name_native_series_version
_broadcast)selfri   rj   rl   rZ   rZ   r\   __init__   s   
zArrowSeries.__init__c                 C     | j S rY   )ro   rr   rZ   rZ   r\   native      zArrowSeries.nativer-   c                 C  s   | j | j| j|dS N)rj   rl   )	__class__rv   rn   )rr   rl   rZ   rZ   r\   _with_version      zArrowSeries._with_versionFpreserve_broadcastseriesr6   r}   rV   c                C  s&   | j t|| j| d}|r| j|_|S )Nrj   context)from_nativer   rj   rq   )rr   r~   r}   resultrZ   rZ   r\   _with_native   s   zArrowSeries._with_native N)rj   dtypedataIterable[Any]r   rA   r   IntoDType | Nonec                C  sd   |j }|d ur%t||}t|r||}d }| |r|nt|g|}nt|g}| j|||dS )N)r   rj   )rp   r   r   r   
_is_nativer   r   )clsr   r   rj   r   rl   dtype_parv   rZ   rZ   r\   from_iterable   s   	


zArrowSeries.from_iterablerS   r   c                   s   t |dr	| }t |S )Nrd   )hasattrrd   super_from_scalar)rr   rS   ry   rZ   r\   r      s   
zArrowSeries._from_scalarobjChunkedArrayAny | AnyTypeIs[ChunkedArrayAny]c                 C  s   t | tjS rY   )
isinstancepaChunkedArray)r   rZ   rZ   r\   r      s   zArrowSeries._is_nativerj   c               C  s   | ||j |dS )N)rl   rj   )rp   )r   r   r   rj   rZ   rZ   r\   r      s   zArrowSeries.from_nativerE   c               C  s"   | j t|r||dS |g|dS N)r   )r   r%   )r   r   r   rZ   rZ   r\   
from_numpy   s
   zArrowSeries.from_numpySequence[Self]c           	        s   dd |D }t | t fdd|D }|r|S g }|D ].}|jr0|t|jd  }nt| } krEd  d| d}t||}|	| q|S )	Nc                 S  s   g | ]}t |qS rZ   )len).0srZ   rZ   r\   
<listcomp>   s    z5ArrowSeries._align_full_broadcast.<locals>.<listcomp>c                 3  s    | ]}| kV  qd S rY   rZ   )r   _len
max_lengthrZ   r\   	<genexpr>   s    z4ArrowSeries._align_full_broadcast.<locals>.<genexpr>r   zExpected object of length z, got .)
maxallrq   r   r   repeatrv   r   r'   append)	r   r~   lengths	fast_pathreshapedr   	compliant
actual_lenmsgrZ   r   r\   _align_full_broadcast   s   z!ArrowSeries._align_full_broadcastr3   c                 C  s   ddl m} || jdS )Nr   r2   )rl   )narwhals._arrow.namespacer3   rp   )rr   r3   rZ   rZ   r\   __narwhals_namespace__   s   z"ArrowSeries.__narwhals_namespace__otherobjectc                 C  *   t d|}t| |\}}| t||S Nz"PythonLiteral | ArrowSeries | None)r   r   r   pcequalrr   r   serrhsrZ   rZ   r\   __eq__      
zArrowSeries.__eq__c                 C  r   r   )r   r   r   r   	not_equalr   rZ   rZ   r\   __ne__   r   zArrowSeries.__ne__c                 C      t | |\}}| t||S rY   )r   r   r   greater_equalrr   r   r   rZ   rZ   r\   __ge__      zArrowSeries.__ge__c                 C  r   rY   )r   r   r   greaterr   rZ   rZ   r\   __gt__   r   zArrowSeries.__gt__c                 C  r   rY   )r   r   r   
less_equalr   rZ   rZ   r\   __le__   r   zArrowSeries.__le__c                 C  r   rY   )r   r   r   lessr   rZ   rZ   r\   __lt__   r   zArrowSeries.__lt__c                 C  r   rY   r   r   r   
and_kleener   rZ   rZ   r\   __and__   r   zArrowSeries.__and__c                 C      t | |\}}| t||S rY   r   r   rZ   rZ   r\   __rand__   r   zArrowSeries.__rand__c                 C  r   rY   r   r   r   	or_kleener   rZ   rZ   r\   __or__   r   zArrowSeries.__or__c                 C  r   rY   r   r   rZ   rZ   r\   __ror__   r   zArrowSeries.__ror__c                 C  r   rY   )r   r   r   addr   rZ   rZ   r\   __add__  r   zArrowSeries.__add__c                 C  s   | | S rY   rZ   rr   r   rZ   rZ   r\   __radd__     zArrowSeries.__radd__c                 C  r   rY   )r   r   r   subtractr   rZ   rZ   r\   __sub__	  r   zArrowSeries.__sub__c                 C  s   | | d S )NrZ   r   rZ   rZ   r\   __rsub__  s   zArrowSeries.__rsub__c                 C  r   rY   )r   r   r   multiplyr   rZ   rZ   r\   __mul__  r   zArrowSeries.__mul__c                 C  s   | | S rY   rZ   r   rZ   rZ   r\   __rmul__  r   zArrowSeries.__rmul__c                 C  r   rY   r   r   r   powerr   rZ   rZ   r\   __pow__  r   zArrowSeries.__pow__c                 C  r   rY   r   r   rZ   rZ   r\   __rpow__  r   zArrowSeries.__rpow__c                 C  s   t | |\}}| t||S rY   r   r   r   r   rZ   rZ   r\   __floordiv__     zArrowSeries.__floordiv__c                 C  s   t | |\}}| t||S rY   r   r   rZ   rZ   r\   __rfloordiv__#  r   zArrowSeries.__rfloordiv__c                 C  s$   t | |\}}| tjt|| S rY   r   r   r   divider   r   rZ   rZ   r\   __truediv__'     zArrowSeries.__truediv__c                 C  s$   t | |\}}| tjt|| S rY   r   r   rZ   rZ   r\   __rtruediv__+  r   zArrowSeries.__rtruediv__c                 C  s6   | | j }t| |\}}t|t||}| |S rY   rv   r   r   r   r   r   rr   r   	floor_divr   resrZ   rZ   r\   __mod__/     

zArrowSeries.__mod__c                 C  s6   ||  j }t| |\}}t|t||}| |S rY   r   r   rZ   rZ   r\   __rmod__5  r   zArrowSeries.__rmod__c                 C     |  t| jS rY   )r   r   invertrv   ru   rZ   rZ   r\   
__invert__;     zArrowSeries.__invert__pa.DataTypec                 C  s   | j jS rY   )rv   typeru   rZ   rZ   r\   _type>     zArrowSeries._typeT)_return_py_scalarr   intc                C  s   t t| j|S rY   )r]   r   rv   rr   r   rZ   rZ   r\   r   B     zArrowSeries.len	predicateArrowSeries | list[bool | None]c                 C  s0   t |tst| |\}}n|}| | j|S rY   )r#   rV   r   r   rv   filter)rr   r   _other_nativerZ   rZ   r\   r   E  s   
zArrowSeries.filterfloatc                C     t t| j|S rY   )r]   r   meanrv   r   rZ   rZ   r\   r  M  r   zArrowSeries.meanc                C  s(   | j  sd}t|tt| j|S )Nz<`median` operation not supported for non-numeric input type.)r   
is_numericr&   r]   r   approximate_medianrv   )rr   r   r   rZ   rZ   r\   medianP  s   
zArrowSeries.medianc                C  r  rY   )r]   r   minrv   r   rZ   rZ   r\   r	  Y  r   zArrowSeries.minc                C  r  rY   )r]   r   r   rv   r   rZ   rZ   r\   r   \  r   zArrowSeries.maxc                C      t | jt | j}t||S rY   )r   indexrv   r	  r]   )rr   r   	index_minrZ   rZ   r\   arg_min_     
zArrowSeries.arg_minc                C  r
  rY   )r   r  rv   r   r]   )rr   r   	index_maxrZ   rZ   r\   arg_maxc  r  zArrowSeries.arg_maxc                C     t tj| jdd|S Nr   )	min_count)r]   r   sumrv   r   rZ   rZ   r\   r  g     zArrowSeries.sumc                 C     |  | j S rY   )r   rv   	drop_nullru   rZ   rZ   r\   
drop_nullsl  r   zArrowSeries.drop_nullsnc                 C  sp   |dkrt || g| jd |  j}n|dk r*g | j| d  jt | | }n| | jS | t|S Nr   )r   rv   chunksr   r   concat_arrays)rr   r  arraysrZ   rZ   r\   shifto  s    $zArrowSeries.shiftddofc                C     t tj| j|d|S N)r  )r]   r   stddevrv   rr   r  r   rZ   rZ   r\   stdx  r  zArrowSeries.stdc                C  r   r!  )r]   r   variancerv   r#  rZ   rZ   r\   var}  r  zArrowSeries.varfloat | Nonec                C  s   | j  }t|dkrd S t|dkrtdS t|dkrdS t|t|}tt|td}tt|td}t	|t|td}t
||S )Nr      nan   g           g      ?rv   r  r   r  r   r   r  r   r   r   r]   )rr   r   ser_not_nullmm2m3biased_population_skewnessrZ   rZ   r\   skew  s   

zArrowSeries.skewc             
   C  s   | j  }t|dkrd S t|dkrtdS t|t|}tt|td}tt|td}tt	|t|tdtd}t
||S )Nr   r(  r)  r*     r+  r,  )rr   r   r-  r.  r/  m4krZ   rZ   r\   kurtosis  s   
$
zArrowSeries.kurtosisc                C  r  rY   )r]   r   countrv   r   rZ   rZ   r\   r7    r   zArrowSeries.countc                C  s   t tj| j dd|S )Nr   )mode)r]   r   r7  rv   uniquer   rZ   rZ   r\   n_unique  s   zArrowSeries.n_uniquer,   c                 C  s.   | j tju r| j  S dt| j  }t|)NzExpected pyarrow, got: )_implementationr!   PYARROWto_native_namespacer   AssertionError)rr   r   rZ   rZ   r\   __native_namespace__  s   
z ArrowSeries.__native_namespace__c                 C  rt   rY   )rn   ru   rZ   rZ   r\   rj     rw   zArrowSeries.namerows(SizedMultiIndexSelector[ChunkedArrayAny]c                 C  sN   t |dkr| | jddS | jdk rt|trt|}| | j|S )Nr   )   )	r   r   rv   slice_backend_versionr   tuplelisttake)rr   r@  rZ   rZ   r\   _gather  s
   zArrowSeries._gather_SliceIndex | rangec                 C  s   |j pd}|jd ur|jnt| j}|dk rt| j| }|dk r(t| j| }|jd ur8|jdkr8d}t|| | j||| S )Nr   r(  z4Slicing with step is not supported on PyArrow tables)startstopr   rv   stepNotImplementedErrorr   rC  )rr   r@  rJ  rK  r   rZ   rZ   r\   _gather_slice  s   
zArrowSeries._gather_sliceindicesint | Sequence[int]valuesc           
      C  s   dd l }t|trt|g}t|g}nt|}t|| jr'|j }ntj}||}t	|}|
|}|
|}|j|  td}d||< tj}	| |	| j||S )Nr   )r   T)numpyr   r   r   arrayry   rv   combine_chunksr   sort_indicesrG  r   r   rV   replace_with_maskr   )
rr   rO  rQ  npindices_nativevalues_nativepa_arraysorting_indicesmaskpc_replace_with_maskrZ   rZ   r\   scatter  s    




zArrowSeries.scatter	list[Any]c                 C  
   | j  S rY   )rv   	to_pylistru   rZ   rZ   r\   to_list     
zArrowSeries.to_list)copyrd  bool | NonerO   c                C  s   | j j||dS )N)r   rd  )rv   	__array__rr   r   rd  rZ   rZ   r\   rf    r   zArrowSeries.__array__c                C  r`  rY   )rv   to_numpyrg  rZ   rZ   r\   rh    rc  zArrowSeries.to_numpyc                 C  s    | j | j|| jd}| j|_|S rx   )ry   rv   rp   rq   )rr   rj   r   rZ   rZ   r\   alias  s   zArrowSeries.aliasrB   c                 C  s   t | jj| jS rY   )r   rv   r   rp   ru   rZ   rZ   r\   r        zArrowSeries.dtypec                 C  r   rY   )r   r   absrv   ru   rZ   rZ   r\   rk    r   zArrowSeries.absreversec                C  sD   t j}|s|| jddn|| jd d d ddd d d }| |S NT)
skip_nullsr   )r   cumulative_sumrv   r   )rr   rl  cum_sumr   rZ   rZ   r\   rp    s    
zArrowSeries.cum_sumdecimalsc                 C  s   |  tj| j|ddS )Nhalf_towards_infinity)
round_mode)r   r   roundrv   )rr   rq  rZ   rZ   r\   rt     s   zArrowSeries.roundc                 C  s   |  t| j S rY   )r   r   pairwise_diffrv   rT  ru   rZ   rZ   r\   diff     zArrowSeries.diffc                C  r  r  )r]   r   anyrv   r   rZ   rZ   r\   rx    r  zArrowSeries.anyc                C  r  r  )r]   r   r   rv   r   rZ   rZ   r\   r     r  zArrowSeries.alllower_boundupper_boundclosedrC   c           
      C  s   t | |\}}t | |\}}|dkr't| j|}t| j|}t||}nO|dkr@t| j|}t| j|}	t||	}n6|dkrYt| j|}t| j|}t||}n|dkrrt| j|}t| j|}	t||	}nt| | 	|S )Nleftrightnoneboth)
r   r   r   rv   r   r   r   r   r    r   )
rr   ry  rz  r{  r  geltr   gtlerZ   rZ   r\   
is_between  s(   
zArrowSeries.is_betweenc                 C  s   | j | j ddS NTr|   )r   rv   is_nullru   rZ   rZ   r\   r  +  r{   zArrowSeries.is_nullc                 C  s   | j t| jddS r  )r   r   is_nanrv   ru   rZ   rZ   r\   r  .  rw  zArrowSeries.is_nanrF   c                 C  s$   t || j}| jt| j|ddS r  )r   rp   r   r   r   rv   )rr   r   	data_typerZ   rZ   r\   r   1  s   zArrowSeries.castc                C  s   t | jj|S rY   )r]   rv   
null_countr   rZ   rZ   r\   r  5  s   zArrowSeries.null_countc              	   C  sB   |dkr|  | jd|S t| }|  | jdtd|| S r  )r   rv   rC  r   r   rr   r  num_rowsrZ   rZ   r\   head8  s   zArrowSeries.headc                 C  sB   |dkrt | }| | jtd|| S | | jt|S r  )r   r   rv   rC  r   rk  r  rZ   rZ   r\   tail>  s   zArrowSeries.tailc                 C  s0   |  |r|}nt|}| tj| j|dS )N)	value_set)r   r   rS  r   r   is_inrv   )rr   r   r  rZ   rZ   r\   r  D  s   

zArrowSeries.is_inc                 C  s&   dd l }|| j}| j|| j| dS )Nr   r   )rR  flatnonzerorv   r   rj   )rr   rW  r   rZ   rZ   r\   arg_trueK  s   zArrowSeries.arg_truer  
int | Nonec                 C  sP   |d u rt | dkrdt |  d}t|t| jd ddS t| j| ddS )Nr(  zlcan only call '.item()' if the Series is of length 1, or an explicit index is provided (Series is of length )r   TrU   )r   
ValueErrorr]   rv   )rr   r  r   rZ   rZ   r\   itemQ  s   zArrowSeries.itemsortparallel
str | None	normalizer1   c                C  s   ddl m} | jdu rdn| j}|p|rdnd}t| j}|d}	td|d	}
|r;|	tjt	|
t
|
 g}n|	|
g}tjj|||gd
}|rS||dfg}||| jddS )z-Parallel is unused, exists for compatibility.r   r0   Nr  
proportionr7  rQ  r7   countsnames
descendingTrl   validate_column_names)narwhals._arrow.dataframer1   rn   r   value_countsrv   fieldr   r   r   r  r   Tablefrom_arrayssort_byrp   )rr   r  r  rj   r  r1   index_name_value_name_
val_countsrQ  r  r  	val_countrZ   rZ   r\   r  \  s   
zArrowSeries.value_countsr\  c                 C  s"   |j  }| t|| j |j S rY   )rv   rT  r   r   if_else)rr   r\  r   condrZ   rZ   r\   zip_withw  s   
zArrowSeries.zip_withfractionwith_replacementseedc          
      C  sf   dd l }t| }|d u r|d urt|| }|jj|d}||}|j|||d}	| | j	|	S )Nr   )r  )sizereplace)
rR  r   r   randomdefault_rngarangechoicer   rv   rG  )
rr   r  r  r  r  rW  r  rngidxr\  rZ   rZ   r\   sample{  s   
zArrowSeries.samplec                 C  s&   t t | j|| j}| j|ddS r  )r   r  r  rv   r   )rr   rS   r   rZ   rZ   r\   fill_nan  s   zArrowSeries.fill_nanSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc           	        s   dd l  d fd
d}|d urt| |\}}t| j|}n|d u r2|dkr)tjntj}|| j}n|| j||}| j|ddS )Nr   arrr7   r  r   	directionr  rW   r4   c              
     s   t | }tj t| t d}|dkr' j 	||d}|| }n  j
 	|d d d |d d d t| d d d }|| }t t t | t |t|| || S )Nr   forwardr   )r   is_validr   rS  r  r   int64maximum
accumulatewhereminimumr  and_r  r   r   rG  )r  r  r  
valid_maskrO  valid_indexdistancerW  rZ   r\   fill_aux  s    

$z'ArrowSeries.fill_null.<locals>.fill_auxr  Tr|   )r  r7   r  r   r  r  rW   r4   )rR  r   r   	fill_nullrv   fill_null_forwardfill_null_backwardr   )	rr   rS   r  r  r  r  native_valuer~   	fill_funcrZ   r  r\   r    s   zArrowSeries.fill_nullc                 C  s4   ddl m} tjj| jg| jgd}||| jddS )Nr   r0   r  Fr  )r  r1   r   r  r  rv   rj   rp   )rr   r1   dfrZ   rZ   r\   to_frame  s   zArrowSeries.to_framepd.Series[Any]c                 C  s   dd l }|j| j| jdS )Nr   r   )pandasSeriesrv   rj   )rr   pdrZ   rZ   r\   	to_pandas     zArrowSeries.to_pandas	pl.Seriesc                 C  s   dd l }td|| jS )Nr   r  )polarsr   
from_arrowrv   )rr   plrZ   rZ   r\   	to_polars  r  zArrowSeries.to_polarsc                 C  s   |    | jS rY   )r  	is_uniqueri  rj   ru   rZ   rZ   r\   r    r{   zArrowSeries.is_uniquec                 C  ~   dd l }t|t| }td| jgd}tjj| j	g| jgd
||| j|dfg| d}| t||S )Nr      n_bytescolumnsr  r	  _minrR  r   rS  r  r   r"   rj   r  r  rv   append_columngroup_by	aggregatecolumnr   r   r  )rr   rW  
row_number	col_tokenfirst_distinct_indexrZ   rZ   r\   is_first_distinct     zArrowSeries.is_first_distinctc                 C  r  )Nr   r  r  r  r   _maxr  )rr   rW  r  r  last_distinct_indexrZ   rZ   r\   is_last_distinct  r  zArrowSeries.is_last_distinctr  c                C  s~   t |tsdt| }t||r&tt| jd d | jdd  }ntt| jd d | jdd  }t	|ddS )Nz/argument 'descending' should be boolean, found r   r(  Tr  )
r   rV   r   	TypeErrorr   r   r   rv   r   r]   )rr   r  r   r   rZ   rZ   r\   	is_sorted  s   
(&zArrowSeries.is_sortedmaintain_orderr  c                C  r  rY   )r   rv   r9  )rr   r  rZ   rZ   r\   r9    rj  zArrowSeries.uniqueold!Sequence[Any] | Mapping[Any, Any]newSequence[Any]return_dtypec                C  s   t | jt|}t t||}|d ur |t|| j | 	|}|
  | 
  krJd| | 
  |
 @ jdd  }t||S )NzYreplace_strict did not replace all non-null values.

The following did not get replaced: Fr  )r   index_inrv   r   rS  rG  r   r   rp   r   r  r  r   r9  rb  r  )rr   r  r  r  idxsresult_nativer   r   rZ   rZ   r\   replace_strict  s   
"zArrowSeries.replace_strict
nulls_lastc                C  s<   |rdnd}|r
dnd}t j| j||d}| | j|S )Nr  	ascendingat_endat_start)ordernull_placement)r   array_sort_indicesrv   r   rG  )rr   r  r  r  r  sorted_indicesrZ   rZ   r\   r    s   zArrowSeries.sort	separator
drop_firstc          	        s   dd l }ddlm} | j | j d}|t|j	t|f|j
}d||j|t|f<    d   d fdd|j	D }|v rcgtfd	d|D t|d  n	t|t|d  }|tjj||d
| jddj| S )Nr   r0   encoder(  rm   nullc                   s4   g | ]}i    |    | qS rZ   )get)r   vrj   null_col_panull_col_plr  rZ   r\   r   %  s    z*ArrowSeries.to_dummies.<locals>.<listcomp>c                   s   g | ]}| kr|qS rZ   rZ   )r   c)r  rZ   r\   r   /  s    r  Tr  )rR  r  r1   rn   rv   rT  dictionary_encoder   r   
dictionaryint8rO  r  sortedr   r   r  r  rp   simple_select)	rr   r  r  rW  r1   dar  colsoutput_orderrZ   r  r\   
to_dummies  s0    zArrowSeries.to_dummiesquantileinterpolationrL   c                C  s   t tj| j||dd |S )N)qr  r   )r]   r   r  rv   )rr   r  r  r   rZ   rZ   r\   r  :  s   zArrowSeries.quantiler   offsetc                 C  s   |  | j|d | S rY   )r   rv   )rr   r  r!  rZ   rZ   r\   gather_everyF  rw  zArrowSeries.gather_every.Self | NumericLiteral | TemporalLiteral | Nonec                 C  s   |d ur	t | |nd\}}|d urt | |nd\}}|d u r(| t| j|S |d u r6| t| j|S | tt| j||S )N)NN)r   r   r   min_element_wiserv   max_element_wise)rr   ry  rz  r  lowerupperrZ   rZ   r\   clipI  s   zArrowSeries.clipr4   c                 C  r`  rY   )rv   rT  ru   rZ   rZ   r\   to_arrow]  rc  zArrowSeries.to_arrowkeeprG   c                C  sp   |   }td| jgd}| j|dddd}||||| jtj	dk
| j}|dkr6|dS |S )Nr  r  F)rj   r  r  r  )kindrx  r(  )r   r"   rj   r  r   colr   	broadcastr   AGGREGATION
get_columnr  )rr   r*  plxr  r  r   rZ   rZ   r\   r8  `  s   zArrowSeries.modec                 C  r   rY   )r   r   	is_finiterv   ru   rZ   rZ   r\   r1  l  r   zArrowSeries.is_finitec                C  s$   | j j}|   | j|dS )Nrl  )rp   dtypesr  r   UInt32rp  )rr   rl  r3  rZ   rZ   r\   	cum_counto  s   zArrowSeries.cum_countc                C  B   |s
t j| jddnt j| jd d d ddd d d }| |S rm  )r   cumulative_minrv   r   rr   rl  r   rZ   rZ   r\   cum_mins  
   "
zArrowSeries.cum_minc                C  r6  rm  )r   cumulative_maxrv   r   r8  rZ   rZ   r\   cum_max{  r:  zArrowSeries.cum_maxc                C  r6  rm  )r   cumulative_prodrv   r   r8  rZ   rZ   r\   cum_prod  r:  zArrowSeries.cum_prodwindow_sizemin_samplescenterc                C  s   |d ur|n|}t | ||d\}}|jddjd dd d}|dkr.|||jdd d d n|}|jdd}|||jdd d d }	| t|	|kj|jd }
|
	t
|d S Nr?  rA  Fr2  r  rS   r  r  r   r   rp  r  r  r5  r   r   r  rv   rN  rC  rr   r?  r@  rA  padded_seriesr!  rp  rolling_sumvalid_countcount_in_windowr   rZ   rZ   r\   rH    s&   zArrowSeries.rolling_sumc                C  s   |d ur|n|}t | ||d\}}|jddjd dd d}|dkr.|||jdd d d n|}|jdd}|||jdd d d }	| t|	|kj|jd |	 }
|
	t
|d S rB  rE  rF  rZ   rZ   r\   rolling_mean  s0   zArrowSeries.rolling_meanc                C  s  |d ur|n|}t | ||d\}}|jddjd dd d}|dkr.|||jdd d d n|}t|djddjd dd d}	|dkrP|	|	|jdd d d n|	}
|jdd}|||jdd d d }| t||kj	|
|d |  j	d | t
|| j	d }|t|d d S )NrC  Fr2  r  rD  r   r*  )r   rp  r  r  powr5  r   r   r  rv   r%  rN  rC  )rr   r?  r@  rA  r  rG  r!  rp  rH  
cum_sum_sqrolling_sum_sqrI  rJ  r   rZ   rZ   r\   rolling_var  sJ   zArrowSeries.rolling_varc                C  s   | j ||||dd S )N)r?  r@  rA  r        ?)rO  )rr   r?  r@  rA  r  rZ   rZ   r\   rolling_std  s   zArrowSeries.rolling_stdmethodrK   c          
      C  s   |dkr
d}t ||rdnd}|dkrdn|}| jdk r#| j }n| j}t|}tj|||d}t|td |j	|}	| 
|	S )	Naveragez`rank` with `method='average' is not supported for pyarrow backend. The available methods are {'min', 'max', 'dense', 'ordinal'}.r  r  ordinalfirst)   r   r   )	sort_keys
tiebreaker)r  rD  rv   rT  r   r  rankr  r   r   r   )
rr   rR  r  r   rW  rX  ri   	null_maskrY  r   rZ   rZ   r\   rY    s   


zArrowSeries.rankbinslist[float]include_breakpointc                C     t j| |d| S N)r]  )
_ArrowHistfrom_series	with_binsr  )rr   r[  r]  rZ   rZ   r\   hist_from_bins     zArrowSeries.hist_from_bins	bin_countc                C  r^  r_  )r`  ra  with_bin_countr  )rr   re  r]  rZ   rZ   r\   hist_from_bin_count  rd  zArrowSeries.hist_from_bin_countIterator[Any]c                 c  s     | j D ]	}t|ddV  qd S )NTr  )rv   r]   )rr   xrZ   rZ   r\   __iter__  s   
zArrowSeries.__iter__c              
   C  s   ddl m}m}m} z|d urt|ntd | jd}tt|| j	ddW S  |||fyE } zdt
| d| j d}t||d }~ww )	Nr   )ArrowInvalidArrowNotImplementedErrorArrowTypeErrorr  Tr  z Unable to compare other of type z with series of type r   )pyarrowrk  rl  rm  r   r   r]   r   r  rv   r   r   r&   )rr   r   rk  rl  rm  other_excr   rZ   rZ   r\   __contains__#  s   
zArrowSeries.__contains__basec                 C  s   |  t| jt|S rY   )r   r   logbrv   r   )rr   rr  rZ   rZ   r\   log3  s   zArrowSeries.logc                 C  r   rY   )r   r   exprv   ru   rZ   rZ   r\   ru  6  r   zArrowSeries.expc                 C  r   rY   )r   r   sqrtrv   ru   rZ   rZ   r\   rv  9  r   zArrowSeries.sqrtr   c                 C     t | S rY   r
   ru   rZ   rZ   r\   dt<  r   zArrowSeries.dtr	   c                 C  rw  rY   r   ru   rZ   rZ   r\   cat@  r   zArrowSeries.catr   c                 C  rw  rY   r   ru   rZ   rZ   r\   rk   D  r   zArrowSeries.strr   c                 C  rw  rY   r   ru   rZ   rZ   r\   rF  H  r   zArrowSeries.listr   c                 C  rw  rY   r   ru   rZ   rZ   r\   structL  r   zArrowSeries.struct)ri   r7   rj   rk   rl   r@   rW   rm   )rW   r7   )rl   r@   rW   r-   )r~   r6   r}   rV   rW   r-   )
r   r   r   rA   rj   rk   r   r   rW   r-   )rS   r   rW   r-   )r   r   rW   r   )r   r7   r   rA   rj   rk   rW   r-   )r   rE   r   rA   rW   r-   )r~   r-   rW   r   )rW   r3   )r   r   rW   r-   )r   r   rW   r-   )rW   r-   )rW   r   )r   rV   rW   r   )r   r   rW   r-   )r   rV   rW   r  )r   rV   rW   r   )r  r   rW   r-   )r  r   r   rV   rW   r  )r   rV   rW   r'  )rW   r,   )rW   rk   )r@  rA  rW   r-   )r@  rI  rW   r-   )rO  rP  rQ  r   rW   r-   )rW   r_  rY   )r   r   rd  re  rW   rO   )rj   rk   rW   r-   )rW   rB   )rl  rV   rW   r-   )rq  r   rW   r-   )r   rV   rW   rV   )ry  r   rz  r   r{  rC   rW   r-   )r   rF   rW   r-   )r  r  rW   r   )
r  rV   r  rV   rj   r  r  rV   rW   r1   )r\  r-   r   r-   rW   r-   )
r  r  r  r'  r  rV   r  r  rW   r-   )rS   r'  rW   r-   )rS   r  r  r  r  r  rW   r-   rW   r1   )rW   r  )rW   r  )rW   rh   )r  rV   rW   rV   )r  rV   rW   r-   )r  r  r  r  r  r   rW   r-   )r  rV   r  rV   rW   r-   )r  rk   r  rV   rW   r1   )r  r  r  rL   r   rV   rW   r  )r   )r  r   r!  r   rW   r-   )ry  r#  rz  r#  rW   r-   )rW   r4   )r*  rG   rW   rh   )r?  r   r@  r   rA  rV   rW   r-   )
r?  r   r@  r   rA  rV   r  r   rW   r-   )rR  rK   r  rV   rW   r-   )r[  r\  r]  rV   rW   r1   )re  r   r]  rV   rW   r1   )rW   rh  )r   r   rW   rV   )rr  r  rW   r-   )rW   r   )rW   r	   )rW   r   )rW   r   )rW   r   )__name__
__module____qualname__r!   r<  r;  rs   propertyrv   rz   r   classmethodr   r   staticmethodr   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   r   r   r   r   r  r  r	  r   r  r  r  r  r  r$  r&  r2  r6  r7  r:  r?  rj   rH  rN  r^  rb  rf  rh  ri  r   rk  rp  rt  rv  rx  r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r9  r  r  r  r  r"  r(  r)  r8  r1  r5  r9  r<  r>  rH  rK  rO  rQ  rY  rc  rg  rj  rq  rt  ru  rv  rx  ry  rk   rF  rz  r$   ewm_mean__classcell__rZ   rZ   r   r\   rh   }   s"   		 	*
&+
		rh   r7   c                   @  sb   e Zd ZU ded< d&ddZd'dd	Zd(ddZd)ddZddd*ddZd+dd Z	d,d#d$Z
d%S )-r`  rh   _seriesrW   r1   c                 C  s*   t jj}| j jj}||| j| jdS r   )r   r  from_pydictr  r   
_dataframer   _data)rr   tabler   rZ   rZ   r\   r  X  s   z_ArrowHist.to_framerV   c                 C  s&   | j jdd}td| }|jdkS )NT)nan_is_nullzpa.BooleanArrayr   )rv   r  r   rT  false_count)rr   r  r  rZ   rZ   r\   is_empty_series_  s   
z_ArrowHist.is_empty_seriesargint | list[float]rR   c                C  s(   |  |}| jr| ||dS d|iS )N
breakpointr7  r7  )_zeros_breakpoint_calculate_breakpoint)rr   r  r7  rZ   rZ   r\   series_emptyi  s   
z_ArrowHist.series_emptypa.Int64Arrayc                C  s"   t |tr	t|S tt|d S )Nr(  )r   r   r   r   )rr   r  rZ   rZ   r\   r  o  s   "z_ArrowHist._zerosr  )r{  rJ  r  endnum_samplesr   r{  Literal['both', 'none']rO   c                C  s    ddl m} |||||dkdS )Nr   )linspacer  )rJ  rK  numendpoint)rR  r  )rr   rJ  r  r  r{  r  rZ   rZ   r\   _linear_spacer  s   z_ArrowHist._linear_spacere  c                 C  sP   t | j}|d  |d  }}||kr|d8 }|d7 }| |||d S )z6Prepare bins for histogram calculation from bin_count.r	  r   rP  r(  )r   min_maxrv   rd   r  )rr   re  dr&  r'  rZ   rZ   r\   _calculate_bins~  s   z_ArrowHist._calculate_binsr[  list[float] | _1DArrayc              	   C  s  | j }td|}t|dkr?tt|t|d t|t|d }t|t	
 }| jr:|d g|gdS d|giS dd l}|j||dd	}tt|t|d d|}|j|d
d\}}|dt|}	||	}
||||	 |
||	|< | jr|dd  |
dS d|
iS )Nr\  r*  r   r(  r   r  r7  r|  )sideT)return_counts)rv   r   r   r   r  r   r   r   r  r   uint8r  rR  searchsortedr  r   r9  r  
zeros_likeisin)rr   r[  r   is_between_binsr7  rW  bin_indicesobs_cats
obs_countsobj_catsr  rZ   rZ   r\   _calculate_hist  s(   
$

z_ArrowHist._calculate_histNr{  )rW   rV   )r  r  rW   rR   )r  r  rW   r  )
rJ  r  r  r  r  r   r{  r  rW   rO   )re  r   rW   rO   )r[  r  rW   rR   )r|  r}  r~  __annotations__r  r  r  r  r  r  r  rZ   rZ   rZ   r\   r`  S  s   
 




	
	r`  )r7   z-list[ScalarAny] | pa.Int64Array | list[float])rS   rT   rU   rV   rW   r=   )rS   r_   rU   rV   rW   r`   )rS   ra   rU   rV   rW   rb   )rS   rc   rU   rV   rW   r   )rS   r   rU   rV   rW   r   )n
__future__r   typingr   r   r   r   r   rn  r   pyarrow.computecomputer   narwhals._arrow.series_catr	   narwhals._arrow.series_dtr   narwhals._arrow.series_listr   narwhals._arrow.series_strr   narwhals._arrow.series_structr   narwhals._arrow.utilsr   r   r   r   r   r   r   r   r   r   r   narwhals._compliantr   r   narwhals._expression_parsingr   narwhals._typing_compatr    narwhals._utilsr!   r"   r#   r$   narwhals.dependenciesr%   narwhals.exceptionsr&   r'   collections.abcr(   r)   r*   r+   typesr,   r  r  r  r  typing_extensionsr-   r.   r/   r  r1   r   r3   narwhals._arrow.typingr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   narwhals._compliant.seriesr?   r@   rA   narwhals.dtypesrB   narwhals.typingrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   r  r]   rh   r`  rZ   rZ   rZ   r\   <module>   sf    44D

       
]