Ë
    ðmxi«'  ã                  óî   — d dl mZ d dlmZmZmZ d dlmZ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 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ÚNoReturn)ÚExprKindÚExprNode)Úflatten)ÚExpr)ÚIterable)Ú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                ó&   — t        | j                  Ž S ©N)r
   Ú_nodes)Úselfs    úI/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/selectors.pyÚ_to_exprzSelector._to_expr   s   € Ü�T—[‘[Ð!Ð!ó    c                ó°   — t        |t        «      rd}t        |«      ‚| j                  «       j	                  t        t        j                  d|d¬«      «      S )Nz=unsupported operand type(s) for op: ('Selector' + 'Selector')Ú__add__T©Ú
str_as_lit)Ú
isinstancer   Ú	TypeErrorr   Ú_append_noder   r   ÚELEMENTWISE)r   ÚotherÚmsgs      r   r   zSelector.__add__   sH   € Ü�eœXÔ&ØQˆCÜ˜C“.Ð Ø�}‰}‹×+Ñ+Ü”X×)Ñ)¨9°eÈÔMó
ð 	
r   c           	     óð   — t        |t        «      r-| j                  t        t        j
                  d|dd¬«      «      S | j                  «       j                  t        t        j
                  d|d¬«      «      S )NÚ__or__T©r   Úallow_multi_outputr   ©r   r   r   r   r   r   r   ©r   r    s     r   r#   zSelector.__or__   sk   € Ü�eœXÔ&Ø×$Ñ$ÜÜ×(Ñ(ØØØ#Ø'+ôóð ð �}‰}‹×+Ñ+Ü”X×)Ñ)¨8°UÀtÔLó
ð 	
r   c           	     óð   — t        |t        «      r-| j                  t        t        j
                  d|dd¬«      «      S | j                  «       j                  t        t        j
                  d|d¬«      «      S )NÚ__and__Tr$   r   r&   r'   s     r   r)   zSelector.__and__,   sk   € Ü�eœXÔ&Ø×$Ñ$ÜÜ×(Ñ(ØØØ#Ø'+ôóð ð �}‰}‹×+Ñ+Ü”X×)Ñ)¨9°eÈÔMó
ð 	
r   c                ó   — t         ‚r   ©ÚNotImplementedErrorr'   s     r   Ú__rsub__zSelector.__rsub__;   ó   € Ü!Ð!r   c                ó   — t         ‚r   r+   r'   s     r   Ú__rand__zSelector.__rand__>   r.   r   c                ó   — t         ‚r   r+   r'   s     r   Ú__ror__zSelector.__ror__A   r.   r   N)Úreturnr
   )r    r   r3   r
   )r    r   r3   r   )
Ú__name__Ú
__module__Ú__qualname__r   r   r#   r)   r-   r0   r2   © r   r   r   r      s%   „ ó"ó
ó
ó
ó"ó"ô"r   r   c                 ób   — t        | «      }t        t        t        j                  d|¬«      «      S )aj  Select columns based on their dtype.

    Arguments:
        dtypes: one or data types to select

    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]]
    zselectors.by_dtype)Údtypes)r	   r   r   r   ÚSELECTOR)r9   Ú	flatteneds     r   Úby_dtyper<   E   s(   € ô. ˜“€IÜ”HœX×.Ñ.Ð0DÈYÔWÓXÐXr   c                óL   — t        t        t        j                  d| ¬«      «      S )aw  Select all columns that match the given regex pattern.

    Arguments:
        pattern: A valid regular expression pattern.

    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
    zselectors.matches©Úpattern©r   r   r   r:   r>   s    r   ÚmatchesrA   `   s   € ô, ”HœX×.Ñ.Ð0CÈWÔUÓVÐVr   c                 óH   — t        t        t        j                  d«      «      S )uÆ  Select numeric columns.

    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 â”‚
        â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    zselectors.numericr@   r7   r   r   ÚnumericrC   y   s   € ô. ”HœX×.Ñ.Ð0CÓDÓEÐEr   c                 óH   — t        t        t        j                  d«      «      S )u}  Select boolean columns.

    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  â”‚       |
        |  â””â”€â”€â”€â”€â”€â”€â”€â”˜       |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    zselectors.booleanr@   r7   r   r   ÚbooleanrE   “   s   € ô6 ”HœX×.Ñ.Ð0CÓDÓEÐEr   c                 óH   — t        t        t        j                  d«      «      S )uG  Select string columns.

    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   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    zselectors.stringr@   r7   r   r   ÚstringrG   ±   s   € ô. ”HœX×.Ñ.Ð0BÓCÓDÐDr   c                 óH   — t        t        t        j                  d«      «      S )uÓ  Select categorical columns.

    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   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    zselectors.categoricalr@   r7   r   r   ÚcategoricalrI   Ë   s   € ô2 ”HœX×.Ñ.Ð0GÓHÓIÐIr   c                 óH   — t        t        t        j                  d«      «      S )a¯  Select all columns.

    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
    zselectors.allr@   r7   r   r   ÚallrK   ç   s   € ô" ”HœX×.Ñ.°Ó@ÓAÐAr   Nc                óN   — t        t        t        j                  d| |¬«      «      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.

    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]]
    zselectors.datetime©Ú	time_unitÚ	time_zoner@   rM   s     r   ÚdatetimerP   û   s,   € ôh ÜÜ×ÑØ ØØô		
óð r   )rK   rE   r<   rI   rP   rA   rC   rG   )r9   z3DType | type[DType] | Iterable[DType | type[DType]]r3   r   )r?   Ústrr3   r   )r3   r   )N)Ú*N)rN   z$TimeUnit | Iterable[TimeUnit] | NonerO   z7str | timezone | Iterable[str | timezone | None] | Noner3   r   )Ú
__future__r   Útypingr   r   r   Únarwhals._expression_parsingr   r   Únarwhals._utilsr	   Únarwhals.exprr
   Úcollections.abcr   rP   r   Únarwhals.dtypesr   Únarwhals.typingr   r   r<   rA   rC   rE   rG   rI   rK   Ú__all__r7   r   r   ú<module>r\      sŒ   ðÝ "ç /Ñ /ç ;Ý #Ý áÝ(Ý!å%Ý(ô1"ˆtô 1"óhYó6Wó2Fó4Fó<Eó4Jó8Bð* 7;ØITð;Ø3ð;àFð;ð ó;ò|	�r   