o
    Lh                     @  s  U d dl mZ d dlZd dlmZmZmZmZ d dlZ	d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ erd dl,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4Z5d dl6Z7d dl8Z9d dl:m;Z;m<Z<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dl#mFZFmGZG d dlHmIZI d dlJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZW dZXdeYd< i dddddd d!d d"d#d$d#d%d&d'd&d(d)d*d)d+d,d-d,d.d/d0d/d1d2d3d2d4d5d5d6d6d7ZZi dd5dd5dd5d!d5d"d5d$d5d%d5d'd5d(d5d*d5d+d5d-d5d.d5d0d5d1d5d3d5d4d5d5d6d6d7Z[G d8d9 d9ee Z\G d:d; d;ed< Z]dS )=    )annotationsN)TYPE_CHECKINGAnyLiteralcast)EagerSeriesEagerSeriesHistPandasLikeSeriesCatNamespace!PandasLikeSeriesDateTimeNamespace)PandasLikeSeriesListNamespacePandasLikeSeriesStringNamespace)PandasLikeSeriesStructNamespace)	align_and_extract_nativeget_dtype_backendimport_array_modulenarwhals_to_native_dtypenative_to_narwhals_dtypeobject_native_to_narwhals_dtyperenameselect_columns_by_name	set_index)assert_never)Implementation
is_list_ofparse_version)is_numpy_array_1dis_pandas_like_series)InvalidOperationError)HashableIterableIteratorMappingSequence)
ModuleType)Self	TypeAliasTypeIs)ChunkedArrayAny)HistDataPandasLikeDataFramePandasLikeNamespace)Version_LimitedContext)DType)ClosedIntervalFillNullStrategyInto1DArray	IntoDTypeModeKeepStrategyNonNestedLiteralNumericLiteral
RankMethodRollingInterpolationMethodSizedMultiIndexSelectorTemporalLiteral_1DArray_SliceIndexz%HistData[pd.Series[Any], list[float]]r(   PandasHistData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                   @  s  e Zd Zdpd	d
ZedqddZdrddZdsddZdtddZduddZ	dvddZ
dddwd"d#Zed$d%d%d&dxd0d1Zedyd4d5Zedzd6d7Zed{d9d:Zed|d<d=Zed}d>d?Zed~dAdBZedCdD ZddNdOZddSdTZddUdVZddXdYZdd[d\Zdd^d_ZddadbZddgdhZddjdkZddldmZddndoZ ddpdqZ!ddsdtZ"ddvdwZ#ddxdyZ$ddzd{Z%dd|d}Z&dd~dZ'dddZ(dddZ)dddZ*dddZ+dddZ,dddZ-dddZ.dddZ/dddZ0dddZ1dddZ2dddZ3dddZ4dddZ5dddZ6dddZ7dddZ8dddZ9dddZ:dddZ;dddZ<dddZ=dqddZ>dqddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddZGdddÄZHdddńZIdddǄZJddd΄ZKdddЄZLddd҄ZMdddԄZNdddڄZOddd܄ZPddd߄ZQdddddZRdddZSdddZTdddZUdddZVdddZWdddZXdd%dddd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d3d4Zkdd5d6Zldd7d8Zmdd9d:Zndd;d<Zodd?d@ZpddAdBZqddCdDZrddEdFZsddHdIZtddJdKZuddLdMZvddPdQZwddUdVZxddXdYZydd[d\Zzdd]d^Z{dd_d`Z|eddbdcZ}eddedfZ~eddhdiZeddkdlZeddndoZd%S (  PandasLikeSeriesnative_seriesr   implementationr   versionr0   returnNonec                C  s$   |j | _|| _|| _|| _d| _d S )NF)name_name_native_series_implementation_version
_broadcast)selfrV   rW   rX    rb   ]/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_pandas_like/series.py__init__o   s
   
zPandasLikeSeries.__init__c                 C     | j S N)r]   ra   rb   rb   rc   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ra   msgrb   rb   rc   __native_namespace__   s   

z%PandasLikeSeries.__native_namespace__r/   c                 C  s   ddl m} || j| jS )Nr   r.   )narwhals._pandas_like.namespacer/   r^   r_   )ra   r/   rb   rb   rc   __narwhals_namespace__   s   z'PandasLikeSeries.__narwhals_namespace__rows'SizedMultiIndexSelector[pd.Series[Any]]r'   c                 C  s(   t |tr	t|n|}| | jj| S rf   )
isinstancetuplelist_with_nativerh   ilocra   rs   rb   rb   rc   _gather   s   zPandasLikeSeries._gather_SliceIndex | rangec                 C  s    |  | jjt|j|j|j S rf   )rx   rh   ry   slicestartstopsteprz   rb   rb   rc   _gather_slice   s   zPandasLikeSeries._gather_slicec                 C  s   | j | j| j|dS N)rW   rX   )	__class__rh   r^   )ra   rX   rb   rb   rc   _with_version   s   
zPandasLikeSeries._with_versionFpreserve_broadcastseriesr   boolc                C  s$   | j || j| jd}|r| j|_|S r   )r   r^   r_   r`   )ra   r   r   resultrb   rb   rc   rx      s   
zPandasLikeSeries._with_native N)r[   dtypeindexdataIterable[Any]contextr1   r[   strr   IntoDType | Noner   c          
      C  sx   |j }|j}| }i }	|rt|d |||	d< n| r d|	d< |d ur,t|r,||	d< | j|j|fd|i|	|dS )Nr   Fcopyr   r[   r   )r^   r_   rk   r   	is_pandaslenfrom_nativeSeries)
clsr   r   r[   r   r   rW   rX   nskwdsrb   rb   rc   from_iterable   s   
 zPandasLikeSeries.from_iterableobjTypeIs[Any]c                 C     t | S rf   )r   )r   rb   rb   rc   
_is_native      zPandasLikeSeries._is_nativec               C  s   | ||j |jdS r   )r^   r_   )r   r   r   rb   rb   rc   r      s   zPandasLikeSeries.from_nativer5   c               C  s8   |j }t|r	|n|g}| j|dd}| j||dS )Nr   r[   r   )r^   r   rk   r   r   )r   r   r   rW   arrrh   rb   rb   rc   
from_numpy   s   zPandasLikeSeries.from_numpySequence[Self]c           
      G  s   |d   j}dd |D }t|}||| jj}g }|D ]6}|jr9||jjd ||j|jjd}|	|}	n|jj|urNt
|j||jd}|	|}	n|}	||	 q|S )Nr   c                 S  s   g | ]}t |qS rb   )r   ).0srb   rb   rc   
<listcomp>   s    z:PandasLikeSeries._align_full_broadcast.<locals>.<listcomp>)r   r[   r   rW   )rp   r   maxr   rh   r`   ry   r[   r   rx   r   r^   append)
r   r   r   lengths
max_lengthidx	reindexedr   rh   	compliantrb   rb   rc   _align_full_broadcast   s"   z&PandasLikeSeries._align_full_broadcastc                 C  re   rf   )r\   rg   rb   rb   rc   r[      ri   zPandasLikeSeries.namer2   c                 C  s2   | j j}|dkrt|| j| jS t| j | j| jS )Nobject)rh   r   r   r_   r^   r   )ra   native_dtyperb   rb   rc   r      s   zPandasLikeSeries.dtypec                 C  s   t rdd l}|S t| jS Nr   )r   numpyr   r^   )ra   nprb   rb   rc   _array_funcs   s   
zPandasLikeSeries._array_funcs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)
rh   isnar^   r   CUDFanyewmmeanNotImplementedErrorrx   )ra   r   r   r   r   r   r   r   sermask_nar   ro   rb   rb   rc   ewm_mean   s&   

zPandasLikeSeries.ewm_meanindicesint | Sequence[int]valuesc                 C  sP   t || jrt|j| jj| | jd}| jjdd}||j|< | j|_| 	|S )Nr   T)deep)
ru   r   r   rh   r   r^   r   ry   r[   rx   )ra   r   r   r   rb   rb   rc   scatter  s   


zPandasLikeSeries.scatterc                 C  s   | j }| j}t|j| jj|j |d}|tju r"ttdk r"|	 }d}|tju r7||k r7|| jj
|jj< d S || jj
|j< d S )Nr   )   )   r   )r^   _backend_versionr   rh   r   r   PANDASr   r   r   ry   r   )ra   r   r   rW   backend_versionvalues_nativemin_pd_versionrb   rb   rc   _scatter_in_place   s   z"PandasLikeSeries._scatter_in_placer6   c                 C  s6   t |t| jj| j| j| jd}| j| j|ddS )N)dtype_backendrW   rX   Tr   )r   r   rh   r   r^   r_   rx   astype)ra   r   pd_dtyperb   rb   rc   r   1  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   
ValueErrorrh   ry   )ra   r   ro   rb   rb   rc   item:  s   zPandasLikeSeries.itemr-   c                 C  s&   ddl m} || j | j| jddS )Nr   r,   F)rW   rX   validate_column_names)narwhals._pandas_like.dataframer-   rh   to_framer^   r_   )ra   r-   rb   rb   rc   r   F  s   zPandasLikeSeries.to_frame	list[Any]c                 C  s&   | j  }|r| j  S | j S rf   )r^   is_cudfrh   to_arrow	to_pylistto_list)ra   r   rb   rb   rc   r   P  s   
zPandasLikeSeries.to_listlower_boundupper_boundclosedr3   c                 C  s   | j }t| |\}}t| |\}}|dkr ||||@ }n1|dkr/||||@ }n"|dkr>||||@ }n|dkrM||||@ }nt| | ||j	S )Nleftrightnoneboth)
rh   r   geltgtler   rx   aliasr[   )ra   r   r   r   r   _resrb   rb   rc   
is_betweenT  s   zPandasLikeSeries.is_betweenotherc                 C     |  | j|S rf   )rx   rh   isinra   r   rb   rb   rc   is_inf     zPandasLikeSeries.is_inc                 C  s>   | j }t|}| j|}|j||j|jdj| }| |S )N)r[   r   )	rh   r   r   aranger   r[   r   locrx   )ra   r   sizer   r   rb   rb   rc   arg_truei  s
   
zPandasLikeSeries.arg_truec                 C  
   | j  S rf   )rh   argminrg   rb   rb   rc   arg_minp     
zPandasLikeSeries.arg_minc                 C  r   rf   )rh   argmaxrg   rb   rb   rc   arg_maxs  r  zPandasLikeSeries.arg_max	predicatec                 C  s8   t |tst| |\}}n|}| | jj| | jS rf   )r   r   r   rx   rh   r   r   r[   )ra   r  r   other_nativerb   rb   rc   filterx  s   
zPandasLikeSeries.filterr   c                 C  s$   t | |\}}| ||k| jS rf   r   rx   r   r[   ra   r   r   rb   rb   rc   __eq__     zPandasLikeSeries.__eq__c                 C  s$   t | |\}}| ||k| jS rf   r	  r
  rb   rb   rc   __ne__  r  zPandasLikeSeries.__ne__c                 C  s$   t | |\}}| ||k| jS rf   r	  r
  rb   rb   rc   __ge__  r  zPandasLikeSeries.__ge__c                 C  s$   t | |\}}| ||k| jS rf   r	  r
  rb   rb   rc   __gt__  r  zPandasLikeSeries.__gt__c                 C  s$   t | |\}}| ||k| jS rf   r	  r
  rb   rb   rc   __le__  r  zPandasLikeSeries.__le__c                 C  s$   t | |\}}| ||k | jS rf   r	  r
  rb   rb   rc   __lt__  r  zPandasLikeSeries.__lt__c                 C  s$   t | |\}}| ||@ | jS rf   r	  r
  rb   rb   rc   __and__  r  zPandasLikeSeries.__and__c                 C  0   t | |\}}td|}| ||| jS Npd.Series[Any])r   r   rx   r  r   r[   r
  rb   rb   rc   __rand__     
zPandasLikeSeries.__rand__c                 C  s$   t | |\}}| ||B | jS rf   r	  r
  rb   rb   rc   __or__  r  zPandasLikeSeries.__or__c                 C  r  r  )r   r   rx   r  r   r[   r
  rb   rb   rc   __ror__  r  zPandasLikeSeries.__ror__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __add__  r  zPandasLikeSeries.__add__c                 C  (   t | |\}}| | j|| jS rf   )r   rx   rh   __radd__r   r[   ra   r   r   r  rb   rb   rc   r       zPandasLikeSeries.__radd__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __sub__  r  zPandasLikeSeries.__sub__c                 C  r  rf   )r   rx   rh   __rsub__r   r[   r  rb   rb   rc   r     r  zPandasLikeSeries.__rsub__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __mul__  r  zPandasLikeSeries.__mul__c                 C  r  rf   )r   rx   rh   __rmul__r   r[   r  rb   rb   rc   r"    r  zPandasLikeSeries.__rmul__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __truediv__  r  zPandasLikeSeries.__truediv__c                 C  r  rf   )r   rx   rh   __rtruediv__r   r[   r  rb   rb   rc   r$    r  zPandasLikeSeries.__rtruediv__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __floordiv__  r  zPandasLikeSeries.__floordiv__c                 C  r  rf   )r   rx   rh   __rfloordiv__r   r[   r  rb   rb   rc   r&    r  zPandasLikeSeries.__rfloordiv__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __pow__  r  zPandasLikeSeries.__pow__c                 C  r  rf   )r   rx   rh   __rpow__r   r[   r  rb   rb   rc   r(    r  zPandasLikeSeries.__rpow__c                 C  s$   t | |\}}| || | jS rf   r	  r
  rb   rb   rc   __mod__  r  zPandasLikeSeries.__mod__c                 C  r  rf   )r   rx   rh   __rmod__r   r[   r  rb   rb   rc   r*    r  zPandasLikeSeries.__rmod__c                 C  s   |  | j S rf   )rx   rh   rg   rb   rb   rc   
__invert__     zPandasLikeSeries.__invert__c                 C  r   rf   )rh   r   rg   rb   rb   rc   r     r  zPandasLikeSeries.anyc                 C  r   rf   )rh   allrg   rb   rb   rc   r-    r  zPandasLikeSeries.allc                 C  r   rf   )rh   minrg   rb   rb   rc   r.    r  zPandasLikeSeries.minc                 C  r   rf   )rh   r   rg   rb   rb   rc   r     r  zPandasLikeSeries.maxfloatc                 C  r   rf   )rh   sumrg   rb   rb   rc   r0    r  zPandasLikeSeries.sumc                 C  r   rf   )rh   countrg   rb   rb   rc   r1    r  zPandasLikeSeries.countc                 C  r   rf   )rh   r   rg   rb   rb   rc   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    rh   medianrn   rb   rb   rc   r3    s   

zPandasLikeSeries.medianddofc                C     | j j|dS Nr4  )rh   stdra   r4  rb   rb   rc   r8    r,  zPandasLikeSeries.stdc                C  r5  r6  )rh   varr9  rb   rb   rc   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      ?rh   dropnar   r/  r   )ra   ser_not_nullmm2m3rb   rb   rc   skew	  s   
zPandasLikeSeries.skewc                 C  sr   | j  }t|dkrd S t|dkrtdS ||  }|d  }|d  }|dkr5||d  d S tdS )Nr   r   r;  r      g      @r=  )ra   r?  r@  rA  m4rb   rb   rc   kurtosis  s   
 zPandasLikeSeries.kurtosisc                 C  s
   t | jS rf   )r   rh   rg   rb   rb   rc   r   !  r  zPandasLikeSeries.lenc                 C  s   | j | j ddS )NTr   )rx   rh   r   rg   rb   rb   rc   is_null&     zPandasLikeSeries.is_nullc                 C  s8   | j }| j sd| j d}t|| j||kddS )Nz3`.is_nan` only supported for numeric dtype and not z, did you mean `.is_null`?Tr   )rh   r   r2  r    rx   )ra   r   ro   rb   rb   rc   is_nan)  s
   
zPandasLikeSeries.is_nanvalueSelf | NonNestedLiteralstrategyFillNullStrategy | Nonelimitc           	      C  s   | j }| jtju r| jdk rddini }t Q tjddtd |d ur<t	| |\}}| j
|jdd|i|dd	}n%| j
|d
krL|jdd|i|n	|jdd|i|dd	}W d    |S W d    |S 1 slw   Y  |S )Nr<  downcastFignorez&The 'downcast' keyword .*is deprecated)categoryrJ  Tr   forwardrN  rb   )rh   r^   r   r   r   warningscatch_warningsfilterwarningsFutureWarningr   rx   fillnaffillbfill)	ra   rJ  rL  rN  r   kwargsr   native_valueres_serrb   rb   rc   	fill_null1  s8   



zPandasLikeSeries.fill_nullc                 C  sh   | j  sd| j  d}t|| j}|d u r|jj jn|}||k}|jddd | j|||ddS )Nz5`.fill_nan` only supported for numeric dtype and not z, did you mean `.fill_null`?FT)inplacer   )	r   r2  r    rh   arrayna_valuerX  rx   mask)ra   rJ  ro   r   fillrb  rb   rb   rc   fill_nanP  s   
zPandasLikeSeries.fill_nanc                 C     |  | j S rf   )rx   rh   r>  rg   rb   rb   rc   
drop_nulls\     zPandasLikeSeries.drop_nullsc                 C  s   | j jddS )NF)r>  )rh   nuniquerg   rb   rb   rc   n_unique_  r,  zPandasLikeSeries.n_uniquenfractionwith_replacementseedc                C  s   |  | jj||||dS )N)rj  fracreplacerandom_state)rx   rh   sample)ra   rj  rk  rl  rm  rb   rb   rc   rq  b  s
   zPandasLikeSeries.samplec                 C  re  rf   )rx   rh   absrg   rb   rb   rc   rr  p  rg  zPandasLikeSeries.absreversec                C  >   |s	| j jddn| j d d d jddd d d }| |S NT)skipna)rh   cumsumrx   ra   rs  r   rb   rb   rc   cum_sums  
    
zPandasLikeSeries.cum_sumTmaintain_orderr}  c                C  s    |  t| j| j | jdS )zuPandas always maintains order, as per its docstring.

        > Uniques are returned in order of appearance.
        r   )rx   rl   rh   uniquer[   )ra   r}  rb   rb   rc   r~  {  s    zPandasLikeSeries.uniquec                 C  re  rf   )rx   rh   diffrg   rb   rb   rc   r    rg  zPandasLikeSeries.diffc                 C  r   rf   )rx   rh   shiftra   rj  rb   rb   rc   r    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nd }|  }|| j |||j	||di}| 
| j j|| j dd| | j }	|	  |   krhd| |   |	 @ 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: Fr|  )r[   r   rh   r   r^   r   r_   rp   	DataFramer   rx   r   merger   rG  r0  r  r~  r   r   )ra   r  r  r  tmp_namer   r   	namespacer   r   ro   rb   rb   rc   replace_strict  s0   "zPandasLikeSeries.replace_strict
descending
nulls_lastc                C  s,   |rdnd}|  | jj| |d| jS )Nlastfirst)	ascendingna_position)rx   rh   sort_valuesr   r[   )ra   r  r  r  rb   rb   rc   sort  s   zPandasLikeSeries.sortstr | Hashablec                 C  s*   || j kr| jt| j|| jdddS | S )Nr   Tr   )r[   rx   r   rh   r^   )ra   r[   rb   rb   rc   r     s   
zPandasLikeSeries.aliasr   bool | Noner>   c                C  s   | j ||dS )N)r   r   )to_numpy)ra   r   r   rb   rb   rc   	__array__  s   zPandasLikeSeries.__array__)r   c                C  s   | j j}t| j|jr| jjd ur| jdjd j	}n| j	}|
  }d|p-| j i}|rJt|jtv rJ|dtdi |pItt|j }|s\t|jtv r\|p[tt|j }|jdd|i|S )NUTCr   ra  r;  r   rb   )r_   dtypesru   r   Datetime	time_zonedtconvert_time_zonereplace_time_zonerh   r   r   r^   r   r   PANDAS_TO_NUMPY_DTYPE_MISSINGupdater/   PANDAS_TO_NUMPY_DTYPE_NO_MISSINGr  )ra   r   r   r  r   has_missingr[  rb   rb   rc   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   rh   r   	to_pandasMODIN
_to_pandasrm   rn   rb   rb   rc   r    s   

zPandasLikeSeries.to_pandas	pl.Seriesc                 C  s   dd l }||  S r   )polarsfrom_pandasr  )ra   plrb   rb   rc   	to_polars  s   zPandasLikeSeries.to_polarsc                 C     |  | jjdd | jS )NFkeeprx   rh   
duplicatedr   r[   rg   rb   rb   rc   	is_unique     zPandasLikeSeries.is_uniquec                 C  s   | j   S rf   )rh   r   r0  rg   rb   rb   rc   
null_count  r,  zPandasLikeSeries.null_countc                 C  r  )Nr  r  r  rg   rb   rb   rc   is_first_distinct  r  z"PandasLikeSeries.is_first_distinctc                 C  r  )Nr  r  r  rg   rb   rb   rc   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 )ru   r   rl   	TypeErrorrh   is_monotonic_decreasingis_monotonic_increasing)ra   r  ro   rb   rb   rc   	is_sorted  s   
zPandasLikeSeries.is_sortedr  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   
proportionr1  F)r>  r  r  )r  r   )	r   r-   r\   rh   value_countsreset_indexcolumnsr  r   )	ra   r  r  r[   r  r-   index_name_value_name_	val_countrb   rb   rc   r    s   
zPandasLikeSeries.value_countsquantileinterpolationr;   c                 C  s   | j j||dS )N)qr  )rh   r  )ra   r  r  rb   rb   rc   r    s   zPandasLikeSeries.quantilerb  c                 C  s8   | j }t| |\}}t| |\}}|||}| |S rf   )rh   r   whererx   )ra   rb  r   r   r   r   rb   rb   rc   zip_with
  s
   
zPandasLikeSeries.zip_withc                 C  r   rf   )rx   rh   headr  rb   rb   rc   r    r   zPandasLikeSeries.headc                 C  r   rf   )rx   rh   tailr  rb   rb   rc   r    r   zPandasLikeSeries.taildecimalsc                 C  s   |  | jj|dS )N)r  )rx   rh   round)ra   r  rb   rb   rc   r    rH  zPandasLikeSeries.round	separator
drop_firstc                C  s   ddl m} |  }| j}| jrt| jnd}| | d}|  }|j|||||dd}	|rMt	|	j
^ }
}|g|
}tt|	|| j||i| jd}	|j|	| dS )	Nr   r,   r   nullrH   )prefix
prefix_sepr  dummy_nar   )r  rW   r   )r   r-   rp   rh   r\   r   r   r   get_dummiesrw   r  r   r   r^   r   )ra   r  r  r-   plxr   r[   null_col_pl	has_nullsr   colsnull_col_pdoutput_orderrb   rb   rc   
to_dummies  s.   	
zPandasLikeSeries.to_dummiesoffsetc                 C  s   |  | jj|d | S rf   )rx   rh   ry   )ra   rj  r  rb   rb   rc   gather_every7  s   zPandasLikeSeries.gather_every.Self | NumericLiteral | TemporalLiteral | Nonec           	      C  s   |d ur	t | |nd\}}|d urt | |nd\}}| j}| r%ddini }| j}| sL| |r=|||k|}d }| |rL|||k|}d }| |j||fi |S )N)NNaxisr   )	r   r^   is_modinrh   r   r   r  rx   clip)	ra   r   r   r   lowerupperimplr[  r   rb   rb   rc   r  :  s&   



zPandasLikeSeries.clippa.Array[Any]c                 C  s,   | j tju r| j S dd l}|j| jS r   )r^   r   r   rh   r   pyarrowArrayr  )ra   parb   rb   rc   r   Z  s   
zPandasLikeSeries.to_arrowr  r7   c                C  s0   | j  }| j|_| |dkr|dS |S )Nr   r   )rh   moder[   rx   r  )ra   r  r   rb   rb   rc   r  b  s   
zPandasLikeSeries.modec                C  s:   | j   }|s| nt| |  | d }| |S Nr   )rh   r   rx  r   rx   )ra   rs  not_na_seriesr   rb   rb   rc   	cum_countg  s   

zPandasLikeSeries.cum_countc                C  rt  ru  )rh   cumminrx   ry  rb   rb   rc   cum_minp  r{  zPandasLikeSeries.cum_minc                C  rt  ru  )rh   cummaxrx   ry  rb   rb   rc   cum_maxx  r{  zPandasLikeSeries.cum_maxc                C  rt  ru  )rh   cumprodrx   ry  rb   rb   rc   cum_prod  r{  zPandasLikeSeries.cum_prodwindow_sizecenterc                C      | j j|||d }| |S Nwindowmin_periodsr  )rh   rollingr0  rx   ra   r  r   r  r   rb   rb   rc   rolling_sum     
zPandasLikeSeries.rolling_sumc                C  r  r  )rh   r  r   rx   r  rb   rb   rc   rolling_mean  r  zPandasLikeSeries.rolling_meanc                C  $   | j j|||dj|d}| |S Nr  r7  )rh   r  r:  rx   ra   r  r   r  r4  r   rb   rb   rc   rolling_var     
zPandasLikeSeries.rolling_varc                C  r   r  )rh   r  r8  rx   r  rb   rb   rc   rolling_std  r  zPandasLikeSeries.rolling_stdIterator[Any]c                 c  s    | j  E d H  d S rf   )rh   __iter__rg   rb   rb   rc   r    s   zPandasLikeSeries.__iter__c                 C  s$   |d u r| j   S | j |k S rf   )rh   r   r   r   rb   rb   rc   __contains__  s   $zPandasLikeSeries.__contains__c                 C  s$   | j }| |tdk|tdk @ S )Nz-infinf)rh   rx   r/  )ra   r   rb   rb   rc   	is_finite  s   zPandasLikeSeries.is_finitemethodr:   c          	      C  s   |dkrdn|}| j }| jtju r`| jdk r`t| jj| jdkr`| j r`| 	  }
 r`| d}|  }|  |j||j}| ||j|d| ddjd d d	f | j S | | jj|d| ddS )
Nordinalr  rO  numpy_nullable_is_nullr  F)r  	na_optionr  pctr   )r[   r^   r   r   r   r   rh   r   
is_integerrG  r   rr   r   with_columns_expr_from_seriesr   rx   groupbyrankry   )	ra   r  r  	pd_methodr[   	null_mask	mask_namer  dfrb   rb   rc   r    sF   

	

zPandasLikeSeries.rankbinslist[float]include_breakpointc                C     t j| |d| S N)r  )_PandasHistfrom_series	with_binsr   )ra   r  r  rb   rb   rc   hist_from_bins     zPandasLikeSeries.hist_from_bins	bin_countc                C  r  r  )r   r!  with_bin_countr   )ra   r%  r  rb   rb   rc   hist_from_bin_count  r$  z$PandasLikeSeries.hist_from_bin_countbasec                 C  s   | j }t|}| j}t|j|ddkrGdd lm} ddlm} |j	j
}td|||}||j| j}	t|	d| j| j}
|||
|j|jd}n| j}|||| }| ra|||j|jdn|}| |S Nr   r  r   )r   r*   )r   r   r[   )r   r[   )rh   rl   r^   r   r   pyarrow.computecomputenarwhals._arrow.utilsr   r`  	_pa_arrayr   logbr_   r   r   r[   r   logr   rx   )ra   r(  rh   
native_clsrW   pcr   ca
result_arrnw_dtype	out_dtyperesult_nativearray_funcsrb   rb   rc   r/    s,   
zPandasLikeSeries.logc                 C  s   | j }t|}| j}t|j|ddkrFdd lm} ddlm} |j	j
}td||}||j| j}t|d| j| j}	|||	|j|jd}
n| j|}| rY|||j|jdn|}
| |
S r)  )rh   rl   r^   r   r   r*  r+  r,  r   r`  r-  r   expr_   r   r   r[   r   r   rx   )ra   rh   r0  rW   r1  r   r2  r3  r4  r5  r6  rb   rb   rc   r8    s*   
zPandasLikeSeries.expc                 C  s   |  | jdS )N      ?)rx   rh   powrg   rb   rb   rc   sqrt   r   zPandasLikeSeries.sqrtr   c                 C  r   rf   r   rg   rb   rb   rc   r   #  r   zPandasLikeSeries.strr   c                 C  r   rf   r   rg   rb   rb   rc   r  '  r   zPandasLikeSeries.dtr
   c                 C  r   rf   r	   rg   rb   rb   rc   cat+  r   zPandasLikeSeries.catr   c                 C      t | jdsd}t|t| S )Nrw   z>Series must be of PyArrow List type to support list namespace.)hasattrrh   r  r   rn   rb   rb   rc   rw   /     zPandasLikeSeries.listr   c                 C  r=  )NstructzBSeries must be of PyArrow Struct type to support struct namespace.)r>  rh   r  r   rn   rb   rb   rc   r@  6  r?  zPandasLikeSeries.struct)rV   r   rW   r   rX   r0   rY   rZ   )rY   r   )rY   r&   )rY   r/   )rs   rt   rY   r'   )rs   r|   rY   r'   )rX   r0   rY   r'   )r   r   r   r   rY   r'   )r   r   r   r1   r[   r   r   r   r   r   rY   r'   )r   r   rY   r   )r   r   r   r1   rY   r'   )r   r5   r   r1   rY   r'   )r   r'   rY   r   )rY   r   )rY   r2   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rY   r'   )r   r   r   r   rY   r'   )r   r'   r   r'   rY   rZ   )r   r6   rY   r'   )r   r   rY   r   rY   r-   )rY   r   )r   r   r   r   r   r3   rY   r'   )r   r   rY   r'   )rY   r'   )rY   r   )r  r   rY   r'   )r   r   rY   r'   rY   r   )rY   r/  )r4  r   rY   r/  )rY   r   )rJ  rK  rL  rM  rN  r   rY   r'   )rJ  r   rY   r'   )
rj  r   rk  r   rl  r   rm  r   rY   r'   )rs  r   rY   r'   )r}  r   rY   r'   )rj  r   rY   r'   )r  r  r  r  r  r   rY   rU   )r  r   r  r   rY   rU   )r[   r  rY   r'   )r   r   r   r  rY   r>   rf   )rY   r  )rY   r  )r  r   rY   r   )
r  r   r  r   r[   r  r  r   rY   r-   )r  r/  r  r;   rY   r/  )rb  r   r   r   rY   r'   )r  r   rY   r'   )r  r   r  r   rY   r-   )rj  r   r  r   rY   r'   )r   r  r   r  rY   r'   )rY   r  )r  r7   rY   r'   )r  r   r   r   r  r   rY   r'   )
r  r   r   r   r  r   r4  r   rY   r'   )rY   r  )r   r   rY   r   )r  r:   r  r   rY   r'   )r  r  r  r   rY   r-   )r%  r   r  r   rY   r-   )r(  r/  rY   r'   )rY   r   )rY   r   )rY   r
   )rY   r   )rY   r   )__name__
__module____qualname__rd   propertyrh   rp   rr   r{   r   r   rx   classmethodr   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-  r.  r   r0  r1  r   r3  r8  r:  rC  rF  r   rG  rI  r^  rd  rf  ri  rq  rr  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  r   r  r  r  r  r  r  r  r  r  r  r  r
  r  r#  r'  r/  r8  r;  r   r  r<  rw   r@  rb   rb   rb   rc   rU   n   s   

	

	 	%		rU   c                   @  st   e Zd ZU ded< d.ddZd/dd	Zd0ddZd1ddZdddd2ddZddd3d&d'Z	d4d)d*Z
d5d,d-ZdS )6r   rU   _seriesrY   r-   c                 C  s.   | j  jj}| j  j}||| j| j dS )Nr   )rI  rr   
_dataframer   rp   r  _data)ra   r   r  rb   rb   rc   r   A  s   z_PandasHist.to_framer   c                 C  s   | j  dk S r  )rI  r1  rg   rb   rb   rc   is_empty_seriesG  r,  z_PandasHist.is_empty_seriesargint | list[float]r@   c                C  s(   |  |}| jr| ||dS d|iS )N
breakpointr1  r1  )_zeros_breakpoint_calculate_breakpoint)ra   rM  r1  rb   rb   rc   series_emptyL  s   
z_PandasHist.series_emptyr>   c                C  s,   | j jj}t|tr||S |t|d S r  )rI  r   zerosru   r   r   )ra   rM  rU  rb   rb   rc   rQ  R  s   
"z_PandasHist._zerosNr   )labelsr   breakslist[float] | _1DArrayrV  Sequence[str] | Noner   Literal['left', 'right']r  c                C  s$   | j  j}|| j||dk|ddS )Nr   T)r  r   rV  include_lowest)rI  rp   cutrh   )ra   rW  rV  r   r\  rb   rb   rc   _cutW  s   z_PandasHist._cutr   )r   r~   r/  endnum_samplesr   Literal['both', 'none']c                C  s   | j jj||||dkdS )Nr   )r~   r   numendpoint)rI  r   linspace)ra   r~   r^  r_  r   rb   rb   rc   _linear_spaceh  s   z_PandasHist._linear_spacer%  c                 C  s@   | j  | j  }}||kr|d8 }|d7 }| |||d S )z6Prepare bins for histogram calculation from bin_count.r9  r   )rh   r.  r   rd  )ra   r%  r  r  rb   rb   rc   _calculate_binst  s
   z_PandasHist._calculate_binsr  c                 C  sT   |  |}|jdddj|jjdd}|jddd | jr&|dd  |dS d	|iS )
NTF)r>  r  r   )
fill_value)dropr_  r   rO  r1  )r]  r  reindexr<  
categoriesr  rR  )ra   r  ri  r1  rb   rb   rc   _calculate_hist|  s   
z_PandasHist._calculate_histrA  rB  )rM  rN  rY   r@   )rM  rN  rY   r>   )rW  rX  rV  rY  r   rZ  rY   r  )
r~   r/  r^  r/  r_  r   r   r`  rY   r>   )r%  r   rY   r>   )r  rX  rY   r@   )rC  rD  rE  __annotations__r   rL  rT  rQ  r]  rd  re  rj  rb   rb   rb   rc   r   >  s   
 



	
r   )r  r  )^
__future__r   rT  typingr   r   r   r   r   r   narwhals._compliantr   r    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   r   narwhals._typing_compatr   narwhals._utilsr   r   r   narwhals.dependenciesr   r   narwhals.exceptionsr    collections.abcr!   r"   r#   r$   r%   typesr&   pandaspdr  r  r  r  typing_extensionsr'   r(   r)   narwhals._arrow.typingr*   narwhals._compliant.seriesr+   r   r-   rq   r/   r0   r1   narwhals.dtypesr2   narwhals.typingr3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rk  r  r  rU   r   rb   rb   rb   rc   <module>   s    ,<	
	
       W