ó
    à'·hÉ4  ã                  ót  • % S SK Jr  S SKJrJrJrJr  S SKJr  S SK	J
r  S SKJr  \(       a  S SKJrJrJrJr  / SQr\R*                  " S \R                  \R                   \R"                  \R$                  4 5       6 rS	\S
'   \" S5      r " S S\\   5      r      SS jrSS jrSS jrSS jrSS jrg)é    )Ú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              #  ó8   #   • U  H  oR                   v •  M     g 7f©N)Ú
_accessors)Ú.0Úclss     Ú]C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\polars/api.pyÚ	<genexpr>r      s   é € ÐQÒ P˜‡n†nÒ Pùs   ‚zset[str]Ú_reserved_namespacesÚNSc                  ó,   • \ rS rSrSrSS jrSS jrSrg)	Ú	NameSpaceé   zHEstablish property-like namespace object for user-defined functionality.c                ó   • Xl         X l        g r   ©Ú	_accessorÚ_ns)ÚselfÚnameÚ	namespaces      r   Ú__init__ÚNameSpace.__init__    s   € ØŒØó    c                ór   • Uc  U R                   $ U R                  U5      n[        XR                  U5        U$ r   )r!   Úsetattrr    )r"   Úinstancer   Úns_instances       r   Ú__get__ÚNameSpace.__get__$   s3   € ØÑØ—8‘8ˆOà—h‘h˜xÓ(ˆÜŸ.™.¨+Ô6ØÐr'   r   N)r#   Ústrr$   útype[NS]ÚreturnÚNone)r*   z	NS | Noner   r/   r0   zNS | type[NS])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r,   Ú__static_attributes__© r'   r   r   r      s   † ÙRô÷r'   r   c                ó   ^ ^• SUU 4S jjnU$ )z>Register custom namespace against the underlying Polars class.c                ó  >• T[         ;   a  ST< 3n[        U5      e[        TT5      (       a*  [        ST< STR                  < S3[
        [        5       S9  [        TT[        TU 5      5        TR                  R                  T5        U $ )Nz#cannot override reserved namespace z%Overriding existing custom namespace z (on Ú))Ú
stacklevel)r   ÚAttributeErrorÚhasattrr   r2   ÚUserWarningr	   r)   r   r   Úadd)Úns_classÚmsgr   r#   s     €€r   r$   Ú$_create_namespace.<locals>.namespace2   s…   ø€ ØÔ'Ó'Ø7¸±xÐ@ˆCÜ  Ó%Ð%ÜS˜$×ÑÜØ7¸±x¸uÀSÇ\Á\ÑDTÐTUÐVÜÜ*Ó,òô 	Tœ9 T¨8Ó4Ô5Ø‰×Ñ˜4Ô Øˆr'   )rA   r/   r0   r/   r8   )r#   r   r$   s   `` r   Ú_create_namespacerD   -   s   ù€ ÷
ð ð Ðr'   c                ó6   • [        U [        R                  5      $ )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   D   s   € ôd ˜T¤2§7¡7Ó+Ð+r'   c                ó6   • [        U [        R                  5      $ )uç  
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   y   s   € ô~ ˜T¤2§<¡<Ó0Ð0r'   c                ó6   • [        U [        R                  5      $ )uE  
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   • [        U [        R                  5      $ )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   @  s   € ôd ˜T¤2§9¡9Ó-Ð-r'   )r#   r.   r   z+type[Expr | DataFrame | LazyFrame | Series]r0   úCallable[[type[NS]], type[NS]])r#   r.   r0   rK   )Ú
__future__r   Útypingr   r   r   r   Úwarningsr   Úpolars._reexportÚ	_reexportrF   Úpolars._utils.variousr	   Úpolarsr
   r   r   r   Ú__all__ÚsetÚunionr   Ú__annotations__r   r   rD   r   r   r   r   r8   r'   r   Ú<module>rW      s±   ðÞ "ç <Ó <Ý å Ý 1æß9Ó9ò€ð "%§¢ÙQ §¡¨r¯w©w¸¿¹ÀbÇiÁiÑ PÓQð"Ð hó ñ
 ˆTƒ]€ô˜‘ô ð Ø
ðØ?ðà#ôô.2,ôj_1ôDb1õJ2.r'   