
    h*                    "   S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S S	KJr  \(       a  S S
KJr  S SKJr  S SKJ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SS jrSS jr  S     SS jjr/ SQrg)    )annotations)TYPE_CHECKING)Any)Iterable)NoReturn)ExprMetadata)combine_metadata)Expr)flatten)timezone)DType)TimeUnitc                  Z    \ rS rSrSS jrSS jrSS jrSS jrSS jrSS jr	SS jr
S	rg
)Selector   c                B    [        U R                  U R                  5      $ N)r
   _to_compliant_expr	_metadata)selfs    D/var/www/html/env/lib/python3.13/site-packages/narwhals/selectors.py_to_exprSelector._to_expr   s    D++T^^<<    c                l    [        U[        5      (       a  Sn[        U5      eU R                  5       U-   $ )Nz=unsupported operand type(s) for op: ('Selector' + 'Selector'))
isinstancer   	TypeErrorr   )r   othermsgs      r   __add__Selector.__add__   s/    eX&&QCC. }}&&r   c                   ^ ^ [        T[        5      (       a"  T R                  UU 4S j[        T TSSSS95      $ T R	                  5       T-  $ )Nc                J   > TR                  U 5      TR                  U 5      -  $ r   r   plxr   r   s    r   <lambda>!Selector.__or__.<locals>.<lambda>!   !    D33C85;S;STW;XXr   FT
str_as_litallow_multi_outputto_single_outputr   r   	__class__r	   r   r   r   s   ``r   __or__Selector.__or__   N    eX&&>>X $'+%*	 	 }}&&r   c                   ^ ^ [        T[        5      (       a"  T R                  UU 4S j[        T TSSSS95      $ T R	                  5       T-  $ )Nc                J   > TR                  U 5      TR                  U 5      -  $ r   r$   r%   s    r   r'   "Selector.__and__.<locals>.<lambda>/   r)   r   FTr*   r.   r0   s   ``r   __and__Selector.__and__,   r3   r   c                    [         er   NotImplementedErrorr0   s     r   __rsub__Selector.__rsub__:       !!r   c                    [         er   r:   r0   s     r   __rand__Selector.__rand__=   r>   r   c                    [         er   r:   r0   s     r   __ror__Selector.__ror__@   r>   r    N)returnr
   )r   r   rF   r
   )r   r   rF   r   )__name__
__module____qualname____firstlineno__r   r    r1   r7   r<   r@   rC   __static_attributes__rE   r   r   r   r      s%    ='''"""r   r   c                 `   ^ [        U 5      m[        U4S j[        R                  " 5       5      $ )aF  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                :   > U R                   R                  T5      $ r   )	selectorsby_dtype)r&   	flatteneds    r   r'   by_dtype.<locals>.<lambda>`   s    CMM**95r   )r   r   r   selector_multi_unnamed)dtypesrP   s    @r   rO   rO   D   s*    4 I5++- r   c                J   ^  [        U 4S j[        R                  " 5       5      $ )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                :   > U R                   R                  T5      $ r   )rN   matches)r&   patterns    r   r'   matches.<locals>.<lambda>   s    CMM))'2r   r   r   rR   )rW   s   `r   rV   rV   e   s!    : 2++- r   c                 B    [        S [        R                  " 5       5      $ )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    U R                   R                  5       $ r   )rN   numericr&   s    r   r'   numeric.<locals>.<lambda>       CMM))+r   rY   rE   r   r   r\   r\      s    4 +\-P-P-R r   c                 B    [        S [        R                  " 5       5      $ )uE  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    U R                   R                  5       $ r   )rN   booleanr]   s    r   r'   boolean.<locals>.<lambda>   r_   r   rY   rE   r   r   rb   rb      s    < +\-P-P-R r   c                 B    [        S [        R                  " 5       5      $ )u  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    U R                   R                  5       $ r   )rN   stringr]   s    r   r'   string.<locals>.<lambda>   s    CMM((*r   rY   rE   r   r   rf   rf      s    4 *L,O,O,Q r   c                 B    [        S [        R                  " 5       5      $ )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    U R                   R                  5       $ r   )rN   categoricalr]   s    r   r'   categorical.<locals>.<lambda>  s    CMM--/r   rY   rE   r   r   rj   rj      s     8 /++- r   c                 B    [        S [        R                  " 5       5      $ )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    U R                   R                  5       $ r   )rN   allr]   s    r   r'   all.<locals>.<lambda>   s    CMM%%'r   rY   rE   r   r   rn   rn     s    ( ')L)L)N r   Nc                N   ^ ^ [        U U4S j[        R                  " 5       5      $ )ab  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                8   > U R                   R                  TTS9$ )N	time_unit	time_zone)rN   datetime)r&   rs   rt   s    r   r'   datetime.<locals>.<lambda>\  s    CMM**Y)*Tr   rY   rr   s   ``r   ru   ru   $  s"    n T++- r   )rn   rb   rO   rj   ru   rV   r\   rf   )rS   z3DType | type[DType] | Iterable[DType | type[DType]]rF   r   )rW   strrF   r   )rF   r   )N)*N)rs   z$TimeUnit | Iterable[TimeUnit] | Nonert   z7str | timezone | Iterable[str | timezone | None] | NonerF   r   )
__future__r   typingr   r   r   r   narwhals._expression_parsingr   r	   narwhals.exprr
   narwhals.utilsr   ru   r   narwhals.dtypesr   narwhals.typingr   r   rO   rV   r\   rb   rf   rj   rn   __all__rE   r   r   <module>r      s    "      5 9  "!%(-"t -"`B F> F>D4 7;IT:3:F: :z	r   