§
    q-PhW3  ã                  ó<  — U d dl mZ d dlmZ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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)ÚTYPE_CHECKINGÚCallableÚGenericÚTypeVar)ÚwarnN)Úfind_stacklevel)Ú	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     úJ/var/www/html/test/jupyter/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(   r/   © 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                ó2  •— ‰t           v rd‰›}t          |¦  «        ‚t          ‰‰¦  «        r/t          d‰›d‰j        ›dt
          t          ¦   «         ¬¦  «         t          ‰‰t          ‰| ¦  «        ¦  «         ‰j	         
                    ‰¦  «         | S )Nz#cannot override reserved namespace z%Overriding existing custom namespace z (on ú))Ú
stacklevel)r   ÚAttributeErrorÚhasattrr   r0   ÚUserWarningr	   r-   r   r   Úadd)r8   Úmsgr   r   s     €€r   r    z$_create_namespace.<locals>.namespace2   s°   ø€ ØÕ'Ð'Ð'Ø@¸Ð@Ð@ˆCÝ  Ñ%Ô%Ð%ÝS˜$ÑÔð 	ÝØV¸ÐVÐVÀSÄ\ÐVÐVÐVÝÝ*Ñ,Ô,ðñ ô ð õ 	T9 T¨8Ñ4Ô4Ñ5Ô5Ð5ØŒ×Ò˜4Ñ Ô Ð Øˆr   )r8   r!   r"   r!   r4   )r   r   r    s   `` r   Ú_create_namespacerA   -   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           â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )rA   Úplr   ©r   s    r   r   r   D   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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rA   rC   r
   rD   s    r   r   r   y   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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rA   rC   r   rD   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
    ]
    )rA   rC   r   rD   s    r   r   r   @  s   € õd ˜T¥2¤9Ñ-Ô-Ð-r   )r   r   r   r5   r"   r6   )r   r   r"   r6   )Ú
__future__r   Útypingr   r   r   r   Úwarningsr   Úpolars._reexportÚ	_reexportrC   Úpolars._utils.variousr	   Úpolarsr
   r   r   r   Ú__all__ÚsetÚunionr   Ú__annotations__r   r   rA   r   r   r   r   r4   r   r   ú<module>rS      s®  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 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]„]€ðð ð ð ð ˜”ñ ô ð ð ð ð ð ð.2,ð 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   