o
    h                     @  s  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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  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,m0Z0 d d!l,m1Z1 d d"l,m2Z2 d d#l,m3Z3 erd d$l4m5Z5 d d
l6Z7d d
l8Z9d d%l:m;Z; d d&l:m<Z< d d'l=m>Z> d d(l?m@Z@ d d)lAmBZB d d*lAmCZC d d+lAmDZD d d,lAmEZE d d-lAmFZF d d.lAmGZG d d/lAmHZH d d0lAmIZI d d1lAmJZJ d d2lAmKZK d d3lLmMZM d d4lNmOZO d d5lNmPZP d d6lNmQZQ d d7lNmRZR d d8lNmSZS d d9lNmTZT d d:lNmUZU d d;lNmVZV d d<lNmWZW d d=lNmXZX d d>lNmYZY d d?lNmZZZ d d@lNm[Z[ d dAl,m\Z\ d dBl,m]Z] e
dXdIdJZ^e
dYdMdJZ^e
dZdPdJZ^e
d[dSdJZ^d\dTdJZ^G dUdV dVe%dW Z_d
S )]    )annotations)TYPE_CHECKING)Any)Iterable)Iterator)Mapping)Sequence)cast)overloadNArrowSeriesCatNamespaceArrowSeriesDateTimeNamespaceArrowSeriesListNamespaceArrowSeriesStringNamespaceArrowSeriesStructNamespace)cast_for_truediv)chunked_array)extract_native)floordiv_compat)lit)narwhals_to_native_dtype)native_to_narwhals_dtype)
nulls_like)
pad_series)EagerSeries)ExprKind)is_numpy_array_1dInvalidOperationError)Implementation)generate_temporary_column_name)import_dtypes_module)
is_list_of)not_implemented)requires)validate_backend_version)
ModuleType)Self)TypeIsArrowDataFrameArrowNamespace)ArrayOrScalarAny)
ArrowArray)ArrowChunkedArray)
Incomplete)NullPlacement)Order)	ScalarAny)
TieBreaker)	_AsPyType)_BasicDataType)DType)ClosedInterval)FillNullStrategy)Into1DArray)NonNestedLiteral)NumericLiteral)PythonLiteral)
RankMethod)RollingInterpolationMethod)SizedMultiIndexSelector)TemporalLiteral)_1DArray)_2DArray)_SliceIndex)Version)_FullContextvalue$pa.Scalar[_BasicDataType[_AsPyType]]return_py_scalarboolreturnr9   c                 C     d S N rK   rM   rR   rR   J/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_arrow/series.pymaybe_extract_py_scalarQ      rU   pa.Scalar[pa.StructType]list[dict[str, Any]]c                 C  rP   rQ   rR   rS   rR   rR   rT   rU   X   rV   1pa.Scalar[pa.ListType[_BasicDataType[_AsPyType]]]list[_AsPyType]c                 C  rP   rQ   rR   rS   rR   rR   rT   rU   _   rV   pa.Scalar[Any] | Anyr   c                 C  rP   rQ   rR   rS   rR   rR   rT   rU   f   rV   c                   s*   t r  S |rt d fdd S  S )Nas_pyc                     s    S rQ   rR   rR   rK   rR   rT   <lambda>q   s    z)maybe_extract_py_scalar.<locals>.<lambda>)r   r\   getattrrS   rR   r]   rT   rU   m   s
   c                      s  e Zd Zd^ddZed_ddZd`ddZdddaddZeddddbd#d$Z	dc fd'd(Z
eddd,d-Zedd.ded/d0Zedfd2d3Zdgd5d6Zdhd9d:Zdhd;d<Zdid=d>Zdid?d@ZdidAdBZdidCdDZdidEdFZdidGdHZdidIdJZdidKdLZdidMdNZdidOdPZdidQdRZdidSdTZdidUdVZdidWdXZdidYdZZ did[d\Z!did]d^Z"did_d`Z#didadbZ$didcddZ%didedfZ&didgdhZ'djdidjZ(edkdldmZ)dndodldrdsZ*dmdvdwZ+dndodndydzZ,dndodnd{d|Z-dndodod}d~Z.dndododdZ/dndodlddZ0dndodlddZ1dndodnddZ2djddZ3dpddZ4dndodqddZ5dndodqddZ6dndodrddZ7dndodlddZ8dndodlddZ9dsddZ:edtddZ;duddZ<dvddZ=dwddZ>dxddZ?dydddzddZ@dydddzddZAd{ddZBed|ddZCdjddZDd}ddZEd~ddZFdjddZGdndodddĄZHdndodddƄZIddd̄ZJdjdd΄ZKdjddЄZLdddӄZMdndodlddՄZNdpddׄZOdpddلZPdiddۄZQdjdd݄ZRdydddZSdddZTdddZUdddZVdddZWdddZXdddZYdddZZddd Z[djddZ\djddZ]dddZ^dd	d
Z_dddZ`dddZadddZbdndodddZcddd d!Zddd#d$Zedd&d'Zfdd(d)Zgdjd*d+Zhd}d,d-Ziejkd.d}d/d0Zlejkd.d}d1d2Zmejkd.d}d3d4Zndd8d9Zodd:d;Zpdd<d=Zqdd>d?ZrddBdCZsejkd.ddHdIZtddKdLZuddMdNZveddPdQZweddSdTZxeddVdWZyeddYdZZzedd\d]Z{e| Z}  Z~S (  ArrowSeriesnative_seriesr3   namestrbackend_versiontuple[int, ...]versionrI   rO   Nonec                C  s8   || _ || _tj| _|| _|| _t| j| j d| _d S )NF)	_name_native_seriesr#   PYARROW_implementation_backend_version_versionr)   
_broadcast)selfra   rb   rd   rf   rR   rR   rT   __init__v   s   
zArrowSeries.__init__c                 C     | j S rQ   )ri   ro   rR   rR   rT   native      zArrowSeries.nativer+   c                 C  s   | j | j| j| j|dS N)rb   rd   rf   )	__class__rs   rh   rl   )ro   rf   rR   rR   rT   _with_version   s   zArrowSeries._with_versionFpreserve_broadcastseries*ArrowArray | ArrowChunkedArray | ScalarAnyry   rN   c                C  s&   | j t|| j| d}|r| j|_|S Nrb   context)from_nativer   rb   rn   )ro   rz   ry   resultrR   rR   rT   _with_native   s   zArrowSeries._with_native N)rb   dtypedataIterable[Any]r~   rJ   r   DType | type[DType] | Nonec                C  s0   |j }|r
t||nd }| jt|g|||dS r|   )rm   r   r   r   )clsr   r~   rb   r   rf   dtype_parR   rR   rT   from_iterable   s
   	zArrowSeries.from_iterablerK   r   c                   s(   | j dk rt|dr| }t |S )N   r\   )rl   hasattrr\   super_from_scalar)ro   rK   rv   rR   rT   r      s   zArrowSeries._from_scalarobjArrowChunkedArray | AnyTypeIs[ArrowChunkedArray]c                 C  s   t | tjS rQ   )
isinstancepaChunkedArray)r   rR   rR   rT   
_is_native   s   zArrowSeries._is_nativerb   c               C  s   | ||j |j|dS )N)rd   rf   rb   )rl   rm   )r   r   r~   rb   rR   rR   rT   r      s   zArrowSeries.from_nativer>   c               C  s"   | j t|r||dS |g|dS )N)r~   )r   r    )r   r   r~   rR   rR   rT   
from_numpy   s
   zArrowSeries.from_numpyr0   c                 C  s   ddl m} || j| jdS )Nr   r/   )rd   rf   )narwhals._arrow.namespacer0   rl   rm   )ro   r0   rR   rR   rT   __narwhals_namespace__   s   z"ArrowSeries.__narwhals_namespace__otherobjectc                 C  *   t d|}t| |\}}| t||S Nz"PythonLiteral | ArrowSeries | None)r	   r   r   pcequalro   r   serrhsrR   rR   rT   __eq__      
zArrowSeries.__eq__c                 C  r   r   )r	   r   r   r   	not_equalr   rR   rR   rT   __ne__   r   zArrowSeries.__ne__c                 C      t | |\}}| t||S rQ   )r   r   r   greater_equalro   r   r   rR   rR   rT   __ge__      zArrowSeries.__ge__c                 C  r   rQ   )r   r   r   greaterr   rR   rR   rT   __gt__   r   zArrowSeries.__gt__c                 C  r   rQ   )r   r   r   
less_equalr   rR   rR   rT   __le__   r   zArrowSeries.__le__c                 C  r   rQ   )r   r   r   lessr   rR   rR   rT   __lt__   r   zArrowSeries.__lt__c                 C  r   rQ   r   r   r   
and_kleener   rR   rR   rT   __and__   r   zArrowSeries.__and__c                 C      t | |\}}| t||S rQ   r   r   rR   rR   rT   __rand__   r   zArrowSeries.__rand__c                 C  r   rQ   r   r   r   	or_kleener   rR   rR   rT   __or__   r   zArrowSeries.__or__c                 C  r   rQ   r   r   rR   rR   rT   __ror__   r   zArrowSeries.__ror__c                 C  r   rQ   )r   r   r   addr   rR   rR   rT   __add__   r   zArrowSeries.__add__c                 C  s   | | S rQ   rR   ro   r   rR   rR   rT   __radd__      zArrowSeries.__radd__c                 C  r   rQ   )r   r   r   subtractr   rR   rR   rT   __sub__   r   zArrowSeries.__sub__c                 C  s   | | d S )NrR   r   rR   rR   rT   __rsub__  s   zArrowSeries.__rsub__c                 C  r   rQ   )r   r   r   multiplyr   rR   rR   rT   __mul__  r   zArrowSeries.__mul__c                 C  s   | | S rQ   rR   r   rR   rR   rT   __rmul__	  r   zArrowSeries.__rmul__c                 C  r   rQ   r   r   r   powerr   rR   rR   rT   __pow__  r   zArrowSeries.__pow__c                 C  r   rQ   r   r   rR   rR   rT   __rpow__  r   zArrowSeries.__rpow__c                 C  s   t | |\}}| t||S rQ   r   r   r   r   rR   rR   rT   __floordiv__     zArrowSeries.__floordiv__c                 C  s   t | |\}}| t||S rQ   r   r   rR   rR   rT   __rfloordiv__  r   zArrowSeries.__rfloordiv__c                 C  s$   t | |\}}| tjt|| S rQ   r   r   r   divider   r   rR   rR   rT   __truediv__     zArrowSeries.__truediv__c                 C  s$   t | |\}}| tjt|| S rQ   r   r   rR   rR   rT   __rtruediv__   r   zArrowSeries.__rtruediv__c                 C  s6   | | j }t| |\}}t|t||}| |S rQ   rs   r   r   r   r   r   ro   r   	floor_divr   resrR   rR   rT   __mod__$     

zArrowSeries.__mod__c                 C  s6   ||  j }t| |\}}t|t||}| |S rQ   r   r   rR   rR   rT   __rmod__*  r   zArrowSeries.__rmod__c                 C     |  t| jS rQ   )r   r   invertrs   rr   rR   rR   rT   
__invert__0     zArrowSeries.__invert__pa.DataTypec                 C  s   | j jS rQ   )rs   typerr   rR   rR   rT   _type3     zArrowSeries._typeT)_return_py_scalarr   intc                C  s   t t| j|S rQ   )rU   lenrs   ro   r   rR   rR   rT   r   7     zArrowSeries.len	predicateArrowSeries | list[bool | None]c                 C  s0   t |tst| |\}}n|}| | j|S rQ   )r&   rN   r   r   rs   filter)ro   r   _other_nativerR   rR   rT   r   :  s   
zArrowSeries.filterfloatc                C     t t| j|S rQ   )rU   r   meanrs   r   rR   rR   rT   r   B  r   zArrowSeries.meanc                C  s4   ddl m} | j sd}||tt| j|S )Nr   r!   z<`median` operation not supported for non-numeric input type.)narwhals.exceptionsr"   r   
is_numericrU   r   approximate_medianrs   )ro   r   r"   msgrR   rR   rT   medianE  s   
zArrowSeries.medianc                C  r   rQ   )rU   r   minrs   r   rR   rR   rT   r   P  r   zArrowSeries.minc                C  r   rQ   )rU   r   maxrs   r   rR   rR   rT   r   S  r   zArrowSeries.maxc                C      t | jt | j}t||S rQ   )r   indexrs   r   rU   )ro   r   	index_minrR   rR   rT   arg_minV     
zArrowSeries.arg_minc                C  r   rQ   )r   r   rs   r   rU   )ro   r   	index_maxrR   rR   rT   arg_maxZ  r   zArrowSeries.arg_maxc                C     t tj| jdd|S Nr   	min_count)rU   r   sumrs   r   rR   rR   rT   r  ^     zArrowSeries.sumc                 C     |  | j S rQ   )r   rs   	drop_nullrr   rR   rR   rT   
drop_nullsc  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   rs   chunksr   r   concat_arrays)ro   r  arraysrR   rR   rT   shiftf  s    $zArrowSeries.shiftddofc                C     t tj| j|d|S N)r  )rU   r   stddevrs   ro   r  r   rR   rR   rT   stdo  r  zArrowSeries.stdc                C  r  r  )rU   r   variancers   r  rR   rR   rT   vart  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      ?)rs   r  r   r   r   r   r   r   r   r   rU   )ro   r   ser_not_nullmm2m3biased_population_skewnessrR   rR   rT   skewy  s   

zArrowSeries.skewc                C  r   rQ   )rU   r   countrs   r   rR   rR   rT   r!    r   zArrowSeries.countc                C  s   t tj| j dd|S )Nall)mode)rU   r   r!  rs   uniquer   rR   rR   rT   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: )rk   r#   rj   to_native_namespacer   AssertionError)ro   r   rR   rR   rT   __native_namespace__  s   
z ArrowSeries.__native_namespace__c                 C  rq   rQ   )rh   rr   rR   rR   rT   rb     rt   zArrowSeries.namerows*SizedMultiIndexSelector[ArrowChunkedArray]c                 C  sN   t |dkr| | jddS | jdk rt|trt|}| | j|S )Nr   )   )	r   r   rs   slicerl   r   tuplelisttake)ro   r)  rR   rR   rT   _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   rs   stepNotImplementedErrorr   r,  )ro   r)  r2  r3  r   rR   rR   rT   _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|}t	|}t
||}t
||}|j|  td}d||< t| jtd||
|}| |S )Nr   )r   Tz
list[bool])numpyr   r   r   arrayrv   rs   combine_chunksr   sort_indicesr/  zerosr   rN   replace_with_maskr	   r   )	ro   r7  r9  npindices_nativevalues_nativesorting_indicesmaskr   rR   rR   rT   scatter  s&   




zArrowSeries.scatter	list[Any]c                 C  
   | j  S rQ   )rs   	to_pylistrr   rR   rR   rT   to_list     
zArrowSeries.to_list)copyrK  bool | NonerF   c                C  s   | j j||dS )N)r   rK  )rs   	__array__ro   r   rK  rR   rR   rT   rM    r   zArrowSeries.__array__c                C  rG  rQ   )rs   to_numpyrN  rR   rR   rT   rO    rJ  zArrowSeries.to_numpyc                 C  s$   | j | j|| j| jd}| j|_|S ru   )rv   rs   rl   rm   rn   )ro   rb   r   rR   rR   rT   alias  s   zArrowSeries.aliasr;   c                 C  s   t | jj| jS rQ   )r   rs   r   rm   rr   rR   rR   rT   r        zArrowSeries.dtypec                 C  r   rQ   )r   r   absrs   rr   rR   rR   rT   rR    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_sumrs   r   )ro   rS  cum_sumr   rR   rR   rT   rW    s    
zArrowSeries.cum_sumdecimalsc                 C  s   |  tj| j|ddS )Nhalf_towards_infinity)
round_mode)r   r   roundrs   )ro   rX  rR   rR   rT   r[    s   zArrowSeries.roundc                 C  s   |  t| j S rQ   )r   r   pairwise_diffrs   r<  rr   rR   rR   rT   diff     zArrowSeries.diffc                C  r   r   )rU   r   anyrs   r   rR   rR   rT   r_    r  zArrowSeries.anyc                C  r   r   )rU   r   r"  rs   r   rR   rR   rT   r"    r  zArrowSeries.alllower_boundupper_boundclosedr<   c           
      C  s   t | |\}}t | |\}}|dkr't| j|}t| j|}t||}nM|dkr@t| j|}t| j|}	t||	}n4|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   rs   r   r   r   r   r'  r   )
ro   r`  ra  rb  r   geltr   gtlerR   rR   rT   
is_between  s(   
zArrowSeries.is_betweenc                 C  s   | j | j ddS NTrx   )r   rs   is_nullrr   rR   rR   rT   rm       zArrowSeries.is_nullc                 C  s   | j t| jddS rl  )r   r   is_nanrs   rr   rR   rR   rT   ro    r^  zArrowSeries.is_nanDType | type[DType]c                 C  s$   t || j}| jt| j|ddS rl  )r   rm   r   r   r	   rs   )ro   r   	data_typerR   rR   rT   r	     s   zArrowSeries.castc                C  s   t | jj|S rQ   )rU   rs   
null_countr   rR   rR   rT   rr  "  s   zArrowSeries.null_countc              	   C  sB   |dkr|  | jd|S t| }|  | jdtd|| S r	  )r   rs   r,  r   r   ro   r  num_rowsrR   rR   rT   head%  s   zArrowSeries.headc                 C  sB   |dkrt | }| | jtd|| S | | jt|S r	  )r   r   rs   r,  r   rR  rs  rR   rR   rT   tail,  s   zArrowSeries.tailc                 C  s0   |  |r|}nt|}| tj| j|dS )N)	value_set)r   r   r;  r   r   is_inrs   )ro   r   rw  rR   rR   rT   rx  3  s   

zArrowSeries.is_inc                 C  s&   dd l }|| j}| j|| j| dS )Nr   r}   )r:  flatnonzerors   r   rb   )ro   r@  r   rR   rR   rT   arg_true:  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rM   )r   
ValueErrorrU   rs   )ro   r   r   rR   rR   rT   item@  s   zArrowSeries.itemsortparallel
str | None	normalizer.   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| jddS )z-Parallel is unused, exists for compatibility.r   r-   Nr   
proportionr!  r9  r3   countsnames
descendingTrd   rf   validate_column_names)narwhals._arrow.dataframer.   rh   r   value_countsrs   fieldr	   r   r   r  r   Tablefrom_arrayssort_byrl   rm   )ro   r  r  rb   r  r.   index_name_value_name_
val_countsr9  r  r  	val_countrR   rR   rT   r  K  s$   	
zArrowSeries.value_countsrD  c                 C  s"   |j  }| t|| j |j S rQ   )rs   r<  r   r   if_else)ro   rD  r   condrR   rR   rT   zip_withn  s   
zArrowSeries.zip_withfractionwith_replacementseedc          
      C  sh   dd l }t| }|d u r|d urt|| }|jj|d}|d|}|j|||d}	| | j	|	S )Nr   )r  )sizereplace)
r:  r   r   randomdefault_rngarangechoicer   rs   r/  )
ro   r  r  r  r  r@  rt  rngidxrD  rR   rR   rT   sampler  s   zArrowSeries.sample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   arrr3   r  r   	directionr  rO   r2   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   r;  r  r   int64maximum
accumulatewhereminimumr  and_rm  r   r   r/  )r  r  r  
valid_maskr7  valid_indexdistancer@  rR   rT   fill_aux  s    

$z'ArrowSeries.fill_null.<locals>.fill_auxr  Trx   )r  r3   r  r   r  r  rO   r2   )r:  r   r   	fill_nullrs   fill_null_forwardfill_null_backwardr   )	ro   rK   r  r  r  r   native_valuerz   	fill_funcrR   r  rT   r    s   zArrowSeries.fill_nullc                 C  s8   ddl m} tjj| jg| jgd}||| j| jddS )Nr   r-   r  Fr  )	r  r.   r   r  r  rs   rb   rl   rm   )ro   r.   dfrR   rR   rT   to_frame  s   zArrowSeries.to_framepd.Series[Any]c                 C  s   dd l }|j| j| jdS )Nr   r   )pandasSeriesrs   rb   )ro   pdrR   rR   rT   	to_pandas     zArrowSeries.to_pandas	pl.Seriesc                 C  s   dd l }td|| jS )Nr   r  )polarsr	   
from_arrowrs   )ro   plrR   rR   rT   	to_polars  r  zArrowSeries.to_polarsc                 C  s   |    | jS rQ   )r  	is_uniquerP  rb   rr   rR   rR   rT   r    rn  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r:  r   r;  r  r   r$   rb   r  r  rs   append_columngroup_by	aggregatecolumnr   r   rx  )ro   r@  
row_number	col_tokenfirst_distinct_indexrR   rR   rT   is_first_distinct     zArrowSeries.is_first_distinctc                 C  r  )Nr   r  r  r  r   _maxr  )ro   r@  r  r  last_distinct_indexrR   rR   rT   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   rN   r   	TypeErrorr   r"  r   rs   r   rU   )ro   r  r   r   rR   rR   rT   	is_sorted  s   
(&zArrowSeries.is_sortedmaintain_orderc                C  r  rQ   )r   rs   r$  )ro   r  rR   rR   rT   r$    rQ  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: F)r  )r   index_inrs   r   r;  r/  r	   r   rm   r   rm  r  r   r$  rI  r~  )ro   r  r  r  idxsresult_nativer   r   rR   rR   rT   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_indicesrs   r   r/  )ro   r  r  r  r  sorted_indicesrR   rR   rT   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| jddj| S )Nr   r-   encoder  rg   nullc                   s4   g | ]}i    |    | qS rR   )get).0vrb   null_col_panull_col_plr  rR   rT   
<listcomp>  s    z*ArrowSeries.to_dummies.<locals>.<listcomp>c                   s   g | ]}| kr|qS rR   rR   )r  c)r  rR   rT   r  '  s    r  Tr  )r:  r  r.   rh   rs   r<  dictionary_encoder>  r   
dictionaryint8r7  r  sortedr   r   r  r  rl   rm   simple_select)	ro   r  r  r@  r.   dar  colsoutput_orderrR   r  rT   
to_dummies  s2    zArrowSeries.to_dummiesquantileinterpolationrC   c                C  s   t tj| j||dd |S )N)qr  r   )rU   r   r  rs   )ro   r  r  r   rR   rR   rT   r  3  s   zArrowSeries.quantiler   offsetc                 C  s   |  | j|d | S rQ   )r   rs   )ro   r  r
  rR   rR   rT   gather_every?  r^  zArrowSeries.gather_every.Self | NumericLiteral | TemporalLiteral | Nonec                 C  s   |rt | |nd\}}|rt | |nd\}}|d u r$| t| j|S |d u r2| t| j|S | tt| j||S )N)NN)r   r   r   min_element_wisers   max_element_wise)ro   r`  ra  r   lowerupperrR   rR   rT   clipB  s   zArrowSeries.clipr2   c                 C  rG  rQ   )rs   r<  rr   rR   rR   rT   to_arrowR  rJ  zArrowSeries.to_arrowc                 C  sZ   |   }td| jgd}| j|dddd}||||| jtj	dk
| jS )Nr  r  F)rb   r  r  r  )kind)r   r$   rb   r  r   colr   	broadcastr   AGGREGATION
get_column)ro   plxr  r  rR   rR   rT   r#  U  s   zArrowSeries.modec                 C  r   rQ   )r   r   	is_finiters   rr   rR   rR   rT   r  `  r   zArrowSeries.is_finitec                C  s&   t | j}|   | j|dS )NrS  )r%   rm   rm  r	   UInt32rW  )ro   rS  dtypesrR   rR   rT   	cum_countc  s   
zArrowSeries.cum_countr   c                C  B   |s
t j| jddnt j| jd d d ddd d d }| |S rT  )r   cumulative_minrs   r   ro   rS  r   rR   rR   rT   cum_ming  
   "
zArrowSeries.cum_minc                C  r  rT  )r   cumulative_maxrs   r   r   rR   rR   rT   cum_maxp  r"  zArrowSeries.cum_maxc                C  r  rT  )r   cumulative_prodrs   r   r   rR   rR   rT   cum_prody  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'  r)  Fr  r  rK   r  r  r   r   rW  r  r  r  r   r   r  rs   r6  r,  ro   r'  r(  r)  padded_seriesr
  rW  rolling_sumvalid_countcount_in_windowr   rR   rR   rT   r0    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 r*  r-  r.  rR   rR   rT   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 )Nr+  Fr  r  r,  r   r  )r   rW  r  r  powr  r   r   r  rs   r  r6  r,  )ro   r'  r(  r)  r  r/  r
  rW  r0  
cum_sum_sqrolling_sum_sqr1  r2  r   rR   rR   rT   rolling_var  sJ   zArrowSeries.rolling_varc                C  s   | j ||||dd S )N)r'  r(  r)  r        ?)r7  )ro   r'  r(  r)  r  rR   rR   rT   rolling_std  s   zArrowSeries.rolling_stdmethodrB   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~  rl   rs   r<  r   rm  rankr  r   r   r   )
ro   r:  r  r   r?  r@  ra   	null_maskrA  r   rR   rR   rT   rA    s   


zArrowSeries.rankbinslist[float | int] | None	bin_countinclude_breakpointc                  s8  dd l ddlm} d fdd}dfd	d
 tjtttjt	j
t dd}|d urt|dk rFg g }}n|tjdt dkrat|d }|dd  }nt|dkrtttjtt|d tjtt|d 
t g}|d g}no |\}}nh|d ur|dkrg g }}nZ|tjdt dkrƈ|dd|d dd  }}n;|dkrtj}	|	d |	d }
}|
|kr|gt|tdg}}n|g|g}}n||\}}nd}t|i }|r
||d< ||d< |tj|jjddS )Nr   r-   rE  r   c                   sX   t j}|d  |d  }}||kr|d8 }|d7 }||| d } |S )Nr   r   r8  r  )r   min_maxrs   r\   linspace)rE  dr  r  rC  _hist_from_binsr@  ro   rR   rT   _hist_from_bin_count  s   z.ArrowSeries.hist.<locals>._hist_from_bin_countrC  Sequence[int | float]c                   s    j | jdd}ttjt| d d|} j|dd\}} dt| } 	|}| 
|| | 
||< | dd  }||fS )Nrc  )sider   r  T)return_counts)searchsortedrs   r   r  r   r   r$  r  r   
zeros_likeisin)rC  bin_indicesobs_cats
obs_countsobj_catsr  	bin_right)r@  ro   rR   rT   rK    s   
z)ArrowSeries.hist.<locals>._hist_from_binsr  r  r  r  r   r   r   r8  z)must provide one of `bin_count` or `bins`
breakpointr!  Tr  )rE  r   )rC  rM  )r:  r  r.   r   r  r   or_ro  rs   rm  r	   r   uint8r   scalaruint64r>  r  r   r   r   r   rH  rG  r   r"   r  from_pydictrl   rm   )ro   rC  rE  rF  r.   rL  
data_countr  rW  rI  r  r  r   r   rR   rJ  rT   hist  sj   	"

zArrowSeries.histIterator[Any]c                 c  s     | j D ]	}t|ddV  qd S )NTr}  )rs   rU   )ro   xrR   rR   rT   __iter__i  s   
zArrowSeries.__iter__c           	   
   C  s   ddl m} ddl m} ddl m} z|d urt|ntd | jd}tt|| j	ddW S  |||fyS } zddl
m} d	t| d
| j d}|||d }~ww )Nr   )ArrowInvalid)ArrowNotImplementedError)ArrowTypeErrorr  Tr}  r!   z Unable to compare other of type z with series of type .)pyarrowrc  rd  re  r   r   rU   r   rx  rs   r   r"   r   r   )	ro   r   rc  rd  re  other_excr"   r   rR   rR   rT   __contains__m  s   
zArrowSeries.__contains__r   c                 C     t | S rQ   r   rr   rR   rR   rT   dt}  r   zArrowSeries.dtr   c                 C  rk  rQ   r   rr   rR   rR   rT   cat  r   zArrowSeries.catr   c                 C  rk  rQ   r   rr   rR   rR   rT   rc     r   zArrowSeries.strr   c                 C  rk  rQ   r   rr   rR   rR   rT   r.    r   zArrowSeries.listr   c                 C  rk  rQ   r   rr   rR   rR   rT   struct  r   zArrowSeries.struct)
ra   r3   rb   rc   rd   re   rf   rI   rO   rg   )rO   r3   )rf   rI   rO   r+   )rz   r{   ry   rN   rO   r+   )
r   r   r~   rJ   rb   rc   r   r   rO   r+   )rK   r   rO   r+   )r   r   rO   r   )r   r3   r~   rJ   rb   rc   rO   r+   )r   r>   r~   rJ   rO   r+   )rO   r0   )r   r   rO   r+   )r   r   rO   r+   )rO   r+   )rO   r   )r   rN   rO   r   )r   r   rO   r+   )r   rN   rO   r   )r   rN   rO   r   )r  r   rO   r+   )r  r   r   rN   rO   r   )r   rN   rO   r  )rO   r*   )rO   rc   )r)  r*  rO   r+   )r)  r1  rO   r+   )r7  r8  r9  r   rO   r+   )rO   rF  rQ   )r   r   rK  rL  rO   rF   )rb   rc   rO   r+   )rO   r;   )rS  rN   rO   r+   )rX  r   rO   r+   )r   rN   rO   rN   )r`  r   ra  r   rb  r<   rO   r+   )r   rp  rO   r+   )r   r{  rO   r   )
r  rN   r  rN   rb   r  r  rN   rO   r.   )rD  r+   r   r+   rO   r+   )
r  r{  r  r  r  rN   r  r{  rO   r+   )rK   r  r  r  r  r{  rO   r+   )rO   r.   )rO   r  )rO   r  )rO   r`   )r  rN   rO   rN   )r  rN   rO   r+   )r  r  r  r  r  r   rO   r+   )r  rN   r  rN   rO   r+   )r  rc   r  rN   rO   r.   )r  r   r  rC   r   rN   rO   r   )r   )r  r   r
  r   rO   r+   )r`  r  ra  r  rO   r+   )rO   r2   )r'  r   r(  r   r)  rN   rO   r+   )
r'  r   r(  r   r)  rN   r  r   rO   r+   )r:  rB   r  rN   rO   r+   )rC  rD  rE  r{  rF  rN   rO   r.   )rO   r`  )r   r   rO   rN   )rO   r   )rO   r   )rO   r   )rO   r   )rO   r   )__name__
__module____qualname__rp   propertyrs   rw   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   r!  r%  r(  rb   r0  r6  rE  rI  rM  rO  rP  r   rR  rW  r[  r]  r_  r"  rk  rm  ro  r	   rr  ru  rv  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r$  r  r  r  r  r  r  r  r#  r  r  r(   rd   r!  r$  r&  r0  r3  r7  r9  rA  r_  rb  rj  rl  rm  rc   r.  rn  r'   ewm_mean__classcell__rR   rR   r   rT   r`   u   s   
	
	#*
'


+

dr`   r3   )rK   rL   rM   rN   rO   r9   )rK   rW   rM   rN   rO   rX   )rK   rY   rM   rN   rO   rZ   )rK   r[   rM   rN   rO   r   )rK   r   rM   rN   rO   r   )`
__future__r   typingr   r   r   r   r   r   r	   r
   rg  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   narwhals._compliantr   narwhals._expression_parsingr   narwhals.dependenciesr    r   r"   narwhals.utilsr#   r$   r%   r&   r'   r(   r)   typesr*   r  r  r  r  typing_extensionsr+   r,   r  r.   r   r0   narwhals._arrow.typingr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   narwhals.dtypesr;   narwhals.typingr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rU   r`   rR   rR   rR   rT   <module>   s    
