
    -Ph)                        d dl mZ d dlmZ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  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dS )$    )annotations)TYPE_CHECKINGAnyIterableNoReturn)ExprMetadatacombine_metadata)flatten)Expr)timezone)DType)TimeUnitc                  F    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	dS )Selectorreturnr   c                6    t          | j        | j                  S N)r   _to_compliant_expr	_metadata)selfs    R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/selectors.py_to_exprzSelector._to_expr   s    D+T^<<<    otherr   c                |    t          |t                    rd}t          |          |                                 |z   S )Nz=unsupported operand type(s) for op: ('Selector' + 'Selector'))
isinstancer   	TypeErrorr   )r   r   msgs      r   __add__zSelector.__add__   s8    eX&& 	!QCC.. }}&&r   c           
          t          t                    r,                      fdt           ddd                    S                                  z  S )Nc                Z                         |                                |           z  S r   r   plxr   r   s    r   <lambda>z!Selector.__or__.<locals>.<lambda>   )    D33C885;S;STW;X;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__   q    eX&& 
	>>XXXXX $'+%*  	 	 	 }}&&r   c           
          t          t                    r,                      fdt           ddd                    S                                  z  S )Nc                Z                         |                                |           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   r   c                    t           r   NotImplementedErrorr-   s     r   __rsub__zSelector.__rsub__6       !!r   c                    t           r   r4   r-   s     r   __rand__zSelector.__rand__9   r7   r   c                    t           r   r4   r-   s     r   __ror__zSelector.__ror__<   r7   r   N)r   r   )r   r   r   r   )r   r   r   r   )
__name__
__module____qualname__r   r   r.   r2   r6   r9   r;    r   r   r   r      s        = = = =' ' ' '' ' ' '' ' ' '" " " "" " " "" " " " " "r   r   dtypes3DType | type[DType] | Iterable[DType | type[DType]]r   c                 j    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                8    | j                                       S r   )	selectorsby_dtype)r$   	flatteneds    r   r%   zby_dtype.<locals>.<lambda>\   s    CM**955 r   )r
   r   r   selector_multi_unnamed)r@   rF   s    @r   rE   rE   @   s:    4 I5555+--  r   patternstrc                L     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                8    | j                                       S r   )rD   matches)r$   rH   s    r   r%   zmatches.<locals>.<lambda>{   s    CM))'22 r   r   r   rG   )rH   s   `r   rL   rL   a   s.    2 2222L4W4Y4Y  r   c                 F    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                4    | j                                         S r   )rD   numericr$   s    r   r%   znumeric.<locals>.<lambda>       CM))++ r   rM   r?   r   r   rP   rP      s'    4 ++\-P-R-R  r   c                 F    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                4    | j                                         S r   )rD   booleanrQ   s    r   r%   zboolean.<locals>.<lambda>   rR   r   rM   r?   r   r   rU   rU      s'    < ++\-P-R-R  r   c                 F    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                4    | j                                         S r   )rD   stringrQ   s    r   r%   zstring.<locals>.<lambda>   s    CM((** r   rM   r?   r   r   rX   rX      s'    4 **L,O,Q,Q  r   c                 F    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                4    | j                                         S r   )rD   categoricalrQ   s    r   r%   zcategorical.<locals>.<lambda>   s    CM--// r   rM   r?   r   r   r[   r[      s'    8 //1T1V1V  r   c                 F    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                4    | j                                         S r   )rD   allrQ   s    r   r%   zall.<locals>.<lambda>  s    CM%%'' r   rM   r?   r   r   r^   r^     s'    ( '')L)N)N  r   N*N	time_unit$TimeUnit | Iterable[TimeUnit] | None	time_zone7str | timezone | Iterable[str | timezone | None] | Nonec                P     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                                       S )Nra   rc   )rD   datetime)r$   ra   rc   s    r   r%   zdatetime.<locals>.<lambda>R  s    CM**Y)*TT r   rM   rg   s   ``r   rh   rh     s4    n TTTTT+--  r   )r^   rU   rE   r[   rh   rL   rP   rX   )r@   rA   r   r   )rH   rI   r   r   )r   r   )Nr_   )ra   rb   rc   rd   r   r   )
__future__r   typingr   r   r   r   narwhals._expression_parsingr   r	   narwhals._utilsr
   narwhals.exprr   rh   r   narwhals.dtypesr   narwhals.typingr   r   rE   rL   rP   rU   rX   r[   r^   __all__r?   r   r   <module>rq      s   " " " " " " 9 9 9 9 9 9 9 9 9 9 9 9 G G G G G G G G # # # # # #       )!!!!!!%%%%%%((((((-" -" -" -" -"t -" -" -"`   B   <   >       F   >   B   4 7;IT: : : : :z	 	 	r   