§
    ŠhþhÇ(  ã                  óì   — 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dS )%é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚNoReturn)ÚExprMetadataÚcombine_metadata)Úflatten)ÚExpr)ÚIterable)Ú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    úI/var/www/histauto/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   € Ý�e�XÑ&Ô&ð 	!ØQˆCÝ˜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Ò3°CÑ8Ô8¸5×;SÒ;SÐTWÑ;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   øø€ Ý�e�XÑ&Ô&ð 
	Ø—>’>Ø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__7   ó   € Ý!Ð!r   c                ó   — t           ‚r   r4   r-   s     r   Ú__rand__zSelector.__rand__:   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   Údtypesú3DType | type[DType] | Iterable[DType | type[DType]]r   c                 ój   ‡— t          | ¦  «        Št          ˆfd„t          j        ¦   «         ¦  «        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]]
    c                ó8   •— | j                              ‰¦  «        S r   )Ú	selectorsÚby_dtype)r$   Ú	flatteneds    €r   r%   zby_dtype.<locals>.<lambda>Z   s   ø€ �C”M×*Ò*¨9Ñ5Ô5€ r   )r	   r   r   Úselector_multi_unnamed)r@   rF   s    @r   rE   rE   A   s:   ø€ õ. ˜‘”€IÝØ5Ð5Ð5Ð5ÝÔ+Ñ-Ô-ñô ð r   ÚpatternÚstrc                óL   ‡ — t          ˆ fd„t          j        ¦   «         ¦  «        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
    c                ó8   •— | j                              ‰¦  «        S r   )rD   Úmatches)r$   rH   s    €r   r%   zmatches.<locals>.<lambda>v   s   ø€ �C”M×)Ò)¨'Ñ2Ô2€ r   ©r   r   rG   )rH   s   `r   rL   rL   _   s.   ø€ õ, Ø2Ð2Ð2Ð2µLÔ4WÑ4YÔ4Yñô ð r   c                 óF   — t          d„ t          j        ¦   «         ¦  «        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 â”‚
        â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
    c                ó4   — | j                              ¦   «         S r   )rD   Únumeric©r$   s    r   r%   znumeric.<locals>.<lambda>’   ó   € �C”M×)Ò)Ñ+Ô+€ r   rM   r?   r   r   rP   rP   z   s'   € õ. Ø+Ð+­\Ô-PÑ-RÔ-Rñô ð r   c                 óF   — t          d„ t          j        ¦   «         ¦  «        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  â”‚       |
        |  â””â”€â”€â”€â”€â”€â”€â”€â”˜       |
        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    c                ó4   — | j                              ¦   «         S r   )rD   ÚbooleanrQ   s    r   r%   zboolean.<locals>.<lambda>²   rR   r   rM   r?   r   r   rU   rU   –   s'   € õ6 Ø+Ð+­\Ô-PÑ-RÔ-Rñô ð r   c                 óF   — t          d„ t          j        ¦   «         ¦  «        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   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    c                ó4   — | j                              ¦   «         S r   )rD   ÚstringrQ   s    r   r%   zstring.<locals>.<lambda>Î   s   € �C”M×(Ò(Ñ*Ô*€ r   rM   r?   r   r   rX   rX   ¶   s'   € õ. Ø*Ð*­LÔ,OÑ,QÔ,Qñô ð r   c                 óF   — t          d„ t          j        ¦   «         ¦  «        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   â”‚
        â””â”€â”€â”€â”€â”€â”˜
    c                ó4   — | j                              ¦   «         S r   )rD   ÚcategoricalrQ   s    r   r%   zcategorical.<locals>.<lambda>ì   s   € �C”M×-Ò-Ñ/Ô/€ r   rM   r?   r   r   r[   r[   Ò   s'   € õ2 Ø/Ð/µÔ1TÑ1VÔ1Vñô ð r   c                 óF   — t          d„ t          j        ¦   «         ¦  «        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
    c                ó4   — | j                              ¦   «         S r   )rD   ÚallrQ   s    r   r%   zall.<locals>.<lambda>  s   € �C”M×%Ò%Ñ'Ô'€ r   rM   r?   r   r   r^   r^   ð   s'   € õ" Ø'Ð'­Ô)LÑ)NÔ)Nñô ð r   N©Ú*NÚ	time_unitú$TimeUnit | Iterable[TimeUnit] | NoneÚ	time_zoneú7str | 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.

    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>;  s   ø€ �C”M×*Ò*°YÈ)Ð*ÑTÔT€ r   rM   rg   s   ``r   rh   rh     s4   øø€ õh Ø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   Únarwhals._expression_parsingr   r   Únarwhals._utilsr	   Únarwhals.exprr
   Úcollections.abcr   rh   r   Únarwhals.dtypesr   Únarwhals.typingr   r   rE   rL   rP   rU   rX   r[   r^   Ú__all__r?   r   r   ú<module>rr      s°  ðØ "Ð "Ð "Ð "Ð "Ð "à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð àð )Ø(Ð(Ð(Ð(Ð(Ð(Ø!Ð!Ð!Ð!Ð!Ð!à%Ð%Ð%Ð%Ð%Ð%Ø(Ð(Ð(Ð(Ð(Ð(ð-"ð -"ð -"ð -"ð -"ˆtñ -"ô -"ð -"ð`ð ð ð ð<ð ð ð ð6ð ð ð ð8ð ð ð ð@ð ð ð ð8ð ð ð ð<ð ð ð ð. 7;ØITð7ð 7ð 7ð 7ð 7ðt	ð 	ð 	€€€r   