Ë
    èË€hW3  ã                  ó`  — 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y)é    )Ú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              #  ó4   K  — | ]  }|j                   –— Œ y ­w©N)Ú
_accessors)Ú.0Úclss     úf/var/www/html/wine-match-dev/backend/winematch-backend/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        ‰‰«      r+t        d‰›d‰j                  ›dt
        t        «       ¬«       t        ‰‰t        ‰| «      «       ‰j                  j                  ‰«       | S )Nz#cannot override reserved namespace z%Overriding existing custom namespace z (on ú))Ú
stacklevel)r   ÚAttributeErrorÚhasattrr   r.   ÚUserWarningr	   r&   r   r   Úadd)Úns_classÚmsgr   r!   s     €€r   r"   z$_create_namespace.<locals>.namespace2   s‚   ø€ ØÔ'Ñ'Ø7¸°xÐ@ˆCÜ  Ó%Ð%ÜS˜$ÔÜØ7¸°x¸uÀSÇ\Á\ÐDTÐTUÐVÜÜ*Ó,õô 	Tœ9 T¨8Ó4Ô5Ø‰×Ñ˜4Ô Øˆr$   )r;   r+   r,   r+   r2   )r!   r   r"   s   `` r   Ú_create_namespacer=   -   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           â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    )r=   Úplr   ©r!   s    r   r   r   D   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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )r=   r?   r
   r@   s    r   r   r   y   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   â”‚
    â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜]
    )r=   r?   r   r@   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
    ]
    )r=   r?   r   r@   s    r   r   r   @  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,   rD   )Ú
__future__r   Útypingr   r   r   r   Úwarningsr   Úpolars._reexportÚ	_reexportr?   Úpolars._utils.variousr	   Úpolarsr
   r   r   r   Ú__all__ÚsetÚunionr   Ú__annotations__r   r   r=   r   r   r   r   r2   r$   r   ú<module>rP      s³   ðÞ "ç <Ó <Ý å Ý 1áß9Ó9ò€ð "+ §¡ÙQ §¡¨r¯w©w¸¿¹ÀbÇiÁiÐ PÔQð"Ð hó ñ
 ˆTƒ]€ô˜‘ô ð Ø
ðØ?ðà#óó.2,ój_1óDb1ôJ2.r$   