
    hT                   B   S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S S	KJ
r
  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SK"J#r#  S SK"J$r$  S SK"J%r%  S SK"J&r&  S SK"J'r'  S SK"J(r(  \(       ab  S SK)J*r*  S SK+r,S SK-r.S SK/J0r0  S S K1J2r2  S S!K3J4r4  S S"K5J6r6  S S#K5J7r7  S S$KJ8r8  S S%KJ9r9  S S&KJ:r:  S S'KJ;r;  S S(KJ<r<  S S)KJ=r=  S S*KJ>r>  S S+KJ?r?  S S,K"J@r@   " S- S.\\   5      rAg)/    )annotations)TYPE_CHECKING)Any)Callable)Generic)Iterator)Literal)Mapping)Sequence)overload)is_numpy_scalar)_validate_dtype)ComputeErrorSeriesCatNamespaceSeriesDateTimeNamespaceSeriesListNamespaceSeriesStringNamespaceSeriesStructNamespace)	to_native)IntoSeriesT)NonNestedLiteral)SingleIndexSelector)_validate_rolling_arguments)generate_repr)is_compliant_series)is_index_selector)parse_version)supports_arrow_c_stream)
ModuleTypeN)Self)
ArrowArray)CompliantSeries	DataFrame)MultiIndexSelector)DType)ClosedInterval)FillNullStrategy)NumericLiteral)
RankMethod)RollingInterpolationMethod)TemporalLiteral)_1DArray)Implementationc                  J   \ rS rSrSr\SS j5       r      SS jr\SS j5       rSSS jjr	\
SS j5       r\
SS	 j5       rSS
 jrSS jrSSS jjrSS jrSS jr\SS j5       rSS jrSS jrSS jrSS jrSS jrSS jr\SS j5       r\SS j5       rSSSSSSSS.               SS jjrSS jrSS jrSS jrSS  jrSS! jrSS" jrSS# jr SS$ jr!SS% jr"SS& jr#SS' jr$SS( jr%SS) jr&SS* jr'SS+.SS, jjr(SS+.SS- jjr)  S     SS. jjr*SS/ jr+SS0 jr,SS1 jr-SS2 jr.SS3.SS4 jjr/SS5.SS6 jjr0SS7 jr1SS8 jr2 SSSSS9.         SS: jjjr3SS; jr4SS< jr5 SSS=.       SS> jjjr6SSS?.SS@ jjr7SSA jr8SSB jr9   S       SSC jjr: S       SSD jjr;SSE jr<SSF jr=SSG jr>SSH jr?SSI jr@SSJ jrASSK jrBSSL jrCSSM jrDSSN jrESSO jrFSSP jrGSSQ jrHSSR jrISSS jrJSST jrKSSU jrLSSV jrMSSW jrNSSX jrOSSY jrPSSZ jrQSS[ jrRSS\ jrSSS] jrTSS^ jrUSS_ jrVSS` jrWSSa jrXSSb jrYSSc jrZSSd jr[SSe jr\SSf jr]SSg jr^SSh jr_SSi.SSj jjr`SSSSSk.         SSl jjra      SSm jrbSSn jrcSSSo jjrdSSSp jjreSSSq jjrfSSSr jjrgSsSSt.     SSu jjrhSSSv jjriSSw jrjSSx jrkSSy jrlSS3.SSz jjrmSS3.SS{ jjrnSS3.SS| jjroSS3.SS} jjrpSSS~.       SS jjrqSSS~.       SS jjrrSSSS.         SS jjrsSSSS.         SS jjrtSS jruSS jrvSSSi.SS jjjrw SSSS.       SS jjjrx\SS j5       ry\SS j5       rz\SS j5       r{\SS j5       r|\SS j5       r}Sr~g)Series6   a  Narwhals Series, backed by a native series.

!!! warning
    This class is not meant to be instantiated directly - instead:

    - If the native object is a series from one of the supported backend (e.g.
        pandas.Series, polars.Series, pyarrow.ChunkedArray), you can use
        [`narwhals.from_native`][]:
        ```py
        narwhals.from_native(native_series, allow_series=True)
        narwhals.from_native(native_series, series_only=True)
        ```

    - If the object is a generic sequence (e.g. a list or a tuple of values), you can
        create a series via [`narwhals.new_series`][]:
        ```py
        narwhals.new_series(
            name=name,
            values=values,
            backend=narwhals.get_native_namespace(another_object),
        )
        ```
c                    SSK Jn  U$ )Nr   r(   )narwhals.dataframer)   )selfr)   s     A/var/www/html/env/lib/python3.13/site-packages/narwhals/series.py
_dataframeSeries._dataframeO   s    0    c                   X l         [        U5      (       a  UR                  5       U l        g S[	        U5       S3n[        U5      e)NzQExpected Polars Series or an object which implements `__narwhals_series__`, got: .)_levelr    __narwhals_series___compliant_seriestypeAssertionError)r9   serieslevelmsgs       r:   __init__Series.__init__U   sN     ?Dv&&**, " ffjkqfresstuC %%r=   c                .    U R                   R                  $ )aN  Return implementation of native Series.

This can be useful when you need to use special-casing for features outside of
Narwhals' scope - for example, when dealing with pandas' Period Dtype.

Returns:
    Implementation.

Examples:
    >>> import narwhals as nw
    >>> import pandas as pd

    >>> s_native = pd.Series([1, 2, 3])
    >>> s = nw.from_native(s_native, series_only=True)

    >>> s.implementation
    <Implementation.PANDAS: 1>

    >>> s.implementation.is_pandas()
    True

    >>> s.implementation.is_pandas_like()
    True

    >>> s.implementation.is_polars()
    False
)rB   _implementationr9   s    r:   implementationSeries.implementationd   s    : %%555r=   Nc                4    U R                   R                  XS9$ )N)dtypecopy)rB   	__array__)r9   rP   rQ   s      r:   rR   Series.__array__   s    %%//e/GGr=   c                    g N r9   idxs     r:   __getitem__Series.__getitem__       <?r=   c                    g rU   rV   rW   s     r:   rY   rZ      r[   r=   c                   [        U[        5      (       d*  [        U5      (       aW  UR                  R                  S;   a=  [        U[        5      (       d  [        U5      OUnU R
                  R                  U5      $ [        XR                  5       R                  5      (       a*  U R                  U R
                  R                  U5      5      n[        U5      (       d  S[        U5       S3n[        U5      e[        U[        5      (       a(  U R                  U R
                  UR
                     5      $ [        U[        5      (       a   eU R                  U R
                  U   5      $ )a<  Retrieve elements from the object using integer indexing or slicing.

Arguments:
    idx: The index, slice, or sequence of indices to retrieve.

        - If `idx` is an integer, a single element is returned.
        - If `idx` is a slice, a sequence of integers, or another Series
            (with integer values) a subset of the Series is returned.

Returns:
    A single element if `idx` is an integer, else a subset of the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(s_native, series_only=True)[0]
    1

    >>> nw.from_native(s_native, series_only=True)[
    ...     :2
    ... ].to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        1,
        2
      ]
    ]
>   iuz*Unexpected type for `Series.__getitem__`: z.

Hints:
- use `s.item` to select a single item.
- Use `s[indices]` to select rows positionally.
- Use `s.filter(mask)` to filter rows based on a boolean mask.)
isinstanceintr   rP   kindrB   itemr   	__class___with_compliant_with_nativer!   rC   	TypeErrorr5   )r9   rX   rG   s      r:   rY   rZ      s%   @ c3C  SYY^^z%A",S#"6"6#c(CC))..s33c>>+5566&&t'='='J'J3'OPC %%<T#YK HQ Q  C. c6""''(>(>s?T?T(UVVc3''''##D$:$:3$?@@r=   c                6    U R                   R                  5       $ rU   )rB   __native_namespace__rL   s    r:   ri   Series.__native_namespace__   s    %%::<<r=   c                t   U R                   R                  n[        U5      (       a  UR                  US9$  SSKn[        U5      S:  a  S[        U5       3n[        U5      eSSKJ	n  U" U R                  5       5      nUR                  US9$ ! [
         a  nS[        U5       3n[        U5      UeSnAff = f)al  Export a Series via the Arrow PyCapsule Interface.

Narwhals doesn't implement anything itself here:

- if the underlying series implements the interface, it'll return that
- else, it'll call `to_arrow` and then defer to PyArrow's implementation

See [PyCapsule Interface](https://arrow.apache.org/docs/dev/format/CDataInterface/PyCapsuleInterface.html)
for more.
)requested_schemar   NzOPyArrow>=16.0.0 is required for `Series.__arrow_c_stream__` for object of type )   r   )chunked_array)rB   nativer#   __arrow_c_stream__pyarrowModuleNotFoundErrorrC   r"   narwhals._arrow.utilsrn   to_arrow)r9   rl   native_seriespaexcrG   rn   cas           r:   rp   Series.__arrow_c_stream__   s     ..55"=11 33EU3VV	4  w&cdhivdwcxyC%c**74==?+$$6F$GG # 	4cdhivdwcxyC%c*3	4s   B 
B7B22B7c                .    U R                   R                  $ )a  Convert Narwhals series to native series.

Returns:
    Series of class that user started with.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (2,)
    Series: '' [i64]
    [
      1
      2
    ]
)rB   ro   rL   s    r:   r   Series.to_native   s    ( %%,,,r=   c                t    U R                  U R                  R                  XR                  U5      5      5      $ )a)  Set value(s) at given position(s).

Arguments:
    indices: Position(s) to set items at.
    values: Values to set.

Returns:
    A new Series with values set at given positions.

Note:
    This method always returns a new Series, without modifying the original one.
    Using this function in a for-loop is an anti-pattern, we recommend building
    up your positions and values beforehand and doing an update in one go.

    For example, instead of

    ```python
    for i in [1, 3, 2]:
        value = some_function(i)
        s = s.scatter(i, value)
    ```

    prefer

    ```python
    positions = [1, 3, 2]
    values = [some_function(x) for x in positions]
    s = s.scatter(positions, values)
    ```

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_native = pa.table({"a": [1, 2, 3], "b": [4, 5, 6]})
    >>> df_nw = nw.from_native(df_native)
    >>> df_nw.with_columns(df_nw["a"].scatter([0, 1], [999, 888])).to_native()
    pyarrow.Table
    a: int64
    b: int64
    ----
    a: [[999,888,3]]
    b: [[4,5,6]]
)re   rB   scatter_extract_native)r9   indicesvaluess      r:   r}   Series.scatter   s7    Z ##""**74H4H4PQ
 	
r=   c                8    U R                   R                  5       4$ )a  Get the shape of the Series.

Returns:
    A tuple containing the length of the Series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).shape
    (3,)
rB   lenrL   s    r:   shapeSeries.shape(  s     &&**,..r=   c                J    SSK Jn  [        X5      (       a  UR                  $ U$ )Nr   )r5   )narwhals.seriesr5   r`   rB   )r9   argr5   s      r:   r~   Series._extract_native9  s!    *c""(((
r=   c                4    U R                  XR                  S9$ )NrF   )rd   r@   )r9   rE   s     r:   re   Series._with_compliant@  s    ~~fKK~88r=   c                    U" U /UQ70 UD6$ )a  Pipe function call.

Returns:
    A new Series with the results of the piped function applied.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>> s_native = pl.Series([1, 2, 3])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.pipe(lambda x: x + 2).to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (3,)
    Series: '' [i64]
    [
        3
        4
        5
    ]
rV   )r9   functionargskwargss       r:   pipeSeries.pipeC  s    ( .t.v..r=   c                R    [        SU R                  5       R                  5       5      $ )NzNarwhals Series)r   r   __repr__rL   s    r:   r   Series.__repr__Y  s     .0@0I0I0KLLr=   c                ,    [        U R                  5      $ rU   r   rB   rL   s    r:   __len__Series.__len__\  s    4))**r=   c                ,    [        U R                  5      $ )aH  Return the number of elements in the Series.

Null values count towards the total.

Returns:
    The number of elements in the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, None]])
    >>> nw.from_native(s_native, series_only=True).len()
    3
r   rL   s    r:   r   
Series.len_  s      4))**r=   c                .    U R                   R                  $ )a  Get the data type of the Series.

Returns:
    The data type of the Series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).dtype
    Int64
)rB   rP   rL   s    r:   rP   Series.dtypeq  s     %%+++r=   c                .    U R                   R                  $ )a   Get the name of the Series.

Returns:
    The name of the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series("foo", [1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).name
    'foo'
)rB   namerL   s    r:   r   Series.name  s     %%***r=   T   Fcomspan	half_lifealphaadjustmin_samplesignore_nullsc               ^    U R                  U R                  R                  UUUUUUUS95      $ )ap  Compute exponentially-weighted moving average.

Arguments:
    com: Specify decay in terms of center of mass, $\gamma$, with <br> $\alpha = \frac{1}{1+\gamma}\forall\gamma\geq0$
    span: Specify decay in terms of span, $\theta$, with <br> $\alpha = \frac{2}{\theta + 1} \forall \theta \geq 1$
    half_life: Specify decay in terms of half-life, $\tau$, with <br> $\alpha = 1 - \exp \left\{ \frac{ -\ln(2) }{ \tau } \right\} \forall \tau > 0$
    alpha: Specify smoothing factor alpha directly, $0 < \alpha \leq 1$.
    adjust: Divide by decaying adjustment factor in beginning periods to account for imbalance in relative weightings

        - When `adjust=True` (the default) the EW function is calculated
          using weights $w_i = (1 - \alpha)^i$
        - When `adjust=False` the EW function is calculated recursively by
          $$
          y_0=x_0
          $$
          $$
          y_t = (1 - \alpha)y_{t - 1} + \alpha x_t
          $$
    min_samples: Minimum number of observations in window required to have a value (otherwise result is null).
    ignore_nulls: Ignore missing values when calculating weights.

        - When `ignore_nulls=False` (default), weights are based on absolute
          positions.
          For example, the weights of $x_0$ and $x_2$ used in
          calculating the final weighted average of $[x_0, None, x_2]$ are
          $(1-\alpha)^2$ and $1$ if `adjust=True`, and
          $(1-\alpha)^2$ and $\alpha$ if `adjust=False`.
        - When `ignore_nulls=True`, weights are based
          on relative positions. For example, the weights of
          $x_0$ and $x_2$ used in calculating the final weighted
          average of $[x_0, None, x_2]$ are
          $1-\alpha$ and $1$ if `adjust=True`,
          and $1-\alpha$ and $\alpha$ if `adjust=False`.

Returns:
    Series

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series(name="a", data=[1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).ewm_mean(
    ...     com=1, ignore_nulls=False
    ... ).to_native()
    0    1.000000
    1    1.666667
    2    2.428571
    Name: a, dtype: float64
r   )re   rB   ewm_mean)r9   r   r   r   r   r   r   r   s           r:   r   Series.ewm_mean  sF    z ##""++#') , 

 
	
r=   c                l    [        U5        U R                  U R                  R                  U5      5      $ )a  Cast between data types.

Arguments:
    dtype: Data type that the object will be cast into.

Returns:
    A new Series with the specified data type.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[True, False, True]])
    >>> nw.from_native(s_native, series_only=True).cast(nw.Int64).to_native()
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        1,
        0,
        1
      ]
    ]
)r   re   rB   cast)r9   rP   s     r:   r   Series.cast  s.    0 	##D$:$:$?$?$FGGr=   c                f    U R                  U R                  R                  5       U R                  S9$ )u  Convert to dataframe.

Returns:
    A DataFrame containing this Series as a single column.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series("a", [1, 2])
    >>> nw.from_native(s_native, series_only=True).to_frame().to_native()
    shape: (2, 1)
    ┌─────┐
    │ a   │
    │ --- │
    │ i64 │
    ╞═════╡
    │ 1   │
    │ 2   │
    └─────┘
r   )r;   rB   to_framer@   rL   s    r:   r   Series.to_frame  s3    , ""++-++  
 	
r=   c                6    U R                   R                  5       $ )a  Convert to list.

Notes:
    This function converts to Python scalars. It's typically
    more efficient to keep your data in the format native to
    your original dataframe, so we recommend only calling this
    when you absolutely need to.

Returns:
    A list of Python objects.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(s_native, series_only=True).to_list()
    [1, 2, 3]
)rB   to_listrL   s    r:   r   Series.to_list  s    ( %%--//r=   c                6    U R                   R                  5       $ )a#  Reduce this Series to the mean value.

Returns:
    The average of all elements in the Series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1.2, 4.2])
    >>> nw.from_native(s_native, series_only=True).mean()
    np.float64(2.7)
)rB   meanrL   s    r:   r   Series.mean(  s     %%**,,r=   c                6    U R                   R                  5       $ )a  Reduce this Series to the median value.

Notes:
    Results might slightly differ across backends due to differences in the underlying algorithms used to compute the median.

Returns:
    The median value of all elements in the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[5, 3, 8]])
    >>> nw.from_native(s_native, series_only=True).median()
    5.0
)rB   medianrL   s    r:   r   Series.median8  s    " %%,,..r=   c                6    U R                   R                  5       $ )a  Calculate the sample skewness of the Series.

Returns:
    The sample skewness of the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 1, 2, 10, 100])
    >>> nw.from_native(s_native, series_only=True).skew()
    1.4724267269058975

Notes:
    The skewness is a measure of the asymmetry of the probability distribution.
    A perfectly symmetric distribution has a skewness of 0.
)rB   skewrL   s    r:   r   Series.skewK  s    $ %%**,,r=   c                6    U R                   R                  5       $ )a7  Returns the number of non-null elements in the Series.

Returns:
    The number of non-null elements in the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, None]])
    >>> nw.from_native(s_native, series_only=True).count()
    2
)rB   countrL   s    r:   r   Series.count_  s     %%++--r=   c                6    U R                   R                  5       $ )a}  Return whether any of the values in the Series are True.

Notes:
  Only works on Series of data type Boolean.

Returns:
    A boolean indicating if any values in the Series are True.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([False, True, False])
    >>> nw.from_native(s_native, series_only=True).any()
    np.True_
)rB   anyrL   s    r:   r   
Series.anyo  s    " %%))++r=   c                6    U R                   R                  5       $ )aH  Return whether all values in the Series are True.

Returns:
    A boolean indicating if all values in the Series are True.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[False, True, False]])
    >>> nw.from_native(s_native, series_only=True).all()
    False
)rB   allrL   s    r:   r   
Series.all       %%))++r=   c                6    U R                   R                  5       $ )a	  Get the minimal value in this Series.

Returns:
    The minimum value in the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).min()
    1
)rB   minrL   s    r:   r   
Series.min  r   r=   c                6    U R                   R                  5       $ )a  Get the maximum value in this Series.

Returns:
    The maximum value in the Series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).max()
    np.int64(3)
)rB   maxrL   s    r:   r   
Series.max  r   r=   c                6    U R                   R                  5       $ )zReturns the index of the minimum value.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(s_native, series_only=True).arg_min()
    0
)rB   arg_minrL   s    r:   r   Series.arg_min       %%--//r=   c                6    U R                   R                  5       $ )zReturns the index of the maximum value.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).arg_max()
    2
)rB   arg_maxrL   s    r:   r   Series.arg_max  r   r=   c                6    U R                   R                  5       $ )a  Reduce this Series to the sum value.

Returns:
    The sum of all elements in the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(s_native, series_only=True).sum()
    6
)rB   sumrL   s    r:   r   
Series.sum  r   r=   ddofc               4    U R                   R                  US9$ )a  Get the standard deviation of this Series.

Arguments:
    ddof: "Delta Degrees of Freedom": the divisor used in the calculation is N - ddof,
             where N represents the number of elements.

Returns:
    The standard deviation of all elements in the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).std()
    1.0
r   )rB   stdr9   r   s     r:   r   
Series.std  s    $ %%))t)44r=   c               4    U R                   R                  US9$ )a|  Get the variance of this Series.

Arguments:
    ddof: "Delta Degrees of Freedom": the divisor used in the calculation is N - ddof,
             where N represents the number of elements.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(s_native, series_only=True).var()
    1.0
r   )rB   varr   s     r:   r   
Series.var  s     %%))t)44r=   c                    U R                  U R                  R                  U R                  U5      U R                  U5      S95      $ )a  Clip values in the Series.

Arguments:
    lower_bound: Lower bound value.
    upper_bound: Upper bound value.

Returns:
    A new Series with values clipped to the specified bounds.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([-1, 1, -3, 3, -5, 5])
    >>> nw.from_native(s_native, series_only=True).clip(-1, 3).to_native()
    0   -1
    1    1
    2   -1
    3    3
    4   -1
    5    3
    dtype: int64
)lower_boundupper_bound)re   rB   clipr~   )r9   r   r   s      r:   r   Series.clip  sL    8 ##""'' 00= 00= ( 
 	
r=   c           	     f    U R                  U R                  R                  [        USS95      5      $ )a>  Check if the elements of this Series are in the other sequence.

Arguments:
    other: Sequence of primitive type.

Returns:
    A new Series with boolean values indicating if the elements are in the other sequence.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.is_in([3, 2, 8]).to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        false,
        true,
        true
      ]
    ]
T)pass_through)re   rB   is_inr   r9   others     r:   r   Series.is_in$  s2    2 ##""((5t)LM
 	
r=   c                T    U R                  U R                  R                  5       5      $ )a  Find elements where boolean Series is True.

Returns:
    A new Series with the indices of elements that are True.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, None, None, 2])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).is_null().arg_true().to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (2,)
    Series: '' [u32]
    [
       1
       2
    ]
)re   rB   arg_truerL   s    r:   r   Series.arg_trueA  s$    * ##D$:$:$C$C$EFFr=   c                T    U R                  U R                  R                  5       5      $ )a  Drop null values.

Notes:
    pandas handles null values differently from Polars and PyArrow.
    See [null_handling](../pandas_like_concepts/null_handling.md/)
    for reference.

Returns:
    A new Series with null values removed.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([2, 4, None, 3, 5])
    >>> nw.from_native(s_native, series_only=True).drop_nulls().to_native()
    0    2.0
    1    4.0
    3    3.0
    4    5.0
    dtype: float64
)re   rB   
drop_nullsrL   s    r:   r   Series.drop_nullsX  s$    . ##D$:$:$E$E$GHHr=   c                T    U R                  U R                  R                  5       5      $ )a  Calculate the absolute value of each element.

Returns:
    A new Series with the absolute values of the original elements.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[2, -4, 3]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).abs().to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        2,
        4,
        3
      ]
    ]
)re   rB   absrL   s    r:   r   
Series.absq  s$    . ##D$:$:$>$>$@AAr=   reversec               R    U R                  U R                  R                  US95      $ )a  Calculate the cumulative sum.

Arguments:
    reverse: reverse the operation

Returns:
    A new Series with the cumulative sum of non-null values.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([2, 4, 3])
    >>> nw.from_native(s_native, series_only=True).cum_sum().to_native()
    0    2
    1    6
    2    9
    dtype: int64
r   )re   rB   cum_sumr9   r   s     r:   r   Series.cum_sum  s)    ( ##D$:$:$B$B7$B$STTr=   maintain_orderc               R    U R                  U R                  R                  US95      $ )a  Returns unique values of the series.

Arguments:
    maintain_order: Keep the same order as the original series. This may be more
        expensive to compute. Settings this to `True` blocks the possibility
        to run on the streaming engine for Polars.

Returns:
    A new Series with duplicate values removed.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([2, 4, 4, 6])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.unique(
    ...     maintain_order=True
    ... ).to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (3,)
    Series: '' [i64]
    [
       2
       4
       6
    ]
r   )re   rB   unique)r9   r   s     r:   r   Series.unique  s.    8 ##"")))H
 	
r=   c                T    U R                  U R                  R                  5       5      $ )af  Calculate the difference with the previous element, for each element.

Notes:
    pandas may change the dtype here, for example when introducing missing
    values in an integer column. To ensure, that the dtype doesn't change,
    you may want to use `fill_null` and `cast`. For example, to calculate
    the diff and fill missing values with `0` in a Int64 column, you could
    do:

        s.diff().fill_null(0).cast(nw.Int64)

Returns:
    A new Series with the difference between each element and its predecessor.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[2, 4, 3]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).diff().to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        null,
        2,
        -1
      ]
    ]
)re   rB   diffrL   s    r:   r  Series.diff  s%    @ ##D$:$:$?$?$ABBr=   c                V    U R                  U R                  R                  U5      5      $ )aG  Shift values by `n` positions.

Arguments:
    n: Number of indices to shift forward. If a negative value is passed,
        values are shifted in the opposite direction instead.

Returns:
    A new Series with values shifted by n positions.

Notes:
    pandas may change the dtype here, for example when introducing missing
    values in an integer column. To ensure, that the dtype doesn't change,
    you may want to use `fill_null` and `cast`. For example, to shift
    and fill missing values with `0` in a Int64 column, you could
    do:

        s.shift(1).fill_null(0).cast(nw.Int64)

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([2, 4, 3])
    >>> nw.from_native(s_native, series_only=True).shift(1).to_native()
    0    NaN
    1    2.0
    2    4.0
    dtype: float64
)re   rB   shiftr9   ns     r:   r  Series.shift  s&    < ##D$:$:$@$@$CDDr=   )fractionwith_replacementseedc          	     T    U R                  U R                  R                  XX4S95      $ )a  Sample randomly from this Series.

Arguments:
    n: Number of items to return. Cannot be used with fraction.
    fraction: Fraction of items to return. Cannot be used with n.
    with_replacement: Allow values to be sampled more than once.
    seed: Seed for the random number generator. If set to None (default), a random
        seed is generated for each sample operation.

Returns:
    A new Series containing randomly sampled values from the original Series.

Notes:
    The `sample` method returns a Series with a specified number of
    randomly selected items chosen from this Series.
    The results are not consistent across libraries.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3, 4])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.sample(
    ...     fraction=1.0, with_replacement=True
    ... ).to_native()  # doctest: +SKIP
    shape: (4,)
    Series: '' [i64]
    [
       1
       4
       3
       4
    ]
)r  r
  r  r  )re   rB   sample)r9   r  r
  r  r  s        r:   r  Series.sample  s7    V ##""))9I * 
 	
r=   c                R    U R                  U R                  R                  US95      $ )a  Rename the Series.

Notes:
    This method is very cheap, but does not guarantee that data
    will be copied. For example:

    ```python
    s1: nw.Series
    s2 = s1.alias("foo")
    arr = s2.to_numpy()
    arr[0] = 999
    ```

    may (depending on the backend, and on the version) result in
    `s1`'s data being modified. We recommend:

        - if you need to alias an object and don't need the original
          one around any more, just use `alias` without worrying about it.
        - if you were expecting `alias` to copy data, then explicitly call
          `.clone` before calling `alias`.

Arguments:
    name: The new name.

Returns:
    A new Series with the updated name.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3], name="foo")
    >>> nw.from_native(s_native, series_only=True).alias("bar").to_native()
    0    1
    1    2
    2    3
    Name: bar, dtype: int64
r   )re   rB   aliasr9   r   s     r:   r  Series.alias3  s*    N ##D$:$:$@$@d$@$KLLr=   c                     U R                  US9$ )a  Rename the Series.

Alias for `Series.alias()`.

Notes:
    This method is very cheap, but does not guarantee that data
    will be copied. For example:

    ```python
    s1: nw.Series
    s2 = s1.rename("foo")
    arr = s2.to_numpy()
    arr[0] = 999
    ```

    may (depending on the backend, and on the version) result in
    `s1`'s data being modified. We recommend:

        - if you need to rename an object and don't need the original
          one around any more, just use `rename` without worrying about it.
        - if you were expecting `rename` to copy data, then explicitly call
          `.clone` before calling `rename`.

Arguments:
    name: The new name.

Returns:
    A new Series with the updated name.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series("foo", [1, 2, 3])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.rename("bar").to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (3,)
    Series: 'bar' [i64]
    [
       1
       2
       3
    ]
r  )r  r  s     r:   renameSeries.rename\  s    Z zztz$$r=   return_dtypec                  UcT  [        U[        5      (       d  Sn[        U5      e[        UR	                  5       5      n[        UR                  5       5      nU R                  U R                  R                  XUS95      $ )a9  Replace all values by different values.

This function must replace all non-null input values (else it raises an error).

Arguments:
    old: Sequence of values to replace. It also accepts a mapping of values to
        their replacement as syntactic sugar for
        `replace_all(old=list(mapping.keys()), new=list(mapping.values()))`.
    new: Sequence of values to replace by. Length must match the length of `old`.
    return_dtype: The data type of the resulting expression. If set to `None`
        (default), the data type is determined automatically based on the other
        inputs.

Returns:
    A new Series with values replaced according to the mapping.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([3, 0, 1, 2], name="a")
    >>> nw.from_native(s_native, series_only=True).replace_strict(
    ...     [0, 1, 2, 3],
    ...     ["zero", "one", "two", "three"],
    ...     return_dtype=nw.String,
    ... ).to_native()
    0    three
    1     zero
    2      one
    3      two
    Name: a, dtype: object
zB`new` argument is required if `old` argument is not a Mapping typer  )	r`   r
   rg   listr   keysre   rB   replace_strict)r9   oldnewr  rG   s        r:   r  Series.replace_strict  sr    N ;c7++Zn$szz|$Csxxz"C##""11#1V
 	
r=   
descending
nulls_lastc               R    U R                  U R                  R                  XS95      $ )a  Sort this Series. Place null values first.

Arguments:
    descending: Sort in descending order.
    nulls_last: Place null values last instead of first.

Returns:
    A new sorted Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([5, None, 1, 2])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.sort(descending=True).to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (4,)
    Series: '' [i64]
    [
       null
       5
       2
       1
    ]
r!  )re   rB   sort)r9   r"  r#  s      r:   r%  Series.sort  s.    4 ##""'':'U
 	
r=   c                T    U R                  U R                  R                  5       5      $ )a  Returns a boolean Series indicating which values are null.

Notes:
    pandas handles null values differently from Polars and PyArrow.
    See [null_handling](../pandas_like_concepts/null_handling.md/)
    for reference.

Returns:
    A boolean Series indicating which values are null.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, None]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).is_null().to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        false,
        false,
        true
      ]
    ]
)re   rB   is_nullrL   s    r:   r(  Series.is_null  s$    8 ##D$:$:$B$B$DEEr=   c                T    U R                  U R                  R                  5       5      $ )a1  Returns a boolean Series indicating which values are NaN.

Returns:
    A boolean Series indicating which values are NaN.

Notes:
    pandas handles null values differently from Polars and PyArrow.
    See [null_handling](../pandas_like_concepts/null_handling.md/)
    for reference.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([0.0, None, 2.0], dtype="Float64")
    >>> nw.from_native(s_native, series_only=True).is_nan().to_native()
    0    False
    1     <NA>
    2    False
    dtype: boolean
)re   rB   is_nanrL   s    r:   r+  Series.is_nan  s$    , ##D$:$:$A$A$CDDr=   c                    Ub  Ub  Sn[        U5      eUc  Uc  Sn[        U5      eUb  US;  a  SU 3n[        U5      eU R                  U R                  R                  U R	                  U5      X#S95      $ )a  Fill null values using the specified value.

Arguments:
    value: Value used to fill null values.
    strategy: Strategy used to fill null values.
    limit: Number of consecutive null values to fill when using the 'forward' or 'backward' strategy.

Notes:
    pandas handles null values differently from Polars and PyArrow.
    See [null_handling](../pandas_like_concepts/null_handling.md/)
    for reference.

Returns:
    A new Series with null values filled according to the specified value or strategy.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, None])
    >>>
    >>> nw.from_native(s_native, series_only=True).fill_null(5).to_native()
    0    1.0
    1    2.0
    2    5.0
    dtype: float64

    Or using a strategy:

    >>> nw.from_native(s_native, series_only=True).fill_null(
    ...     strategy="forward", limit=1
    ... ).to_native()
    0    1.0
    1    2.0
    2    2.0
    dtype: float64
z*cannot specify both `value` and `strategy`z0must specify either a fill `value` or `strategy`>   forwardbackwardzstrategy not supported: )valuestrategylimit)
ValueErrorre   rB   	fill_nullr~   )r9   r0  r1  r2  rG   s        r:   r4  Series.fill_null  s    V !5>CS/!=X-DCS/!H4K$K,XJ7CS/!##"",,**51H - 
 	
r=   c                    U R                  U R                  R                  U R                  U5      U R                  U5      US95      $ )av  Get a boolean mask of the values that are between the given lower/upper bounds.

Arguments:
    lower_bound: Lower bound value.
    upper_bound: Upper bound value.
    closed: Define which sides of the interval are closed (inclusive).

Notes:
    If the value of the `lower_bound` is greater than that of the `upper_bound`,
    then the values will be False, as no value can satisfy the condition.

Returns:
    A boolean Series indicating which values are between the given bounds.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3, 4, 5]])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.is_between(2, 4, "right").to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        false,
        false,
        true,
        true,
        false
      ]
    ]
)closed)re   rB   
is_betweenr~   )r9   r   r   r7  s       r:   r8  Series.is_betweenL  sP    L ##""--$$[1$$[1 . 
 	
r=   c                6    U R                   R                  5       $ )a  Count the number of unique values.

Returns:
    Number of unique values in the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 2, 3])
    >>> nw.from_native(s_native, series_only=True).n_unique()
    3
)rB   n_uniquerL   s    r:   r;  Series.n_uniquez  s     %%..00r=   c                6    U R                   R                  SSS9$ )a!  Convert to numpy.

Returns:
    NumPy ndarray representation of the Series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3], name="a")
    >>> nw.from_native(s_native, series_only=True).to_numpy()
    array([1, 2, 3]...)
N)rQ   )rB   to_numpyrL   s    r:   r>  Series.to_numpy  s      %%..t$.??r=   c                6    U R                   R                  5       $ )aR  Convert to pandas Series.

Returns:
    A pandas Series containing the data from this Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series("a", [1, 2, 3])
    >>> nw.from_native(s_native, series_only=True).to_pandas()
    0    1
    1    2
    2    3
    Name: a, dtype: int64
)rB   	to_pandasrL   s    r:   rA  Series.to_pandas  s    " %%//11r=   c                6    U R                   R                  5       $ )a  Convert to polars Series.

Returns:
    A polars Series containing the data from this Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).to_polars()  # doctest: +NORMALIZE_WHITESPACE
    shape: (3,)
    Series: '' [i64]
    [
        1
        2
        3
    ]
)rB   	to_polarsrL   s    r:   rD  Series.to_polars  s    , %%//11r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __add__r~   r   s     r:   rG  Series.__add__  4    ##""**4+?+?+FG
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __radd__r~   r   s     r:   rK  Series.__radd__  4    ##""++D,@,@,GH
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __sub__r~   r   s     r:   rO  Series.__sub__  rI  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rsub__r~   r   s     r:   rR  Series.__rsub__  rM  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __mul__r~   r   s     r:   rU  Series.__mul__  rI  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rmul__r~   r   s     r:   rX  Series.__rmul__  rM  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __truediv__r~   r   s     r:   r[  Series.__truediv__  s4    ##""..t/C/CE/JK
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rtruediv__r~   r   s     r:   r^  Series.__rtruediv__  4    ##""//0D0DU0KL
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __floordiv__r~   r   s     r:   rb  Series.__floordiv__  r`  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rfloordiv__r~   r   s     r:   re  Series.__rfloordiv__  s4    ##""001E1Ee1LM
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __pow__r~   r   s     r:   rh  Series.__pow__  rI  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rpow__r~   r   s     r:   rk  Series.__rpow__  rM  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __mod__r~   r   s     r:   rn  Series.__mod__  rI  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rmod__r~   r   s     r:   rq  Series.__rmod__  rM  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __eq__r~   r   s     r:   rt  Series.__eq__  4    ##""))$*>*>u*EF
 	
r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __ne__r~   r   s     r:   rx  Series.__ne__  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __gt__r~   r   s     r:   r{  Series.__gt__  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __ge__r~   r   s     r:   r~  Series.__ge__  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __lt__r~   r   s     r:   r  Series.__lt__  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __le__r~   r   s     r:   r  Series.__le__$  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __and__r~   r   s     r:   r  Series.__and__)  rI  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __rand__r~   r   s     r:   r  Series.__rand__.  rM  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __or__r~   r   s     r:   r  Series.__or__3  rv  r=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ rU   )re   rB   __ror__r~   r   s     r:   r  Series.__ror__8  rI  r=   c                T    U R                  U R                  R                  5       5      $ rU   )re   rB   
__invert__rL   s    r:   r  Series.__invert__>  s"    ##D$:$:$E$E$GHHr=   c                t    U R                  U R                  R                  U R                  U5      5      5      $ )a  Filter elements in the Series based on a condition.

Returns:
    A new Series with elements that satisfy the condition.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([4, 10, 15, 34, 50])
    >>> s_nw = nw.from_native(s_native, series_only=True)
    >>> s_nw.filter(s_nw > 10).to_native()
    2    15
    3    34
    4    50
    dtype: int64
)re   rB   filterr~   )r9   	predicates     r:   r  Series.filterA  s6    $ ##""))$*>*>y*IJ
 	
r=   c                $    U R                  5       ) $ )a  Get a mask of all duplicated rows in the Series.

Returns:
    A new Series with boolean values indicating duplicated rows.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3, 1]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).is_duplicated().to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        true,
        false,
        false,
        true
      ]
    ]
)	is_uniquerL   s    r:   is_duplicatedSeries.is_duplicatedX  s    0    r=   c                <    U R                   R                  5       S:H  $ )a^  Check if the series is empty.

Returns:
    A boolean indicating if the series is empty.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3])
    >>> s_nw = nw.from_native(s_native, series_only=True)

    >>> s_nw.is_empty()
    False
    >>> s_nw.filter(s_nw > 10).is_empty()
    True
r   r   rL   s    r:   is_emptySeries.is_emptyr  s    $ %%))+q00r=   c                T    U R                  U R                  R                  5       5      $ )a  Get a mask of all unique rows in the Series.

Returns:
    A new Series with boolean values indicating unique rows.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3, 1])
    >>> nw.from_native(s_native, series_only=True).is_unique().to_native()
    0    False
    1     True
    2     True
    3    False
    dtype: bool
)re   rB   r  rL   s    r:   r  Series.is_unique  s$    $ ##D$:$:$D$D$FGGr=   c                6    U R                   R                  5       $ )a  Count the number of null values.

Notes:
    pandas handles null values differently from Polars and PyArrow.
    See [null_handling](../pandas_like_concepts/null_handling.md/)
    for reference.

Returns:
    The number of null values in the Series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, None, None]])
    >>> nw.from_native(s_native, series_only=True).null_count()
    2
)rB   
null_countrL   s    r:   r  Series.null_count  s    & %%0022r=   c                T    U R                  U R                  R                  5       5      $ )a0  Return a boolean mask indicating the first occurrence of each distinct value.

Returns:
    A new Series with boolean values indicating the first occurrence of each distinct value.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 1, 2, 3, 2])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).is_first_distinct().to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (5,)
    Series: '' [bool]
    [
        true
        false
        true
        true
        false
    ]
)re   rB   is_first_distinctrL   s    r:   r  Series.is_first_distinct  s$    0 ##D$:$:$L$L$NOOr=   c                T    U R                  U R                  R                  5       5      $ )a  Return a boolean mask indicating the last occurrence of each distinct value.

Returns:
    A new Series with boolean values indicating the last occurrence of each distinct value.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 1, 2, 3, 2])
    >>> nw.from_native(s_native, series_only=True).is_last_distinct().to_native()
    0    False
    1     True
    2    False
    3     True
    4     True
    dtype: bool
)re   rB   is_last_distinctrL   s    r:   r  Series.is_last_distinct  s$    & ##D$:$:$K$K$MNNr=   r"  c               4    U R                   R                  US9$ )a  Check if the Series is sorted.

Arguments:
    descending: Check if the Series is sorted in descending order.

Returns:
    A boolean indicating if the Series is sorted.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[3, 2, 1]])
    >>> s_nw = nw.from_native(s_native, series_only=True)

    >>> s_nw.is_sorted(descending=False)
    False

    >>> s_nw.is_sorted(descending=True)
    True
r  )rB   	is_sorted)r9   r"  s     r:   r  Series.is_sorted  s    , %%//:/FFr=   r%  parallelr   	normalizec          	     f    U R                  U R                  R                  XX4S9U R                  S9$ )a  Count the occurrences of unique values.

Arguments:
    sort: Sort the output by count in descending order. If set to False (default),
        the order of the output is random.
    parallel: Execute the computation in parallel. Used for Polars only.
    name: Give the resulting count column a specific name; if `normalize` is True
        defaults to "proportion", otherwise defaults to "count".
    normalize: If true gives relative frequencies of the unique values

Returns:
    A DataFrame with two columns:
    - The original values as first column
    - Either count or proportion as second column, depending on normalize parameter.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 1, 2, 3, 2], name="s")
    >>> nw.from_native(s_native, series_only=True).value_counts(
    ...     sort=True
    ... ).to_native()
       s  count
    0  1      2
    1  2      2
    2  3      1
r  r   )r;   rB   value_countsr@   )r9   r%  r  r   r  s        r:   r  Series.value_counts  sB    H ""//4 0  ++	  
 	
r=   c                4    U R                   R                  XS9$ )ac  Get quantile value of the series.

Note:
    pandas and Polars may have implementation differences for a given interpolation method.

Arguments:
    quantile: Quantile between 0.0 and 1.0.
    interpolation: Interpolation method.

Returns:
    The quantile value.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series(list(range(50)))
    >>> s_nw = nw.from_native(s_native, series_only=True)
    >>> [
    ...     s_nw.quantile(quantile=q, interpolation="nearest")
    ...     for q in (0.1, 0.25, 0.5, 0.75, 0.9)
    ... ]
    [5.0, 12.0, 25.0, 37.0, 44.0]
)quantileinterpolation)rB   r  )r9   r  r  s      r:   r  Series.quantile!  s%    6 %%.. / 
 	
r=   c                    U R                  U R                  R                  U R                  U5      U R                  U5      5      5      $ )a  Take values from self or other based on the given mask.

Where mask evaluates true, take values from self. Where mask evaluates false,
take values from other.

Arguments:
    mask: Boolean Series
    other: Series of same type.

Returns:
    A new Series with values selected from self or other based on the mask.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>> data_native = pa.chunked_array([[1, 2, 3, 4, 5]])
    >>> other_native = pa.chunked_array([[5, 4, 3, 2, 1]])
    >>> mask_native = pa.chunked_array([[True, False, True, False, True]])
    >>>
    >>> data_nw = nw.from_native(data_native, series_only=True)
    >>> other_nw = nw.from_native(other_native, series_only=True)
    >>> mask_nw = nw.from_native(mask_native, series_only=True)
    >>>
    >>> data_nw.zip_with(mask_nw, other_nw).to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        1,
        4,
        3,
        2,
        5
      ]
    ]
)re   rB   zip_withr~   )r9   maskr   s      r:   r  Series.zip_with@  sG    H ##""++$$T*D,@,@,G
 	
r=   c                4    U R                   R                  US9$ )a  Return the Series as a scalar, or return the element at the given index.

If no index is provided, this is equivalent to `s[0]`, with a check
that the shape is (1,). With an index, this is equivalent to `s[index]`.

Returns:
    The scalar value of the Series or the element at the given index.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> nw.from_native(pl.Series("a", [1]), series_only=True).item()
    1

    >>> nw.from_native(pl.Series("a", [9, 8, 7]), series_only=True).item(-1)
    7
)index)rB   rc   )r9   r  s     r:   rc   Series.itemj  s    & %%***77r=   c                V    U R                  U R                  R                  U5      5      $ )aq  Get the first `n` rows.

Arguments:
    n: Number of rows to return.

Returns:
    A new Series containing the first n rows.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series(list(range(10)))
    >>> nw.from_native(s_native, series_only=True).head(3).to_native()
    0    0
    1    1
    2    2
    dtype: int64
)re   rB   headr  s     r:   r  Series.head  s&    ( ##D$:$:$?$?$BCCr=   c                V    U R                  U R                  R                  U5      5      $ )a  Get the last `n` rows.

Arguments:
    n: Number of rows to return.

Returns:
    A new Series with the last n rows.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([list(range(10))])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.tail(3).to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        7,
        8,
        9
      ]
    ]
)re   rB   tailr  s     r:   r  Series.tail  s&    2 ##D$:$:$?$?$BCCr=   c                V    U R                  U R                  R                  U5      5      $ )a_  Round underlying floating point data by `decimals` digits.

Arguments:
    decimals: Number of decimals to round by.

Returns:
    A new Series with rounded values.

Notes:
    For values exactly halfway between rounded decimal values pandas behaves differently than Polars and Arrow.

    pandas rounds to the nearest even value (e.g. -0.5 and 0.5 round to 0.0, 1.5 and 2.5 round to 2.0, 3.5 and
    4.5 to 4.0, etc..).

    Polars and Arrow round away from 0 (e.g. -0.5 to -1.0, 0.5 to 1.0, 1.5 to 2.0, 2.5 to 3.0, etc..).

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1.12345, 2.56789, 3.901234])
    >>> s = nw.from_native(s_native, series_only=True)
    >>> s.round(1).to_native()  # doctest: +NORMALIZE_WHITESPACE
    shape: (3,)
    Series: '' [f64]
    [
       1.1
       2.6
       3.9
    ]
)re   rB   round)r9   decimalss     r:   r  Series.round  s'    @ ##D$:$:$@$@$JKKr=   _	separator
drop_firstc               d    U R                  U R                  R                  XS9U R                  S9$ )aC  Get dummy/indicator variables.

Arguments:
    separator: Separator/delimiter used when generating column names.
    drop_first: Remove the first category from the variable being encoded.

Returns:
    A new DataFrame containing the dummy/indicator variables.

Notes:
    pandas and Polars handle null values differently. Polars distinguishes
    between NaN and Null, whereas pandas doesn't.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1, 2, 3], name="a")
    >>> s_nw = nw.from_native(s_native, series_only=True)

    >>> s_nw.to_dummies(drop_first=False).to_native()
       a_1  a_2  a_3
    0    1    0    0
    1    0    1    0
    2    0    0    1

    >>> s_nw.to_dummies(drop_first=True).to_native()
       a_2  a_3
    0    0    0
    1    1    0
    2    0    1
r  r   )r;   rB   
to_dummiesr@   )r9   r  r  s      r:   r  Series.to_dummies  s9    F ""--	-Y++  
 	
r=   c                R    U R                  U R                  R                  XS95      $ )a5  Take every nth value in the Series and return as new Series.

Arguments:
    n: Gather every *n*-th row.
    offset: Starting index.

Returns:
    A new Series with every nth value starting from the offset.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 2, 3, 4]])
    >>> nw.from_native(s_native, series_only=True).gather_every(
    ...     n=2, offset=1
    ... ).to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        2,
        4
      ]
    ]
)r  offset)re   rB   gather_every)r9   r  r  s      r:   r  Series.gather_every  s.    4 ##""//!/C
 	
r=   c                6    U R                   R                  5       $ )a  Convert to arrow.

Returns:
    A PyArrow Array containing the data from the Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 2, 3, 4])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).to_arrow()  # doctest:+NORMALIZE_WHITESPACE
    <pyarrow.lib.Int64Array object at ...>
    [
        1,
        2,
        3,
        4
    ]
)rB   rt   rL   s    r:   rt   Series.to_arrow  s    , %%..00r=   c                T    U R                  U R                  R                  5       5      $ )a  Compute the most occurring value(s).

Can return multiple values.

Returns:
    A new Series containing the mode(s) (values that appear most frequently).

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>> s_native = pd.Series([1, 1, 2, 2, 3])
    >>> nw.from_native(s_native, series_only=True).mode().sort().to_native()
    0    1
    1    2
    dtype: int64
)re   rB   moderL   s    r:   r  Series.mode0  s$    " ##D$:$:$?$?$ABBr=   c                T    U R                  U R                  R                  5       5      $ )a  Returns a boolean Series indicating which values are finite.

Warning:
    Different backend handle null values differently. `is_finite` will return
    False for NaN and Null's in the Dask and pandas non-nullable backend, while
    for Polars, PyArrow and pandas nullable backends null values are kept as such.

Returns:
    Expression of `Boolean` data type.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[float("nan"), float("inf"), 2.0, None]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).is_finite().to_native()  # doctest: +ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        false,
        false,
        true,
        null
      ]
    ]
)re   rB   	is_finiterL   s    r:   r  Series.is_finiteC  s$    : ##D$:$:$D$D$FGGr=   c               R    U R                  U R                  R                  US95      $ )a"  Return the cumulative count of the non-null values in the series.

Arguments:
    reverse: reverse the operation

Returns:
    A new Series with the cumulative count of non-null values.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series(["x", "k", None, "d"])
    >>> nw.from_native(s_native, series_only=True).cum_count(
    ...     reverse=True
    ... ).to_native()  # doctest:+NORMALIZE_WHITESPACE
    shape: (4,)
    Series: '' [u32]
    [
        3
        2
        1
        1
    ]
r   )re   rB   	cum_countr   s     r:   r  Series.cum_countb  s)    4 ##D$:$:$D$DW$D$UVVr=   c               R    U R                  U R                  R                  US95      $ )a  Return the cumulative min of the non-null values in the series.

Arguments:
    reverse: reverse the operation

Returns:
    A new Series with the cumulative min of non-null values.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([3, 1, None, 2])
    >>> nw.from_native(s_native, series_only=True).cum_min().to_native()
    0    3.0
    1    1.0
    2    NaN
    3    1.0
    dtype: float64
r   )re   rB   cum_minr   s     r:   r  Series.cum_min~  s)    * ##D$:$:$B$B7$B$STTr=   c               R    U R                  U R                  R                  US95      $ )a'  Return the cumulative max of the non-null values in the series.

Arguments:
    reverse: reverse the operation

Returns:
    A new Series with the cumulative max of non-null values.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1, 3, None, 2]])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).cum_max().to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        1,
        3,
        null,
        3
      ]
    ]

r   )re   rB   cum_maxr   s     r:   r  Series.cum_max  s)    8 ##D$:$:$B$B7$B$STTr=   c               R    U R                  U R                  R                  US95      $ )a  Return the cumulative product of the non-null values in the series.

Arguments:
    reverse: reverse the operation

Returns:
    A new Series with the cumulative product of non-null values.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1, 3, None, 2])
    >>> nw.from_native(
    ...     s_native, series_only=True
    ... ).cum_prod().to_native()  # doctest:+NORMALIZE_WHITESPACE
    shape: (4,)
    Series: '' [i64]
    [
       1
       3
       null
       6
    ]
r   )re   rB   cum_prodr   s     r:   r  Series.cum_prod  s)    4 ##D$:$:$C$CG$C$TUUr=   )r   centerc                   [        XS9u  p[        U 5      S:X  a  U $ U R                  U R                  R	                  XUS95      $ )a0  Apply a rolling sum (moving sum) over the values.

A window of length `window_size` will traverse the values. The resulting values
will be aggregated to their sum.

The window at a given row will include the row itself and the `window_size - 1`
elements before it.

Arguments:
    window_size: The length of the window in number of elements. It must be a
        strictly positive integer.
    min_samples: The number of values in the window that should be non-null before
        computing a result. If set to `None` (default), it will be set equal to
        `window_size`. If provided, it must be a strictly positive integer, and
        less than or equal to `window_size`
    center: Set the labels at the center of the window.

Returns:
    A new series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1.0, 2.0, 3.0, 4.0])
    >>> nw.from_native(s_native, series_only=True).rolling_sum(
    ...     window_size=2
    ... ).to_native()
    0    NaN
    1    3.0
    2    5.0
    3    7.0
    dtype: float64
window_sizer   r   r  r   r  )r   r   re   rB   rolling_sum)r9   r  r   r  min_samples_ints        r:   r  Series.rolling_sum  sY    R (C#(
$ t9>K##""..'V / 
 	
r=   c                   [        XS9u  p[        U 5      S:X  a  U $ U R                  U R                  R	                  XUS95      $ )a  Apply a rolling mean (moving mean) over the values.

A window of length `window_size` will traverse the values. The resulting values
will be aggregated to their mean.

The window at a given row will include the row itself and the `window_size - 1`
elements before it.

Arguments:
    window_size: The length of the window in number of elements. It must be a
        strictly positive integer.
    min_samples: The number of values in the window that should be non-null before
        computing a result. If set to `None` (default), it will be set equal to
        `window_size`. If provided, it must be a strictly positive integer, and
        less than or equal to `window_size`
    center: Set the labels at the center of the window.

Returns:
    A new series.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[1.0, 2.0, 3.0, 4.0]])
    >>> nw.from_native(s_native, series_only=True).rolling_mean(
    ...     window_size=2
    ... ).to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        null,
        1.5,
        2.5,
        3.5
      ]
    ]
r  r   r  )r   r   re   rB   rolling_mean)r9   r  r   r  s       r:   r  Series.rolling_mean	  sX    Z $?#$
  t9>K##""//' 0 
 	
r=   )r   r  r   c          	         [        XS9u  p[        U 5      S:X  a  U $ U R                  U R                  R	                  XX4S95      $ )a  Apply a rolling variance (moving variance) over the values.

A window of length `window_size` will traverse the values. The resulting values
will be aggregated to their variance.

The window at a given row will include the row itself and the `window_size - 1`
elements before it.

Arguments:
    window_size: The length of the window in number of elements. It must be a
        strictly positive integer.
    min_samples: The number of values in the window that should be non-null before
        computing a result. If set to `None` (default), it will be set equal to
        `window_size`. If provided, it must be a strictly positive integer, and
        less than or equal to `window_size`.
    center: Set the labels at the center of the window.
    ddof: Delta Degrees of Freedom; the divisor for a length N window is N - ddof.

Returns:
    A new series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> s_native = pl.Series([1.0, 3.0, 1.0, 4.0])
    >>> nw.from_native(s_native, series_only=True).rolling_var(
    ...     window_size=2, min_samples=1
    ... ).to_native()  # doctest:+NORMALIZE_WHITESPACE
    shape: (4,)
    Series: '' [f64]
    [
       null
       2.0
       2.0
       4.5
    ]
r  r   r  r   r  r   )r   r   re   rB   rolling_varr9   r  r   r  r   s        r:   r  Series.rolling_var?	  sX    \ $?#$
  t9>K##""..' / 
 	
r=   c          	         [        XS9u  p[        U 5      S:X  a  U $ U R                  U R                  R	                  XX4S95      $ )a  Apply a rolling standard deviation (moving standard deviation) over the values.

A window of length `window_size` will traverse the values. The resulting values
will be aggregated to their standard deviation.

The window at a given row will include the row itself and the `window_size - 1`
elements before it.

Arguments:
    window_size: The length of the window in number of elements. It must be a
        strictly positive integer.
    min_samples: The number of values in the window that should be non-null before
        computing a result. If set to `None` (default), it will be set equal to
        `window_size`. If provided, it must be a strictly positive integer, and
        less than or equal to `window_size`.
    center: Set the labels at the center of the window.
    ddof: Delta Degrees of Freedom; the divisor for a length N window is N - ddof.

Returns:
    A new series.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> s_native = pd.Series([1.0, 3.0, 1.0, 4.0])
    >>> nw.from_native(s_native, series_only=True).rolling_std(
    ...     window_size=2, min_samples=1
    ... ).to_native()
    0         NaN
    1    1.414214
    2    1.414214
    3    2.121320
    dtype: float64
r  r   r  )r   r   re   rB   rolling_stdr  s        r:   r  Series.rolling_stdz	  sX    V $?#$
  t9>K##""..' / 
 	
r=   c              #  T   #    U R                   R                  5        S h  vN   g  N7frU   )rB   __iter__rL   s    r:   r  Series.__iter__	  s     ))22444s   (&(c                8    U R                   R                  U5      $ rU   )rB   __contains__r   s     r:   r   Series.__contains__	  s    %%22599r=   c                   1 SknX;  a  SU S3n[        U5      eU R                  U R                  R                  XS95      $ )a  Assign ranks to data, dealing with ties appropriately.

Notes:
    The resulting dtype may differ between backends.

Arguments:
    method: The method used to assign ranks to tied elements.
        The following methods are available (default is 'average'):

        - 'average' : The average of the ranks that would have been assigned to
          all the tied values is assigned to each value.
        - 'min' : The minimum of the ranks that would have been assigned to all
            the tied values is assigned to each value. (This is also referred to
            as "competition" ranking.)
        - 'max' : The maximum of the ranks that would have been assigned to all
            the tied values is assigned to each value.
        - 'dense' : Like 'min', but the rank of the next highest element is
           assigned the rank immediately after those assigned to the tied
           elements.
        - 'ordinal' : All values are given a distinct rank, corresponding to the
            order that the values occur in the Series.

    descending: Rank in descending order.

Returns:
    A new series with rank data as values.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> s_native = pa.chunked_array([[3, 6, 1, 1, 6]])
    >>> nw.from_native(s_native, series_only=True).rank(
    ...     method="dense"
    ... ).to_native()  # doctest:+ELLIPSIS
    <pyarrow.lib.ChunkedArray object at ...>
    [
      [
        2,
        3,
        1,
        1,
        3
      ]
    ]
>   r   r   denseaverageordinalzTRanking method must be one of {'average', 'min', 'max', 'dense', 'ordinal'}. Found '')methodr"  )r3  re   rB   rank)r9   r  r"  supported_rank_methodsrG   s        r:   r  Series.rank	  s^    ^ "O/ $  S/!##""''v'M
 	
r=   )	bin_countinclude_breakpointc                  Ub  Ub  Sn[        U5      eUc  Uc  SnUb6  [        S[        U5      5       H  nXS-
     X   :  d  M  Sn[        U5      e   U R                  U R                  R                  UUUS9U R                  S9$ )u.  Bin values into buckets and count their occurrences.

!!! warning
    This functionality is considered **unstable**. It may be changed at any point
    without it being considered a breaking change.

Arguments:
    bins: A monotonically increasing sequence of values.
    bin_count: If no bins provided, this will be used to determine the distance of the bins.
    include_breakpoint: Include a column that shows the intervals as categories.

Returns:
    A new DataFrame containing the counts of values that occur within each passed bin.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>> s_native = pd.Series([1, 3, 8, 8, 2, 1, 3], name="a")
    >>> nw.from_native(s_native, series_only=True).hist(bin_count=4)
    ┌────────────────────┐
    | Narwhals DataFrame |
    |--------------------|
    |   breakpoint  count|
    |0        2.75      3|
    |1        4.50      2|
    |2        6.25      0|
    |3        8.00      2|
    └────────────────────┘
z-can only provide one of `bin_count` or `bins`
   r   z bins must increase monotonically)binsr  r  r   )r   ranger   r;   rB   histr@   )r9   r  r  r  rG   r^   s         r:   r  Series.hist	  s    H 	 5ACs##<I-I1c$i(A;$')<C&s++ )
 ""''##5 ( 
 ++  
 	
r=   c                    [        U 5      $ rU   r   rL   s    r:   str
Series.str,
      $T**r=   c                    [        U 5      $ rU   r   rL   s    r:   dt	Series.dt0
  s    &t,,r=   c                    [        U 5      $ rU   r   rL   s    r:   cat
Series.cat4
  s    !$''r=   c                    [        U 5      $ rU   r   rL   s    r:   r  Series.list8
  s    "4((r=   c                    [        U 5      $ rU   r   rL   s    r:   structSeries.struct<
  r  r=   )rB   r@   )returnztype[DataFrame[Any]])rE   r   rF   z&Literal['full', 'lazy', 'interchange']r"  None)r"  r3   )NN)rP   r   rQ   zbool | Noner"  r2   )rX   r   r"  r   )rX   r*   r"  r%   )rX   z(SingleIndexSelector | MultiIndexSelectorr"  
Any | Self)r"  r$   rU   )rl   zobject | Noner"  object)r"  r   )r   zint | Sequence[int]r   r   r"  r%   )r"  z
tuple[int])r   r   r"  r   )rE   r   r"  r%   )r   zCallable[[Any], Self]r   r   r   r   r"  r%   )r"  r  )r"  ra   )r"  r+   )r   float | Noner   r&  r   r&  r   r&  r   boolr   ra   r   r'  r"  r%   )rP   zDType | type[DType]r"  r%   )r"  DataFrame[Any])r"  z	list[Any])r"  float)r"  r&  )r"  r'  )r"  r   )r   ra   r"  r)  )r   .Self | NumericLiteral | TemporalLiteral | Noner   r*  r"  r%   )r   r   r"  r%   )r"  r%   )r   r'  r"  r%   )r   r'  r"  r%   )r  ra   r"  r%   )
r  
int | Noner
  r&  r  r'  r  r+  r"  r%   )r   r  r"  r%   )r  z!Sequence[Any] | Mapping[Any, Any]r  zSequence[Any] | Noner  zDType | type[DType] | Noner"  r%   )r"  r'  r#  r'  r"  r%   )NNN)r0  zSelf | NonNestedLiteralr1  zFillNullStrategy | Noner2  r+  r"  r%   )both)r   r$  r   r$  r7  r,   r"  r%   )r"  r2   )r"  zpd.Series[Any])r"  z	pl.Series)r   r%  r"  r%   )r  r   r"  r%   )r"  r'  r"  r'  )
r%  r'  r  r'  r   z
str | Noner  r'  r"  r(  )r  r)  r  r0   r"  r)  )r  r%   r   r%   r"  r%   )r  r+  r"  r   )r  )r   )r  ra   r"  r%   )r  r  r  r'  r"  r(  )r  ra   r  ra   r"  r%   )r"  r&   )r  ra   r   r+  r  r'  r"  r%   )
r  ra   r   r+  r  r'  r   ra   r"  r%   )r"  zIterator[Any])r   r   r"  r'  )r  )r  r/   r"  r'  r"  r%   )r  zlist[float | int] | Noner  r+  r  r'  r"  r(  )r"  zSeriesStringNamespace[Self])r"  zSeriesDateTimeNamespace[Self])r"  zSeriesCatNamespace[Self])r"  zSeriesListNamespace[Self])r"  zSeriesStructNamespace[Self])__name__
__module____qualname____firstlineno____doc__propertyr;   rH   rM   rR   r   rY   ri   rp   r   r}   r   r~   re   r   r   r   r   rP   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  r8  r;  r>  rA  rD  rG  rK  rO  rR  rU  rX  r[  r^  rb  re  rh  rk  rn  rq  rt  rx  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rc   r  r  r  r  r  rt   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r   __static_attributes__rV   r=   r:   r5   r5   6   s   0  
&& 6	&
 
& 6 6<H ? ?? ?5An=H6-,/
b / / 9/,M++$ , ,  + +& !!"&""G
 G
 	G

  G
 G
 G
 G
 G
 
G
RH6
60,- /&-(. ,&, , , 00,  "# 5( "# 5& GKFJ!
C!
 D!
 
	!
F
:G.I2B2 */ U, 05 
@ CDED /
 "&!&/
/
 	/

 /
 /
 
/
b'MR-%d %)1

 481
.1
 "1

 11
 
1
f */5 
<F<E4 *.,0 	8
&8
 *8
 	8

 
8
| "(	,
,
  ,
 	,

 
,
\1 @ 2&20














































I
.!41(H(3*P4O* /4 G6 )
 )
 	)

 )
 )
 
)
V

.H
	
>(
T8*D,D6 LF #&%&
&
37&
	&
P
<10C&H> ,1 W8 */ U. */ U< +0 V@ #'4
4
  	4

 4
 
4
t #'8
8
  	8

 8
 
8
| #'9
9
  	9

 9
 9
 
9
~ #'6
6
  	6

 6
 6
 
6
p5:9
 9
 9
z *.7
 !%#'7
&7
 	7

 !7
 
7
r + + - - ( ( ) ) + +r=   r5   )B
__future__r   typingr   r   r   r   r   r	   r
   r   r   narwhals.dependenciesr   narwhals.dtypesr   narwhals.exceptionsr   narwhals.series_catr   narwhals.series_dtr   narwhals.series_listr   narwhals.series_strr   narwhals.series_structr   narwhals.translater   narwhals.typingr   r   r   narwhals.utilsr   r   r    r!   r"   r#   typesr$   pandaspdpolarspltyping_extensionsr%   narwhals._arrow.typingr&   narwhals._compliantr'   r8   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r5   rV   r=   r:   <module>rI     s    "           1 + , 2 6 4 5 8 ( ' , / 6 ( . , ( 2 &13,5%.0.*:/(-H(+W[! H(+r=   