§
    è‘jž4  ã                  óP  — U d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ erd dlmZ d dlmZmZmZmZ g d	¢Z ej        d
„ ej        ej        ej        ej        fD ¦   «         Ž Zded<    ed¦  «        Z G d„ dee         ¦  «        Zdd„Zdd„Zdd„Zdd„Z dd„Z!dS )é    )Úannotations)Ú
isfunction)ÚTYPE_CHECKINGÚGenericÚTypeVar)ÚwarnN)Úfind_stacklevel)ÚCallable)Ú	DataFrameÚExprÚ	LazyFrameÚSeries)Úregister_dataframe_namespaceÚregister_expr_namespaceÚregister_lazyframe_namespaceÚregister_series_namespacec              #  ó$   K  — | ]}|j         V — Œd S ©N)Ú
_accessors)Ú.0Úclss     úO/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/polars/api.pyú	<genexpr>r      s$   è è € ÐQÐQ˜€c„nÐQÐQÐQÐQÐQÐQó    zset[str]Ú_reserved_namespacesÚNSc                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú	NameSpacezHEstablish property-like namespace object for user-defined functionality.ÚnameÚstrÚ	namespaceútype[NS]ÚreturnÚNonec                ó"   — || _         || _        d S r   )Ú	_accessorÚ_ns)Úselfr   r!   s      r   Ú__init__zNameSpace.__init__#   s   € ØˆŒØˆŒˆˆr   Úinstanceú	NS | Noner   úNS | type[NS]c                ón   — |€| j         S |                       |¦  «        }t          || j        |¦  «         |S r   )r'   Úsetattrr&   )r(   r*   r   Úns_instances       r   Ú__get__zNameSpace.__get__'   s:   € ØÐØ”8ˆOà—h’h˜xÑ(Ô(ˆÝ˜$œ.¨+Ñ6Ô6Ð6ØÐr   N)r   r    r!   r"   r#   r$   )r*   r+   r   r"   r#   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r0   © r   r   r   r       sB   € € € € € ØRÐRðð ð ð ðð ð ð ð ð r   r   r   r    r   ú+type[Expr | DataFrame | LazyFrame | Series]r#   úCallable[[type[NS]], type[NS]]c                ó   ‡ ‡— dˆˆ fd„}|S )z>Register custom namespace against the underlying Polars class.Úns_classr"   r#   c                óò  •— ‰t           v rd‰›}t          |¦  «        ‚t          ‰‰d ¦  «        x}Œt          |¦  «        s*t	          |t
          ¦  «        s‰                     d¦  «        r$d‰j        › d‰› d| j        ›}t          |¦  «        ‚t          d‰›d‰j        › dt          t          ¦   «         ¬	¦  «         t          ‰‰t          ‰| ¦  «        ¦  «         ‰j                             ‰¦  «         | S )
Nz#cannot override reserved namespace Ú_zcannot override `ú.z` with custom namespace z%overriding existing custom namespace z (on ú))Ú
stacklevel)r   ÚAttributeErrorÚgetattrr   Ú
isinstanceÚpropertyÚ
startswithr1   r   ÚUserWarningr	   r.   r   r   Úadd)r9   ÚmsgÚattrr   r   s      €€r   r!   z$_create_namespace.<locals>.namespace5   s  ø€ ØÕ'Ð'Ð'Ø@¸Ð@Ð@ˆCÝ  Ñ%Ô%Ð%Ý˜c 4¨Ñ.Ô.Ð.ˆdÐ;Ý˜$ÑÔð *¥:¨dµHÑ#=Ô#=ð *ÀÇÂÐQTÑAUÔAUð *Øl¨#¬,ÐlÐl¸ÐlÐlÐW_ÔWhÐlÐlÝ$ SÑ)Ô)Ð)ÝØT¸ÐTÐTÀSÄ\ÐTÐTÐTÝÝ*Ñ,Ô,ðñ ô ð õ 	T9 T¨8Ñ4Ô4Ñ5Ô5Ð5ØŒ×Ò˜4Ñ Ô Ð Øˆr   )r9   r"   r#   r"   r5   )r   r   r!   s   `` r   Ú_create_namespacerH   0   s/   øø€ ð
ð ð ð ð ð ð ð$ Ðr   c                ó6   — t          | t          j        ¦  «        S )uï  
    Decorator for registering custom functionality with a Polars Expr.

    Parameters
    ----------
    name
        Name under which the functionality will be accessed.

    See Also
    --------
    register_dataframe_namespace : Register functionality on a DataFrame.
    register_lazyframe_namespace : Register functionality on a LazyFrame.
    register_series_namespace : Register functionality on a Series.

    Examples
    --------
    >>> @pl.api.register_expr_namespace("pow_n")
    ... class PowersOfN:
    ...     def __init__(self, expr: pl.Expr) -> None:
    ...         self._expr = expr
    ...
    ...     def next(self, p: int) -> pl.Expr:
    ...         return (p ** (self._expr.log(p).ceil()).cast(pl.Int64)).cast(pl.Int64)
    ...
    ...     def previous(self, p: int) -> pl.Expr:
    ...         return (p ** (self._expr.log(p).floor()).cast(pl.Int64)).cast(pl.Int64)
    ...
    ...     def nearest(self, p: int) -> pl.Expr:
    ...         return (p ** (self._expr.log(p)).round(0).cast(pl.Int64)).cast(pl.Int64)
    >>>
    >>> df = pl.DataFrame([1.4, 24.3, 55.0, 64.001], schema=["n"])
    >>> df.select(
    ...     pl.col("n"),
    ...     pl.col("n").pow_n.next(p=2).alias("next_pow2"),
    ...     pl.col("n").pow_n.previous(p=2).alias("prev_pow2"),
    ...     pl.col("n").pow_n.nearest(p=2).alias("nearest_pow2"),
    ... )
    shape: (4, 4)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    â”‚ n      â”† next_pow2 â”† prev_pow2 â”† nearest_pow2 â”‚
    â”‚ ---    â”† ---       â”† ---       â”† ---          â”‚
    â”‚ f64    â”† i64       â”† i64       â”† i64          â”‚
    â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡
    â”‚ 1.4    â”† 2         â”† 1         â”† 1            â”‚
    â”‚ 24.3   â”† 32        â”† 16        â”† 32           â”‚
    â”‚ 55.0   â”† 64        â”† 32        â”† 64           â”‚
    â”‚ 64.001 â”† 128       â”† 64        â”† 64           â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )rH   Úplr   ©r   s    r   r   r   J   s   € õd ˜T¥2¤7Ñ+Ô+Ð+r   c                ó6   — t          | t          j        ¦  «        S )uO  
    Decorator for registering custom functionality with a Polars DataFrame.

    Parameters
    ----------
    name
        Name under which the functionality will be accessed.

    See Also
    --------
    register_expr_namespace : Register functionality on an Expr.
    register_lazyframe_namespace : Register functionality on a LazyFrame.
    register_series_namespace : Register functionality on a Series.

    Examples
    --------
    >>> @pl.api.register_dataframe_namespace("split")
    ... class SplitFrame:
    ...     def __init__(self, df: pl.DataFrame) -> None:
    ...         self._df = df
    ...
    ...     def by_first_letter_of_column_names(self) -> list[pl.DataFrame]:
    ...         return [
    ...             self._df.select([col for col in self._df.columns if col[0] == f])
    ...             for f in dict.fromkeys(col[0] for col in self._df.columns)
    ...         ]
    ...
    ...     def by_first_letter_of_column_values(self, col: str) -> list[pl.DataFrame]:
    ...         return [
    ...             self._df.filter(pl.col(col).str.starts_with(c))
    ...             for c in sorted(
    ...                 set(df.select(pl.col(col).str.slice(0, 1)).to_series())
    ...             )
    ...         ]
    >>>
    >>> df = pl.DataFrame(
    ...     data=[["xx", 2, 3, 4], ["xy", 4, 5, 6], ["yy", 5, 6, 7], ["yz", 6, 7, 8]],
    ...     schema=["a1", "a2", "b1", "b2"],
    ...     orient="row",
    ... )
    >>> df
    shape: (4, 4)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a1  â”† a2  â”† b1  â”† b2  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ xx  â”† 2   â”† 3   â”† 4   â”‚
    â”‚ xy  â”† 4   â”† 5   â”† 6   â”‚
    â”‚ yy  â”† 5   â”† 6   â”† 7   â”‚
    â”‚ yz  â”† 6   â”† 7   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    >>> df.split.by_first_letter_of_column_names()
    [shape: (4, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a1  â”† a2  â”‚
    â”‚ --- â”† --- â”‚
    â”‚ str â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ xx  â”† 2   â”‚
    â”‚ xy  â”† 4   â”‚
    â”‚ yy  â”† 5   â”‚
    â”‚ yz  â”† 6   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜,
    shape: (4, 2)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ b1  â”† b2  â”‚
    â”‚ --- â”† --- â”‚
    â”‚ i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 3   â”† 4   â”‚
    â”‚ 5   â”† 6   â”‚
    â”‚ 6   â”† 7   â”‚
    â”‚ 7   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    >>> df.split.by_first_letter_of_column_values("a1")
    [shape: (2, 4)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a1  â”† a2  â”† b1  â”† b2  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ xx  â”† 2   â”† 3   â”† 4   â”‚
    â”‚ xy  â”† 4   â”† 5   â”† 6   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜, shape: (2, 4)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a1  â”† a2  â”† b1  â”† b2  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ yy  â”† 5   â”† 6   â”† 7   â”‚
    â”‚ yz  â”† 6   â”† 7   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rH   rJ   r   rK   s    r   r   r      s   € õ~ ˜T¥2¤<Ñ0Ô0Ð0r   c                ó6   — t          | t          j        ¦  «        S )uµ  
    Decorator for registering custom functionality with a Polars LazyFrame.

    Parameters
    ----------
    name
        Name under which the functionality will be accessed.

    See Also
    --------
    register_expr_namespace : Register functionality on an Expr.
    register_dataframe_namespace : Register functionality on a DataFrame.
    register_series_namespace : Register functionality on a Series.

    Examples
    --------
    >>> @pl.api.register_lazyframe_namespace("types")
    ... class DTypeOperations:
    ...     def __init__(self, lf: pl.LazyFrame) -> None:
    ...         self._lf = lf
    ...
    ...     def split_by_column_dtypes(self) -> list[pl.LazyFrame]:
    ...         return [
    ...             self._lf.select(pl.col(tp))
    ...             for tp in dict.fromkeys(self._lf.collect_schema().dtypes())
    ...         ]
    ...
    ...     def upcast_integer_types(self) -> pl.LazyFrame:
    ...         return self._lf.with_columns(
    ...             pl.col(tp).cast(pl.Int64) for tp in (pl.Int8, pl.Int16, pl.Int32)
    ...         )
    >>>
    >>> lf = pl.LazyFrame(
    ...     data={"a": [1, 2], "b": [3, 4], "c": [5.6, 6.7]},
    ...     schema=[("a", pl.Int16), ("b", pl.Int32), ("c", pl.Float32)],
    ... )
    >>> lf.collect()
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a   â”† b   â”† c   â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ i16 â”† i32 â”† f32 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 1   â”† 3   â”† 5.6 â”‚
    â”‚ 2   â”† 4   â”† 6.7 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    >>> lf.types.upcast_integer_types().collect()
    shape: (2, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a   â”† b   â”† c   â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ i64 â”† i64 â”† f32 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 1   â”† 3   â”† 5.6 â”‚
    â”‚ 2   â”† 4   â”† 6.7 â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜

    >>> lf = pl.LazyFrame(
    ...     data=[["xx", 2, 3, 4], ["xy", 4, 5, 6], ["yy", 5, 6, 7], ["yz", 6, 7, 8]],
    ...     schema=["a1", "a2", "b1", "b2"],
    ...     orient="row",
    ... )
    >>> lf.collect()
    shape: (4, 4)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a1  â”† a2  â”† b1  â”† b2  â”‚
    â”‚ --- â”† --- â”† --- â”† --- â”‚
    â”‚ str â”† i64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ xx  â”† 2   â”† 3   â”† 4   â”‚
    â”‚ xy  â”† 4   â”† 5   â”† 6   â”‚
    â”‚ yy  â”† 5   â”† 6   â”† 7   â”‚
    â”‚ yz  â”† 6   â”† 7   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    >>> pl.collect_all(lf.types.split_by_column_dtypes())
    [shape: (4, 1)
    â”Œâ”€â”€â”€â”€â”€â”
    â”‚ a1  â”‚
    â”‚ --- â”‚
    â”‚ str â”‚
    â•žâ•â•â•â•â•â•¡
    â”‚ xx  â”‚
    â”‚ xy  â”‚
    â”‚ yy  â”‚
    â”‚ yz  â”‚
    â””â”€â”€â”€â”€â”€â”˜, shape: (4, 3)
    â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”
    â”‚ a2  â”† b1  â”† b2  â”‚
    â”‚ --- â”† --- â”† --- â”‚
    â”‚ i64 â”† i64 â”† i64 â”‚
    â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡
    â”‚ 2   â”† 3   â”† 4   â”‚
    â”‚ 4   â”† 5   â”† 6   â”‚
    â”‚ 5   â”† 6   â”† 7   â”‚
    â”‚ 6   â”† 7   â”† 8   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rH   rJ   r   rK   s    r   r   r   á   s   € õD ˜T¥2¤<Ñ0Ô0Ð0r   c                ó6   — t          | t          j        ¦  «        S )a§  
    Decorator for registering custom functionality with a polars Series.

    Parameters
    ----------
    name
        Name under which the functionality will be accessed.

    See Also
    --------
    register_expr_namespace : Register functionality on an Expr.
    register_dataframe_namespace : Register functionality on a DataFrame.
    register_lazyframe_namespace : Register functionality on a LazyFrame.

    Examples
    --------
    >>> @pl.api.register_series_namespace("math")
    ... class MathShortcuts:
    ...     def __init__(self, s: pl.Series) -> None:
    ...         self._s = s
    ...
    ...     def square(self) -> pl.Series:
    ...         return self._s * self._s
    ...
    ...     def cube(self) -> pl.Series:
    ...         return self._s * self._s * self._s
    >>>
    >>> s = pl.Series("n", [1.5, 31.0, 42.0, 64.5])
    >>> s.math.square().alias("s^2")
    shape: (4,)
    Series: 's^2' [f64]
    [
        2.25
        961.0
        1764.0
        4160.25
    ]
    >>> s = pl.Series("n", [1, 2, 3, 4, 5])
    >>> s.math.cube().alias("s^3")
    shape: (5,)
    Series: 's^3' [i64]
    [
        1
        8
        27
        64
        125
    ]
    )rH   rJ   r   rK   s    r   r   r   F  s   € õd ˜T¥2¤9Ñ-Ô-Ð-r   )r   r    r   r6   r#   r7   )r   r    r#   r7   )"Ú
__future__r   Úinspectr   Útypingr   r   r   Úwarningsr   Úpolars._reexportÚ	_reexportrJ   Úpolars._utils.variousr	   Úcollections.abcr
   Úpolarsr   r   r   r   Ú__all__ÚsetÚunionr   Ú__annotations__r   r   rH   r   r   r   r   r5   r   r   ú<module>r\      sÌ  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1àð :Ø(Ð(Ð(Ð(Ð(Ð(à9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ðð ð €ð "+ ¤ØQÐQ ¤¨r¬w¸¼ÀbÄiÐ PÐQÑQÔQð"Ð ð ð ð ñ ð
 €WˆT]„]€ðð ð ð ð ˜”ñ ô ð ð ð ð ð ð42,ð 2,ð 2,ð 2,ðj_1ð _1ð _1ð _1ðDb1ð b1ð b1ð b1ðJ2.ð 2.ð 2.ð 2.ð 2.ð 2.r   