Ë
    z�h§*  ã                  ó  — d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dl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 d dlmZ  G d„ de«      Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	 	 d	 	 	 	 	 dd„Zg d¢Zy)é    )Úannotations)ÚTYPE_CHECKING)ÚAny)ÚIterable)ÚNoReturn)ÚExprMetadata)Úcombine_metadata)ÚExpr)Úflatten)Útimezone)ÚDType)ÚTimeUnitc                  óD   — e Zd Zd	d„Zd
d„Zd
d„Zd
d„Zdd„Zdd„Zdd„Z	y)ÚSelectorc                óB   — t        | j                  | j                  «      S ©N)r
   Ú_to_compliant_exprÚ	_metadata)Úselfs    úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/narwhals/selectors.pyÚ_to_exprzSelector._to_expr   s   € Ü�D×+Ñ+¨T¯^©^Ó<Ð<ó    c                ób   — t        |t        «      rd}t        |«      ‚| j                  «       |z   S )Nz=unsupported operand type(s) for op: ('Selector' + 'Selector'))Ú
isinstancer   Ú	TypeErrorr   )r   ÚotherÚmsgs      r   Ú__add__zSelector.__add__   s,   € Ü�eœXÔ&ØQˆCÜ˜C“.Ð Ø�}‰}‹ Ñ&Ð&r   c           
     ó”   ‡ ‡— t        ‰t        «      r$‰ j                  ˆˆ fd„t        ‰ ‰ddd¬«      «      S ‰ j	                  «       ‰z  S )Nc                óJ   •— ‰j                  | «      ‰j                  | «      z  S r   ©r   ©Úplxr   r   s    €€r   ú<lambda>z!Selector.__or__.<locals>.<lambda>!   ó#   ø€ ˜D×3Ñ3°CÓ8¸5×;SÑ;SÐTWÓ;XÑX€ r   FT©Ú
str_as_litÚallow_multi_outputÚto_single_output©r   r   Ú	__class__r	   r   ©r   r   s   ``r   Ú__or__zSelector.__or__   óK   ù€ Ü�eœXÔ&Ø—>‘>ÜXÜ ØØØ$Ø'+Ø%*ôó	ð 	ð �}‰}‹ Ñ&Ð&r   c           
     ó”   ‡ ‡— t        ‰t        «      r$‰ j                  ˆˆ fd„t        ‰ ‰ddd¬«      «      S ‰ j	                  «       ‰z  S )Nc                óJ   •— ‰j                  | «      ‰j                  | «      z  S r   r!   r"   s    €€r   r$   z"Selector.__and__.<locals>.<lambda>/   r%   r   FTr&   r*   r,   s   ``r   Ú__and__zSelector.__and__,   r.   r   c                ó   — t         ‚r   ©ÚNotImplementedErrorr,   s     r   Ú__rsub__zSelector.__rsub__:   ó   € Ü!Ð!r   c                ó   — t         ‚r   r3   r,   s     r   Ú__rand__zSelector.__rand__=   r6   r   c                ó   — t         ‚r   r3   r,   s     r   Ú__ror__zSelector.__ror__@   r6   r   N)Úreturnr
   )r   r   r;   r
   )r   r   r;   r   )
Ú__name__Ú
__module__Ú__qualname__r   r   r-   r1   r5   r8   r:   © r   r   r   r      s%   „ ó=ó'ó'ó'ó"ó"ô"r   r   c                 ó\   ‡— t        | «      Št        ˆfd„t        j                  «       «      S )a’  Select columns based on their dtype.

    Arguments:
        dtypes: one or data types to select

    Returns:
        A new expression.

    Examples:
        >>> import pyarrow as pa
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pa.table({"a": [1, 2], "b": ["x", "y"], "c": [4.1, 2.3]})
        >>> df = nw.from_native(df_native)

        Let's select int64 and float64  dtypes and multiply each value by 2:

        >>> df.select(ncs.by_dtype(nw.Int64, nw.Float64) * 2).to_native()
        pyarrow.Table
        a: int64
        c: double
        ----
        a: [[2,4]]
        c: [[8.2,4.6]]
    c                ó:   •— | j                   j                  ‰«      S r   )Ú	selectorsÚby_dtype)r#   Ú	flatteneds    €r   r$   zby_dtype.<locals>.<lambda>`   s   ø€ �C—M‘M×*Ñ*¨9Ó5€ r   )r   r   r   Úselector_multi_unnamed)ÚdtypesrD   s    @r   rC   rC   D   s*   ø€ ô4 ˜“€IÜÛ5Ü×+Ñ+Ó-óð r   c                óF   ‡ — t        ˆ fd„t        j                  «       «      S )aî  Select all columns that match the given regex pattern.

    Arguments:
        pattern: A valid regular expression pattern.

    Returns:
        A new expression.

    Examples:
        >>> import pandas as pd
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pd.DataFrame(
        ...     {
        ...         "bar": [123, 456],
        ...         "baz": [2.0, 5.5],
        ...         "zap": [0, 1],
        ...     }
        ... )
        >>> df = nw.from_native(df_native)

        Let's select column names containing an 'a', preceded by a character that is not 'z':

        >>> df.select(ncs.matches("[^z]a")).to_native()
           bar  baz
        0  123  2.0
        1  456  5.5
    c                ó:   •— | j                   j                  ‰«      S r   )rB   Úmatches)r#   Úpatterns    €r   r$   zmatches.<locals>.<lambda>ƒ   s   ø€ �C—M‘M×)Ñ)¨'Ó2€ r   ©r   r   rE   )rJ   s   `r   rI   rI   e   s!   ø€ ô: Û2Ü×+Ñ+Ó-óð r   c                 ó@   — t        d„ t        j                  «       «      S )uî  Select numeric columns.

    Returns:
        A new expression.

    Examples:
        >>> import polars as pl
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pl.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [4.1, 2.3]})
        >>> df = nw.from_native(df_native)

        Let's select numeric dtypes and multiply each value by 2:

        >>> df.select(ncs.numeric() * 2).to_native()
        shape: (2, 2)
        â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”�
        â”‚ a   â”† c   â”‚
        â”‚ --- â”† --- â”‚
        â”‚ i64 â”† f64 â”‚
        â•žâ•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•¡
        â”‚ 2   â”† 8.2 â”‚
        â”‚ 4   â”† 4.6 â”‚
        â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    c                ó6   — | j                   j                  «       S r   )rB   Únumeric©r#   s    r   r$   znumeric.<locals>.<lambda>£   ó   € �C—M‘M×)Ñ)Ó+€ r   rK   r?   r   r   rN   rN   ˆ   s   € ô4 Ù+¬\×-PÑ-PÓ-Róð r   c                 ó@   — t        d„ t        j                  «       «      S )u¥  Select boolean columns.

    Returns:
        A new expression.

    Examples:
        >>> import polars as pl
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pl.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [False, True]})
        >>> df = nw.from_native(df_native)

        Let's select boolean dtypes:

        >>> df.select(ncs.boolean())
        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        |Narwhals DataFrame|
        |------------------|
        |  shape: (2, 1)   |
        |  â”Œâ”€â”€â”€â”€â”€â”€â”€â”�       |
        |  â”‚ c     â”‚       |
        |  â”‚ ---   â”‚       |
        |  â”‚ bool  â”‚       |
        |  â•žâ•�â•�â•�â•�â•�â•�â•�â•¡       |
        |  â”‚ false â”‚       |
        |  â”‚ true  â”‚       |
        |  â””â”€â”€â”€â”€â”€â”€â”€â”˜       |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    c                ó6   — | j                   j                  «       S r   )rB   ÚbooleanrO   s    r   r$   zboolean.<locals>.<lambda>Æ   rP   r   rK   r?   r   r   rS   rS   §   s   € ô< Ù+¬\×-PÑ-PÓ-Róð r   c                 ó@   — t        d„ t        j                  «       «      S )uo  Select string columns.

    Returns:
        A new expression.

    Examples:
        >>> import polars as pl
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pl.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [False, True]})
        >>> df = nw.from_native(df_native)

        Let's select string dtypes:

        >>> df.select(ncs.string()).to_native()
        shape: (2, 1)
        â”Œâ”€â”€â”€â”€â”€â”�
        â”‚ b   â”‚
        â”‚ --- â”‚
        â”‚ str â”‚
        â•žâ•�â•�â•�â•�â•�â•¡
        â”‚ x   â”‚
        â”‚ y   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    c                ó6   — | j                   j                  «       S r   )rB   ÚstringrO   s    r   r$   zstring.<locals>.<lambda>å   s   € �C—M‘M×(Ñ(Ó*€ r   rK   r?   r   r   rV   rV   Ê   s   € ô4 Ù*¬L×,OÑ,OÓ,Qóð r   c                 ó@   — t        d„ t        j                  «       «      S )uû  Select categorical columns.

    Returns:
        A new expression.

    Examples:
        >>> import polars as pl
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pl.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [False, True]})

        Let's convert column "b" to categorical, and then select categorical dtypes:

        >>> df = nw.from_native(df_native).with_columns(
        ...     b=nw.col("b").cast(nw.Categorical())
        ... )
        >>> df.select(ncs.categorical()).to_native()
        shape: (2, 1)
        â”Œâ”€â”€â”€â”€â”€â”�
        â”‚ b   â”‚
        â”‚ --- â”‚
        â”‚ cat â”‚
        â•žâ•�â•�â•�â•�â•�â•¡
        â”‚ x   â”‚
        â”‚ y   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    c                ó6   — | j                   j                  «       S r   )rB   ÚcategoricalrO   s    r   r$   zcategorical.<locals>.<lambda>  s   € �C—M‘M×-Ñ-Ó/€ r   rK   r?   r   r   rY   rY   é   s    € ô8 Ù/Ü×+Ñ+Ó-óð r   c                 ó@   — t        d„ t        j                  «       «      S )a×  Select all columns.

    Returns:
        A new expression.

    Examples:
        >>> import pandas as pd
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> df_native = pd.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [False, True]})
        >>> df = nw.from_native(df_native)

        Let's select all dtypes:

        >>> df.select(ncs.all()).to_native()
           a  b      c
        0  1  x  False
        1  2  y   True
    c                ó6   — | j                   j                  «       S r   )rB   ÚallrO   s    r   r$   zall.<locals>.<lambda>   s   € �C—M‘M×%Ñ%Ó'€ r   rK   r?   r   r   r\   r\     s   € ô( Ù'¬×)LÑ)LÓ)Nóð r   Nc                óJ   ‡ ‡— t        ˆ ˆfd„t        j                  «       «      S )a  Select all datetime columns, optionally filtering by time unit/zone.

    Arguments:
        time_unit: One (or more) of the allowed timeunit precision strings, "ms", "us",
            "ns" and "s". Omit to select columns with any valid timeunit.
        time_zone: Specify which timezone(s) to select:

            * One or more timezone strings, as defined in zoneinfo (to see valid options
                run `import zoneinfo; zoneinfo.available_timezones()` for a full list).
            * Set `None` to select Datetime columns that do not have a timezone.
            * Set `"*"` to select Datetime columns that have *any* timezone.

    Returns:
        A new expression.

    Examples:
        >>> from datetime import datetime, timezone
        >>> import pyarrow as pa
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>>
        >>> utc_tz = timezone.utc
        >>> data = {
        ...     "tstamp_utc": [
        ...         datetime(2023, 4, 10, 12, 14, 16, 999000, tzinfo=utc_tz),
        ...         datetime(2025, 8, 25, 14, 18, 22, 666000, tzinfo=utc_tz),
        ...     ],
        ...     "tstamp": [
        ...         datetime(2000, 11, 20, 18, 12, 16, 600000),
        ...         datetime(2020, 10, 30, 10, 20, 25, 123000),
        ...     ],
        ...     "numeric": [3.14, 6.28],
        ... }
        >>> df_native = pa.table(data)
        >>> df_nw = nw.from_native(df_native)
        >>> df_nw.select(ncs.datetime()).to_native()
        pyarrow.Table
        tstamp_utc: timestamp[us, tz=UTC]
        tstamp: timestamp[us]
        ----
        tstamp_utc: [[2023-04-10 12:14:16.999000Z,2025-08-25 14:18:22.666000Z]]
        tstamp: [[2000-11-20 18:12:16.600000,2020-10-30 10:20:25.123000]]

        Select only datetime columns that have any time_zone specification:

        >>> df_nw.select(ncs.datetime(time_zone="*")).to_native()
        pyarrow.Table
        tstamp_utc: timestamp[us, tz=UTC]
        ----
        tstamp_utc: [[2023-04-10 12:14:16.999000Z,2025-08-25 14:18:22.666000Z]]
    c                ó>   •— | j                   j                  ‰‰¬«      S )N©Ú	time_unitÚ	time_zone)rB   Údatetime)r#   r`   ra   s    €€r   r$   zdatetime.<locals>.<lambda>\  s   ø€ �C—M‘M×*Ñ*°YÈ)Ð*ÓT€ r   rK   r_   s   ``r   rb   rb   $  s"   ù€ ôn ÜTÜ×+Ñ+Ó-óð r   )r\   rS   rC   rY   rb   rI   rN   rV   )rF   z3DType | type[DType] | Iterable[DType | type[DType]]r;   r   )rJ   Ústrr;   r   )r;   r   )N)Ú*N)r`   z$TimeUnit | Iterable[TimeUnit] | Nonera   z7str | timezone | Iterable[str | timezone | None] | Noner;   r   )Ú
__future__r   Útypingr   r   r   r   Únarwhals._expression_parsingr   r	   Únarwhals.exprr
   Únarwhals.utilsr   rb   r   Únarwhals.dtypesr   Únarwhals.typingr   r   rC   rI   rN   rS   rV   rY   r\   Ú__all__r?   r   r   ú<module>rm      s�   ðÝ "å  Ý Ý Ý å 5Ý 9Ý Ý "áÝ!å%Ý(ô-"ˆtô -"ó`óB óFó> óFó>óDð4 7;ØITð:Ø3ð:àFð:ð ó:òz	�r   