Ë
    “«ñiž4  ã                  ót  — 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j0                  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!y)é    )Ú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              #  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Ú
_accessors)Ú.0Úclss     úC/home/work/apex_v16/venv/lib/python3.12/site-packages/polars/api.pyú	<genexpr>r      s   è ø€ ÒQ˜€c‡n…nÑQùs   ‚zset[str]Ú_reserved_namespacesÚNSc                  ó    — e Zd ZdZdd„Zdd„Zy)Ú	NameSpacezHEstablish property-like namespace object for user-defined functionality.c                ó    — || _         || _        y r   )Ú	_accessorÚ_ns)ÚselfÚnameÚ	namespaces      r   Ú__init__zNameSpace.__init__#   s   € ØˆŒØˆó    c                ór   — |€| j                   S | j                  |«      }t        || j                  |«       |S r   )r    Úsetattrr   )r!   Úinstancer   Úns_instances       r   Ú__get__zNameSpace.__get__'   s5   € ØÐØ—8‘8ˆOà—h‘h˜xÓ(ˆÜ˜$Ÿ.™.¨+Ô6ØÐr%   N)r"   Ústrr#   útype[NS]ÚreturnÚNone)r(   z	NS | Noner   r,   r-   zNS | type[NS])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r*   © r%   r   r   r       s   „ ÙRóôr%   r   c                ó   ‡ ‡— dˆˆ fd„}|S )z>Register custom namespace against the underlying Polars class.c                ó¼  •— ‰t         v rd‰›}t        |«      ‚t        ‰‰d «      x}t        |«      s!t	        |t
        «      s‰j                  d«      r*d‰j                  › d‰› d| j                  ›}t        |«      ‚t        d‰›d‰j                  › dt        t        «       ¬	«       t        ‰‰t        ‰| «      «       ‰j                  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Ú
startswithr/   r   ÚUserWarningr	   r'   r   r   Úadd)Úns_classÚmsgÚattrr   r"   s      €€r   r#   z$_create_namespace.<locals>.namespace5   sØ   ø€ ØÔ'Ñ'Ø7¸°xÐ@ˆCÜ  Ó%Ð%Ü˜c 4¨Ó.Ð.ˆdÐ;Ü˜$Ô¤:¨d´HÔ#=ÀÇÁÐQTÔAUØ)¨#¯,©,¨°q¸¸Ð>VÐW_×WhÑWhÐVkÐlÜ$ SÓ)Ð)ÜØ7¸°x¸uÀSÇ\Á\ÀNÐRSÐTÜÜ*Ó,õô 	Tœ9 T¨8Ó4Ô5Ø‰×Ñ˜4Ô Øˆr%   )rA   r,   r-   r,   r3   )r"   r   r#   s   `` r   Ú_create_namespacerD   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           â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )rD   Úplr   ©r"   s    r   r   r   J   s   € ôd ˜T¤2§7¡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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rD   rF   r   rG   s    r   r   r      s   € ô~ ˜T¤2§<¡<Ó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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )rD   rF   r   rG   s    r   r   r   á   s   € ôD ˜T¤2§<¡<Ó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
    ]
    )rD   rF   r   rG   s    r   r   r   F  s   € ôd ˜T¤2§9¡9Ó-Ð-r%   )r"   r+   r   z+type[Expr | DataFrame | LazyFrame | Series]r-   úCallable[[type[NS]], type[NS]])r"   r+   r-   rK   )"Ú
__future__r   Úinspectr   Útypingr   r   r   Úwarningsr   Úpolars._reexportÚ	_reexportrF   Úpolars._utils.variousr	   Úcollections.abcr
   Úpolarsr   r   r   r   Ú__all__ÚsetÚunionr   Ú__annotations__r   r   rD   r   r   r   r   r3   r%   r   ú<module>rY      s¹   ðÞ "å ß 2Ñ 2Ý å Ý 1áÝ(ç9Ó9ò€ð "+ §¡ÙQ §¡¨r¯w©w¸¿¹ÀbÇiÁiÐ PÔQð"Ð hó ñ
 ˆTƒ]€ô˜‘ô ð Ø
ðØ?ðà#óó42,ój_1óDb1ôJ2.r%   