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
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+ erGd d l,m-Z- d d!lm.Z. d d	l/Z0d d	l1Z2d d"l3m4Z4 d d#l3m5Z5 d d$l6m7Z7 d d%l8m9Z9 d d&l:m;Z; d d'l<m=Z= d d(l>m?Z? d d)l>m@Z@ d d*l>mAZA d d+l>mBZB d d,l>mCZC d d-l>mDZD d d.l>mEZE d d/l>mFZF d d0l>mGZG d d1l>mHZH d d2l>mIZI d d3l>mJZJ d d4l&mKZK d d5l&mLZL i d6d7d8d7d9d:d;d:d<d=d>d=d?d@dAd@dBdCdDdCdEdFdGdFdHdIdJdIdKdLdMdLdNdOdOdPdPdQZMi d6dOd8dOd9dOd;dOd<dOd>dOd?dOdAdOdBdOdDdOdEdOdGdOdHdOdJdOdKdOdMdOdNdOdOdPdPdQZNG dRdS dSee ZOd	S )T    )annotations)TYPE_CHECKING)Any)Iterable)Iterator)Mapping)Sequence)castN)EagerSeriesPandasLikeSeriesCatNamespace!PandasLikeSeriesDateTimeNamespace)PandasLikeSeriesListNamespacePandasLikeSeriesStringNamespace)PandasLikeSeriesStructNamespace)align_and_extract_native)get_dtype_backend)narwhals_to_native_dtype)native_to_narwhals_dtype)object_native_to_narwhals_dtype)rename)select_columns_by_name)	set_index)is_numpy_array_1dis_pandas_like_series)InvalidOperationError)Implementation)import_dtypes_module)
is_list_of)parse_version)validate_backend_version)
ModuleType)Hashable)Self)TypeIs)
ArrowArrayPandasLikeDataFramePandasLikeNamespace)DType)ClosedInterval)FillNullStrategy)Into1DArray)NonNestedLiteral)NumericLiteral)
RankMethod)RollingInterpolationMethod)SizedMultiIndexSelector)TemporalLiteral)_1DArray)
_AnyDArray)_SliceIndex)Version)_FullContextInt64int64zint64[pyarrow]Int32int32zint32[pyarrow]Int16int16zint16[pyarrow]Int8int8zint8[pyarrow]UInt64uint64zuint64[pyarrow]UInt32uint32zuint32[pyarrow]UInt16uint16zuint16[pyarrow]UInt8uint8zuint8[pyarrow]Float64float64float32)zfloat64[pyarrow]Float32zfloat32[pyarrow]c                   @  sH  e Zd Zd]ddZed^ddZd_ddZd`ddZdaddZdbddZ	dcddZ
dd ddd$d%Zed&d'd'd(ded2d3Zedfd6d7Zedgd8d9Zedhd;d<Zedid=d>Zedjd@dAZdkdKdLZdldPdQZdmdRdSZdndUdVZdodXdYZdpd[d\Zdqd^d_ZdrdddeZdsdgdhZdtdidjZdudkdlZdudmdnZdvdpdqZ dwdsdtZ!dwdudvZ"dsdwdxZ#dsdydzZ$dsd{d|Z%dsd}d~Z&dsddZ'dsddZ(dsddZ)dsddZ*dsddZ+dsddZ,dsddZ-dsddZ.dsddZ/dsddZ0dsddZ1dsddZ2dsddZ3dsddZ4dsddZ5dsddZ6dsddZ7dsddZ8dxddZ9dyddZ:dyddZ;d^ddZ<d^ddZ=dzddZ>duddZ?dzddZ@dzddZAd{ddZBd{ddZCd|ddZDduddZEdtddZFdtddÄZGd}ddʄZHdtdd̄ZIdudd΄ZJd~ddԄZKdtddքZLdddلZMddd܄ZNdtddބZOdddZPdddZQdddZRdddZSdddZTdd'ddddZUdddZVdddZWdddZXdudd ZYdddZZdddZ[dddZ\dddZ]dddZ^dddZ_dddZ`dddZadddZbdddZcdd!d"Zddd$d%Zedd'd(Zfdd)d*Zgdd+d,Zhdd-d.Zidd/d0Zjdd1d2Zkdd5d6Zldd7d8Zmdd9d:Zndd;d<Zodd>d?Zpdd@dAZqddBdCZrddFdGZsddLdMZteddOdPZueddRdSZveddUdVZweddXdYZxedd[d\Zyd'S (  PandasLikeSeriesnative_seriesr   implementationr   backend_versiontuple[int, ...]versionr:   returnNonec                C  s8   |j | _|| _|| _|| _|| _t| j| j d| _d S )NF)name_name_native_series_implementation_backend_version_versionr#   
_broadcast)selfrQ   rR   rS   rU    r`   P/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_pandas_like/series.py__init__o   s   
zPandasLikeSeries.__init__c                 C     | j S N)rZ   r_   r`   r`   ra   native      zPandasLikeSeries.nativer$   c                 C  s,   | j  r
| j  S dt| j  }t|)Nz!Expected pandas/modin/cudf, got: )r[   is_pandas_liketo_native_namespacetypeAssertionErrorr_   msgr`   r`   ra   __native_namespace__   s   

z%PandasLikeSeries.__native_namespace__r,   c                 C  s   ddl m} || j| j| jS )Nr   r+   )narwhals._pandas_like.namespacer,   r[   r\   r]   )r_   r,   r`   r`   ra   __narwhals_namespace__   s   z'PandasLikeSeries.__narwhals_namespace__rows'SizedMultiIndexSelector[pd.Series[Any]]r&   c                 C  s(   t |tr	t|n|}| | jj| S rd   )
isinstancetuplelist_with_nativerf   ilocr_   rq   r`   r`   ra   _gather   s   zPandasLikeSeries._gather_SliceIndex | rangec                 C  s    |  | jjt|j|j|j S rd   )rv   rf   rw   slicestartstopsteprx   r`   r`   ra   _gather_slice   s   zPandasLikeSeries._gather_slicec                 C  s   | j | j| j| j|dS N)rR   rS   rU   )	__class__rf   r[   r\   )r_   rU   r`   r`   ra   _with_version   s   zPandasLikeSeries._with_versionFpreserve_broadcastseriesr   boolc                C  s(   | j || j| j| jd}|r| j|_|S r   )r   r[   r\   r]   r^   )r_   r   r   resultr`   r`   ra   rv      s   zPandasLikeSeries._with_native N)rX   dtypeindexdataIterable[Any]contextr;   rX   strr   DType | type[DType] | Noner   c                C  s   |j }|j}|j}| }	i }
|rt|d ||||
d< n| r$d|
d< |d ur0t|r0||
d< | j|	j|fd|i|
|dS )Nr   Fcopyr   rX   r   )	r[   r\   r]   ri   r   	is_pandaslenfrom_nativeSeries)clsr   r   rX   r   r   rR   rS   rU   nskwdsr`   r`   ra   from_iterable   s   


 zPandasLikeSeries.from_iterableobjTypeIs[Any]c                 C     t | S rd   r   )r   r`   r`   ra   
_is_native      zPandasLikeSeries._is_nativec               C  s   | ||j |j|jdS r   )r[   r\   r]   )r   r   r   r`   r`   ra   r      s   zPandasLikeSeries.from_nativer0   c               C  s8   |j }t|r	|n|g}| j|dd}| j||dS )Nr   rX   r   )r[   r   ri   r   r   )r   r   r   rR   arrrf   r`   r`   ra   
from_numpy   s   zPandasLikeSeries.from_numpyc                 C  rc   rd   )rY   re   r`   r`   ra   rX      rg   zPandasLikeSeries.namer-   c                 C  s2   | j j}|dkrt|| j| jS t| j | j| jS )Nobject)rf   r   r   r]   r[   r   )r_   native_dtyper`   r`   ra   r      s   zPandasLikeSeries.dtypecomfloat | Nonespan	half_lifealphaadjustmin_samplesintignore_nullsc             	   C  s   | j }| }	| jtju r*|dkr|r|	 s$|j|||||d }
nd}t||j|||||||d }
d |
|	< | 	|
S )Nr   )r   r   halflifer   r   zscuDF only supports `ewm_mean` when there are no missing values or when both `min_period=0` and `ignore_nulls=False`)	ignore_na)
rf   isnar[   r   CUDFanyewmmeanNotImplementedErrorrv   )r_   r   r   r   r   r   r   r   sermask_nar   rm   r`   r`   ra   ewm_mean   s&   

zPandasLikeSeries.ewm_meanindicesint | Sequence[int]valuesc                 C  sT   t || jrt|j| jj| | j| jd}| jjdd}||j|< | j	|_	| 
|S )NrR   rS   T)deep)rs   r   r   rf   r   r[   r\   r   rw   rX   rv   )r_   r   r   sr`   r`   ra   scatter  s   


zPandasLikeSeries.scatterc                 C  s   t |j| jj|j | j| jd}| jtju r ttdk r |	 }d}| jtju r7| j|k r7|| jj
|jj< d S || jj
|j< d S )Nr   )   )   r   )r   rf   r   r[   r\   r   PANDASr"   npr   rw   r   )r_   r   r   values_nativemin_pd_versionr`   r`   ra   _scatter_in_place  s   
z"PandasLikeSeries._scatter_in_placeDType | type[DType]c                 C  s:   t |t| jj| j| j| j| jd}| j| j|ddS )N)dtype_backendrR   rS   rU   Tr   )	r   r   rf   r   r[   r\   r]   rv   astype)r_   r   pd_dtyper`   r`   ra   r	   .  s   zPandasLikeSeries.cast
int | Nonec                 C  sD   |d u rt | dkrdt |  d}t|| jjd S | jj| S )Nr   zlcan only call '.item()' if the Series is of length 1, or an explicit index is provided (Series is of length )r   )r   
ValueErrorrf   rw   )r_   r   rm   r`   r`   ra   item8  s   zPandasLikeSeries.itemr*   c                 C  s*   ddl m} || j | j| j| jddS )Nr   r)   F)rR   rS   rU   validate_column_names)narwhals._pandas_like.dataframer*   rf   to_framer[   r\   r]   )r_   r*   r`   r`   ra   r   D  s   zPandasLikeSeries.to_frame	list[Any]c                 C  s&   | j  }|r| j  S | j S rd   )r[   is_cudfrf   to_arrow	to_pylistto_list)r_   r   r`   r`   ra   r   O  s   
zPandasLikeSeries.to_listlower_boundupper_boundclosedr.   c                 C  s   | j }t| |\}}t| |\}}|dkr ||||@ }n/|dkr/||||@ }n |dkr>||||@ }n|dkrM||||@ }nt| ||j	S )Nleftrightnoneboth)
rf   r   geltgtlerk   rv   aliasrX   )r_   r   r   r   r   _resr`   r`   ra   
is_betweenS  s   zPandasLikeSeries.is_betweenotherc                 C     |  | j|S rd   )rv   rf   isinr_   r   r`   r`   ra   is_ine     zPandasLikeSeries.is_inc                 C  s2   | j }|jtt||j|jdj| }| |S )N)rX   r   )rf   r   ranger   rX   r   locrv   )r_   r   r   r`   r`   ra   arg_trueh  s   "
zPandasLikeSeries.arg_truec                 C  s.   | j tju r| jdk r| j  S | j S Nr   )r[   r   r   r\   rf   to_numpyargminre   r`   r`   ra   arg_minm  s   
zPandasLikeSeries.arg_minc                 C  s0   | j }| jtju r| jdk r|  S | S r   )rf   r[   r   r   r\   r   argmax)r_   r   r`   r`   ra   arg_maxr  s   zPandasLikeSeries.arg_max	predicatec                 C  s8   t |tst| |\}}n|}| | jj| | jS rd   )r!   r   r   rv   rf   r   r   rX   )r_   r   r   other_nativer`   r`   ra   filterz  s   
zPandasLikeSeries.filterr   c                 C  s$   t | |\}}| ||k| jS rd   r   rv   r   rX   r_   r   r   r`   r`   ra   __eq__     zPandasLikeSeries.__eq__c                 C  s$   t | |\}}| ||k| jS rd   r   r   r`   r`   ra   __ne__  r   zPandasLikeSeries.__ne__c                 C  s$   t | |\}}| ||k| jS rd   r   r   r`   r`   ra   __ge__  r   zPandasLikeSeries.__ge__c                 C  s$   t | |\}}| ||k| jS rd   r   r   r`   r`   ra   __gt__  r   zPandasLikeSeries.__gt__c                 C  s$   t | |\}}| ||k| jS rd   r   r   r`   r`   ra   __le__  r   zPandasLikeSeries.__le__c                 C  s$   t | |\}}| ||k | jS rd   r   r   r`   r`   ra   __lt__  r   zPandasLikeSeries.__lt__c                 C  s$   t | |\}}| ||@ | jS rd   r   r   r`   r`   ra   __and__  r   zPandasLikeSeries.__and__c                 C  0   t | |\}}td|}| ||| jS Npd.Series[Any])r   r	   rv   r  r   rX   r   r`   r`   ra   __rand__     
zPandasLikeSeries.__rand__c                 C  s$   t | |\}}| ||B | jS rd   r   r   r`   r`   ra   __or__  r   zPandasLikeSeries.__or__c                 C  r  r  )r   r	   rv   r  r   rX   r   r`   r`   ra   __ror__  r  zPandasLikeSeries.__ror__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __add__  r   zPandasLikeSeries.__add__c                 C  (   t | |\}}| | j|| jS rd   )r   rv   rf   __radd__r   rX   r_   r   r   r   r`   r`   ra   r       zPandasLikeSeries.__radd__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __sub__  r   zPandasLikeSeries.__sub__c                 C  r
  rd   )r   rv   rf   __rsub__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rsub__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __mul__  r   zPandasLikeSeries.__mul__c                 C  r
  rd   )r   rv   rf   __rmul__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rmul__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __truediv__  r   zPandasLikeSeries.__truediv__c                 C  r
  rd   )r   rv   rf   __rtruediv__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rtruediv__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __floordiv__  r   zPandasLikeSeries.__floordiv__c                 C  r
  rd   )r   rv   rf   __rfloordiv__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rfloordiv__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __pow__  r   zPandasLikeSeries.__pow__c                 C  r
  rd   )r   rv   rf   __rpow__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rpow__c                 C  s$   t | |\}}| || | jS rd   r   r   r`   r`   ra   __mod__  r   zPandasLikeSeries.__mod__c                 C  r
  rd   )r   rv   rf   __rmod__r   rX   r  r`   r`   ra   r    r  zPandasLikeSeries.__rmod__r_   c                 C  s   |  | j S rd   )rv   rf   re   r`   r`   ra   
__invert__     zPandasLikeSeries.__invert__c                 C  
   | j  S rd   )rf   r   re   r`   r`   ra   r        
zPandasLikeSeries.anyc                 C  r  rd   )rf   allre   r`   r`   ra   r    r  zPandasLikeSeries.allc                 C  r  rd   )rf   minre   r`   r`   ra   r    r  zPandasLikeSeries.minc                 C  r  rd   )rf   maxre   r`   r`   ra   r     r  zPandasLikeSeries.maxfloatc                 C  r  rd   )rf   sumre   r`   r`   ra   r"    r  zPandasLikeSeries.sumc                 C  r  rd   )rf   countre   r`   r`   ra   r#    r  zPandasLikeSeries.countc                 C  r  rd   )rf   r   re   r`   r`   ra   r     r  zPandasLikeSeries.meanc                 C  s    | j  sd}t|| j S )Nz<`median` operation not supported for non-numeric input type.)r   
is_numericr   rf   medianrl   r`   r`   ra   r%    s   

zPandasLikeSeries.medianddofc                C     | j j|dS Nr&  )rf   stdr_   r&  r`   r`   ra   r*    r  zPandasLikeSeries.stdc                C  r'  r(  )rf   varr+  r`   r`   ra   r,    r  zPandasLikeSeries.varc                 C  s~   | j  }t|dkrd S t|dkrtdS t|dkrdS ||  }|d  }|d  }|dkr;||d  S tdS )Nr   r   nanr   g           g      ?)rf   dropnar   r!  r   )r_   ser_not_nullmm2m3r`   r`   ra   skew  s   
zPandasLikeSeries.skewc                 C  s
   t | jS rd   )r   rf   re   r`   r`   ra   r     r  zPandasLikeSeries.lenc                 C  s   | j | j ddS )NTr   )rv   rf   r   re   r`   r`   ra   is_null     zPandasLikeSeries.is_nullc                 C  s8   | j }| j r| j||kddS d| j d}t|)NTr   z3`.is_nan` only supported for numeric dtype and not z, did you mean `.is_null`?)rf   r   r$  rv   r   )r_   r   rm   r`   r`   ra   is_nan!  s
   
zPandasLikeSeries.is_nanvalueSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc                 C  sd   | j }|d urt| |\}}| j|j|ddd}|S | j|dkr'|j|dn|j|ddd}|S )N)r8  Tr   forward)r<  )rf   r   rv   fillnaffillbfill)r_   r8  r:  r<  r   r   native_valueres_serr`   r`   ra   	fill_null(  s   
zPandasLikeSeries.fill_nullc                 C     |  | j S rd   )rv   rf   r/  re   r`   r`   ra   
drop_nulls>     zPandasLikeSeries.drop_nullsc                 C  s   | j jddS )NF)r/  )rf   nuniquere   r`   r`   ra   n_uniqueA  r  zPandasLikeSeries.n_uniquenfractionwith_replacementseedc                C  s   |  | jj||||dS )N)rI  fracreplacerandom_state)rv   rf   sample)r_   rI  rJ  rK  rL  r`   r`   ra   rP  D  s
   zPandasLikeSeries.samplec                 C  rD  rd   )rv   rf   absre   r`   r`   ra   rQ  R  rF  zPandasLikeSeries.absreversec                C  >   |s	| j jddn| j d d d jddd d d }| |S NT)skipna)rf   cumsumrv   r_   rR  r   r`   r`   ra   cum_sumU  
    
zPandasLikeSeries.cum_summaintain_orderc                C  s   |  | jj| j | jdS )Nr   )rv   rf   r   uniquerX   )r_   r[  r`   r`   ra   r\  ]  s   zPandasLikeSeries.uniquec                 C  rD  rd   )rv   rf   diffre   r`   r`   ra   r]  d  rF  zPandasLikeSeries.diffc                 C  r   rd   )rv   rf   shiftr_   rI  r`   r`   ra   r^  g  r   zPandasLikeSeries.shiftold!Sequence[Any] | Mapping[Any, Any]newSequence[Any]return_dtypec             	   C  s   | j  d}t| jj| j}|rt||| j| j| jnd }|  }|	| j |||j
||di}| | j j|| j dd| | j }	|	  |   krjd| |   |	 @ jdd  }
t|
|	S )N_tmp)r   r   )onhowzYreplace_strict did not replace all non-null values.

The following did not get replaced: F)r[  )rX   r   rf   r   r[   r   r\   r]   rn   	DataFramer   rv   r   merger   r5  r"  r   r\  r   r   )r_   r`  rb  rd  tmp_namer   r   	namespacer   r   rm   r`   r`   ra   replace_strictj  s8   	"zPandasLikeSeries.replace_strict
descending
nulls_lastc                C  s,   |rdnd}|  | jj| |d| jS )Nlastfirst)	ascendingna_position)rv   rf   sort_valuesr   rX   )r_   rm  rn  rr  r`   r`   ra   sort  s   zPandasLikeSeries.sortstr | Hashablec                 C  s.   || j kr| jt| j|| j| jdddS | S )Nr   Tr   )rX   rv   r   rf   r[   r\   )r_   rX   r`   r`   ra   r     s   
	zPandasLikeSeries.aliasr   bool | Noner7   c                C  s   | j ||dS )Nr   r   )r   )r_   r   r   r`   r`   ra   	__array__  s   zPandasLikeSeries.__array__)r   c                C  s   |p| j tju }t| j}t| j|jr&| jjd ur&| j	
dj	d j}n| j}|  }|r^t|jtv r^| j tju rF| jdk rFi }ndtdi}|jd|pWtt|j |d|S |sut|jtv ru|j|pqtt|j |dS |j||dS )NUTCr   na_valuer-  rw  r`   )r[   r   r   r    r]   rs   r   Datetime	time_zonedtconvert_time_zonereplace_time_zonerf   r   r   r   PANDAS_TO_NUMPY_DTYPE_MISSINGr   r\   r!  r    PANDAS_TO_NUMPY_DTYPE_NO_MISSING)r_   r   r   dtypesr   has_missingkwargsr`   r`   ra   r     s*   
zPandasLikeSeries.to_numpyr  c                 C  sR   | j tju r	| jS | j tju r| j S | j tju r| j S d| j  }t|)NzUnknown implementation: )	r[   r   r   rf   r   	to_pandasMODIN
_to_pandasrk   rl   r`   r`   ra   r    s   

zPandasLikeSeries.to_pandas	pl.Seriesc                 C  s   dd l }||  S Nr   )polarsfrom_pandasr  )r_   plr`   r`   ra   	to_polars  s   zPandasLikeSeries.to_polarsc                 C     |  | jjdd | jS )NFkeeprv   rf   
duplicatedr   rX   re   r`   r`   ra   	is_unique     zPandasLikeSeries.is_uniquec                 C  s   | j   S rd   )rf   r   r"  re   r`   r`   ra   
null_count  r  zPandasLikeSeries.null_countc                 C  r  )Nrp  r  r  re   r`   r`   ra   is_first_distinct  r  z"PandasLikeSeries.is_first_distinctc                 C  r  )Nro  r  r  re   r`   r`   ra   is_last_distinct  r  z!PandasLikeSeries.is_last_distinctc                C  s4   t |tsdt| }t||r| jjS | jjS )Nz/argument 'descending' should be boolean, found )rs   r   rj   	TypeErrorrf   is_monotonic_decreasingis_monotonic_increasing)r_   rm  rm   r`   r`   ra   	is_sorted  s   
zPandasLikeSeries.is_sortedrt  parallel
str | None	normalizec          	      C  sp   ddl m} | jdu rdn| j}|p|rdnd}| jjdd|d }||g|_|r1|j|dd	}|j|| d
S )z-Parallel is unused, exists for compatibility.r   r)   Nr   
proportionr#  F)r/  rt  r  )rq  r   )	r   r*   rY   rf   value_countsreset_indexcolumnsrs  r   )	r_   rt  r  rX   r  r*   index_name_value_name_	val_countr`   r`   ra   r    s   
zPandasLikeSeries.value_countsquantileinterpolationr4   c                 C  s   | j j||dS )N)qr  )rf   r  )r_   r  r  r`   r`   ra   r    s   zPandasLikeSeries.quantilemaskc                 C  s8   | j }t| |\}}t| |\}}|||}| |S rd   )rf   r   whererv   )r_   r  r   r   r   r   r`   r`   ra   zip_with  s
   
zPandasLikeSeries.zip_withc                 C  r   rd   )rv   rf   headr_  r`   r`   ra   r    r   zPandasLikeSeries.headc                 C  r   rd   )rv   rf   tailr_  r`   r`   ra   r    r   zPandasLikeSeries.taildecimalsc                 C  s   |  | jj|dS )N)r  )rv   rf   round)r_   r  r`   r`   ra   r    r6  zPandasLikeSeries.round	separator
drop_firstc                C  s   ddl m} |  }| j}| jrt| jnd}| | d}|  }|j|||||dd}	|rQt	|	j
^ }
}|g|
}tt|	|| j| j||i| j| jd}	|j|	| dS )	Nr   r)   r   nullrC   )prefix
prefix_sepr  dummy_nar   )r  rR   rS   r   )r   r*   rn   rf   rY   r   r   r   get_dummiesru   r  r   r   r\   r[   r   )r_   r  r  r*   plxr   rX   null_col_pl	has_nullsr   colsnull_col_pdoutput_orderr`   r`   ra   
to_dummies  s4   	
zPandasLikeSeries.to_dummiesoffsetc                 C  s   |  | jj|d | S rd   )rv   rf   rw   )r_   rI  r  r`   r`   ra   gather_every1  s   zPandasLikeSeries.gather_every.Self | NumericLiteral | TemporalLiteral | Nonec                 C  s`   |rt | |nd\}}|rt | |nd\}}| jtju r ddini }| | jj||fi |S )N)NNaxisr   )r   r[   r   r  rv   rf   clip)r_   r   r   r   lowerupperr  r`   r`   ra   r  4  s   zPandasLikeSeries.clipr(   c                 C  s,   | j tju r| j S dd l}|j| jS r  )r[   r   r   rf   r   pyarrowArrayr  )r_   par`   r`   ra   r   B  s   
zPandasLikeSeries.to_arrowc                 C  s   | j  }| j|_| |S rd   )rf   moderX   rv   )r_   r   r`   r`   ra   r  J  s   

zPandasLikeSeries.modec                C  s:   | j   }|s| nt| |  | d }| |S )Nr   )rf   r   rW  r   rv   )r_   rR  not_na_seriesr   r`   r`   ra   	cum_countO  s   

zPandasLikeSeries.cum_countc                C  rS  rT  )rf   cumminrv   rX  r`   r`   ra   cum_minX  rZ  zPandasLikeSeries.cum_minc                C  rS  rT  )rf   cummaxrv   rX  r`   r`   ra   cum_max`  rZ  zPandasLikeSeries.cum_maxc                C  rS  rT  )rf   cumprodrv   rX  r`   r`   ra   cum_prodh  rZ  zPandasLikeSeries.cum_prodwindow_sizecenterc                C      | j j|||d }| |S Nwindowmin_periodsr  )rf   rollingr"  rv   r_   r  r   r  r   r`   r`   ra   rolling_sump     
zPandasLikeSeries.rolling_sumc                C  r  r  )rf   r  r   rv   r  r`   r`   ra   rolling_meanv  r  zPandasLikeSeries.rolling_meanc                C  $   | j j|||dj|d}| |S Nr  r)  )rf   r  r,  rv   r_   r  r   r  r&  r   r`   r`   ra   rolling_var|     
zPandasLikeSeries.rolling_varc                C  r  r  )rf   r  r*  rv   r  r`   r`   ra   rolling_std  r  zPandasLikeSeries.rolling_stdIterator[Any]c                 c  s    | j  E d H  d S rd   )rf   __iter__re   r`   r`   ra   r    s   zPandasLikeSeries.__iter__c                 C  s$   |d u r| j   S | j |k S rd   )rf   r   r   r   r`   r`   ra   __contains__  s   $zPandasLikeSeries.__contains__c                 C  s$   | j }| |tdk|tdk @ S )Nz-infinf)rf   rv   r!  )r_   r   r`   r`   ra   	is_finite  s   zPandasLikeSeries.is_finitemethodr3   c                C  s   |dkrdn|}| j }| jtju rE| jdk rE| j rE| j  }	 rE| j
 jdi | d|i| dj|d| dd| }n| jj|d| dd}| |S )	Nordinalrp  )r.  _is_nullr  F)r  	na_optionrq  pctr`   )rX   r[   r   r   r\   r   
is_integerrf   r   r   r   assigngroupbyrankrv   )r_   r  rm  	pd_methodrX   	null_maskranked_seriesr`   r`   ra   r    s6   


zPandasLikeSeries.rankbinslist[float | int] | None	bin_countinclude_breakpointc                C  s  ddl m} ddl m} ddlm} |  }|dks$|d ur:t|dkr:i }|r,g |d< g |d< |j||| dS | j	
 dk r|d urV|dd  |t|d d	d
}n#td|}	|dkrgdgdgd
}n|dd|	d dd  ||	d	d
}|s~|d= |j||| dS |d ur| j	 | j	 }
}|
|kr|
d8 }
|d7 }|dkr|g| j	
 gd
}|s|d= |j||| dS ||
||d }d }|j| j	|d u r|n|dd}|jdddj|jjdd}i }|r|d ur|dd  n|jj|d< |jdd|d< |j||| dS )Nr   )linspace)zerosr)   r   
breakpointr#  r   )shape)r  r#  r   g      ?g      ?T)r  include_lowestF)r/  rt  )
fill_value)drop)numpyr  r  r   r*   rn   r   r   rh  rf   r#  r	   r  r   cutr  reindexcat
categoriesr   r   r  )r_   r  r  r  r  r  r*   r   r   r#  r  r  r  r   r`   r`   ra   hist  sb   "

 zPandasLikeSeries.histr   c                 C  r   rd   r   re   r`   r`   ra   r     r   zPandasLikeSeries.strr   c                 C  r   rd   r   re   r`   r`   ra   r}    r   zPandasLikeSeries.dtr   c                 C  r   rd   r   re   r`   r`   ra   r    r   zPandasLikeSeries.catr   c                 C      t | jdsd}t|t| S )Nru   z>Series must be of PyArrow List type to support list namespace.)hasattrrf   r  r   rl   r`   r`   ra   ru        zPandasLikeSeries.listr   c                 C  r  )NstructzBSeries must be of PyArrow Struct type to support struct namespace.)r  rf   r  r   rl   r`   r`   ra   r    r  zPandasLikeSeries.struct)
rQ   r   rR   r   rS   rT   rU   r:   rV   rW   )rV   r   )rV   r$   )rV   r,   )rq   rr   rV   r&   )rq   rz   rV   r&   )rU   r:   rV   r&   )r   r   r   r   rV   r&   )r   r   r   r;   rX   r   r   r   r   r   rV   r&   )r   r   rV   r   )r   r   r   r;   rV   r&   )r   r0   r   r;   rV   r&   )rV   r   )rV   r-   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   rP   )r   r   r   r   rV   r&   )r   r&   r   r&   rV   rW   )r   r   rV   r&   )r   r   rV   r   )rV   r*   )rV   r   )r   r   r   r   r   r.   rV   r&   )r   r   rV   rP   )rV   rP   )rV   r   )r   r   rV   rP   )r   r   rV   rP   )r_   rP   rV   rP   )rV   r   )rV   r!  )r&  r   rV   r!  )rV   r   )r8  r9  r:  r;  r<  r   rV   r&   )
rI  r   rJ  r   rK  r   rL  r   rV   r&   )rR  r   rV   r&   )r[  r   rV   rP   )rI  r   rV   rP   )r`  ra  rb  rc  rd  r   rV   rP   )rm  r   rn  r   rV   rP   )rX   ru  rV   r&   )r   r   r   rv  rV   r7   rd   )rV   r  )rV   r  )rV   r&   )rm  r   rV   r   )
rt  r   r  r   rX   r  r  r   rV   r*   )r  r!  r  r4   rV   r!  )r  r   r   r   rV   rP   )rI  r   rV   r&   )r  r   rV   r&   )r  r   r  r   rV   r*   )rI  r   r  r   rV   r&   )r   r  r   r  rV   r&   )rV   r(   )r  r   r   r   r  r   rV   r&   )
r  r   r   r   r  r   r&  r   rV   r&   )rV   r  )r   r   rV   r   )r  r3   rm  r   rV   r&   )r  r  r  r   r  r   rV   r*   )rV   r   )rV   r   )rV   r   )rV   r   )rV   r   )z__name__
__module____qualname__rb   propertyrf   rn   rp   ry   r   r   rv   classmethodr   staticmethodr   r   r   rX   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   r%  r*  r,  r4  r   r5  r7  rC  rE  rH  rP  rQ  rY  r\  r]  r^  rl  rt  r   rx  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  ru   r  r`   r`   r`   ra   rP   n   s   

#

 	LrP   )P
__future__r   typingr   r   r   r   r   r   r	   r  r   narwhals._compliantr
    narwhals._pandas_like.series_catr   narwhals._pandas_like.series_dtr   !narwhals._pandas_like.series_listr    narwhals._pandas_like.series_strr   #narwhals._pandas_like.series_structr   narwhals._pandas_like.utilsr   r   r   r   r   r   r   r   narwhals.dependenciesr   r   narwhals.exceptionsr   narwhals.utilsr   r    r!   r"   r#   typesr$   r%   pandaspdr  r  typing_extensionsr&   r'   narwhals._arrow.typingr(   r   r*   ro   r,   narwhals.dtypesr-   narwhals.typingr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r  r  rP   r`   r`   r`   ra   <module>   s   	
	
