Λ
    Τͺg\  γ                  σ    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g d’Zy)ι    )Ϊannotations)ΪAny)ΪExpr)Ϊflattenc                  σ    e Zd Zy)ΪSelectorN)Ϊ__name__Ϊ
__module__Ϊ__qualname__© σ    ϊG/var/www/openai/venv/lib/python3.12/site-packages/narwhals/selectors.pyr   r   	   s    r   r   c                 σ      t         fd«      S )u  Select columns based on their dtype.

    Arguments:
        dtypes: one or data types to select

    Returns:
        A new expression.

    Examples:
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> import pandas as pd
        >>> import polars as pl
        >>>
        >>> data = {"a": [1, 2], "b": ["x", "y"], "c": [4.1, 2.3]}
        >>> df_pd = pd.DataFrame(data)
        >>> df_pl = pl.DataFrame(data)

        Let's define a dataframe-agnostic function to select int64 and float64
        dtypes and multiplies each value by 2:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.by_dtype(nw.Int64, nw.Float64) * 2)

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
           a    c
        0  2  8.2
        1  4  4.6
        >>> func(df_pl)
        shape: (2, 2)
        βββββββ¬ββββββ
        β a   β c   β
        β --- β --- β
        β i64 β f64 β
        βββββββͺββββββ‘
        β 2   β 8.2 β
        β 4   β 4.6 β
        βββββββ΄ββββββ
    c                σL    | j                   j                  t        «      «      S ©N)Ϊ	selectorsΪby_dtyper   )ΪplxΪdtypess    r   Ϊ<lambda>zby_dtype.<locals>.<lambda>7   s   ψ  §‘Χ 6Ρ 6΄wΈv³Τ Gr   ©r   )r   s   `r   r   r      s   ψ τV ΣGΣHΠHr   c                 σ    t        d «      S )u5  Select numeric columns.

    Returns:
        A new expression.

    Examples:
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> import pandas as pd
        >>> import polars as pl
        >>>
        >>> data = {"a": [1, 2], "b": ["x", "y"], "c": [4.1, 2.3]}
        >>> df_pd = pd.DataFrame(data)
        >>> df_pl = pl.DataFrame(data)

        Let's define a dataframe-agnostic function to select numeric
        dtypes and multiplies each value by 2:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.numeric() * 2)

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
           a    c
        0  2  8.2
        1  4  4.6
        >>> func(df_pl)
        shape: (2, 2)
        βββββββ¬ββββββ
        β a   β c   β
        β --- β --- β
        β i64 β f64 β
        βββββββͺββββββ‘
        β 2   β 8.2 β
        β 4   β 4.6 β
        βββββββ΄ββββββ
    c                σ6    | j                   j                  «       S r   )r   Ϊnumeric©r   s    r   r   znumeric.<locals>.<lambda>b   σ     §‘Χ 5Ρ 5Τ 7r   r   r   r   r   r   r   :   σ    τP Ρ7Σ8Π8r   c                 σ    t        d «      S )uΠ  Select boolean columns.

    Returns:
        A new expression.

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

        Let's define a dataframe-agnostic function to select boolean
        dtypes:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.boolean())

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
               c
        0  False
        1   True
        >>> func(df_pl)
        shape: (2, 1)
        βββββββββ
        β c     β
        β ---   β
        β bool  β
        βββββββββ‘
        β false β
        β true  β
        βββββββββ
    c                σ6    | j                   j                  «       S r   )r   Ϊbooleanr   s    r   r   zboolean.<locals>.<lambda>   r   r   r   r   r   r   r    r    e   r   r   c                 σ    t        d «      S )u₯  Select string columns.

    Returns:
        A new expression.

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

        Let's define a dataframe-agnostic function to select string
        dtypes:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.string())

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
           b
        0  x
        1  y
        >>> func(df_pl)
        shape: (2, 1)
        βββββββ
        β b   β
        β --- β
        β str β
        βββββββ‘
        β x   β
        β y   β
        βββββββ
    c                σ6    | j                   j                  «       S r   )r   Ϊstringr   s    r   r   zstring.<locals>.<lambda>Έ   s     §‘Χ 4Ρ 4Τ 6r   r   r   r   r   r#   r#      s    τP Ρ6Σ7Π7r   c                 σ    t        d «      S )uρ  Select categorical columns.

    Returns:
        A new expression.

    Examples:
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> import pandas as pd
        >>> import polars as pl
        >>>
        >>> data = {"a": [1, 2], "b": ["x", "y"], "c": [False, True]}
        >>> df_pd = pd.DataFrame(data).astype({"b": "category"})
        >>> df_pl = pl.DataFrame(data, schema_overrides={"b": pl.Categorical})

        Let's define a dataframe-agnostic function to select string
        dtypes:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.categorical())

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
           b
        0  x
        1  y
        >>> func(df_pl)
        shape: (2, 1)
        βββββββ
        β b   β
        β --- β
        β cat β
        βββββββ‘
        β x   β
        β y   β
        βββββββ
    c                σ6    | j                   j                  «       S r   )r   Ϊcategoricalr   s    r   r   zcategorical.<locals>.<lambda>γ   s     §‘Χ 9Ρ 9Τ ;r   r   r   r   r   r&   r&   »   s    τP Ρ;Σ<Π<r   c                 σ    t        d «      S )uΧ  Select all columns.

    Returns:
        A new expression.

    Examples:
        >>> import narwhals as nw
        >>> import narwhals.selectors as ncs
        >>> import pandas as pd
        >>> import polars as pl
        >>>
        >>> data = {"a": [1, 2], "b": ["x", "y"], "c": [False, True]}
        >>> df_pd = pd.DataFrame(data).astype({"b": "category"})
        >>> df_pl = pl.DataFrame(data, schema_overrides={"b": pl.Categorical})

        Let's define a dataframe-agnostic function to select string
        dtypes:

        >>> @nw.narwhalify
        ... def func(df):
        ...     return df.select(ncs.all())

        We can then pass either pandas or Polars dataframes:

        >>> func(df_pd)
           a  b      c
        0  1  x  False
        1  2  y   True
        >>> func(df_pl)
        shape: (2, 3)
        βββββββ¬ββββββ¬ββββββββ
        β a   β b   β c     β
        β --- β --- β ---   β
        β i64 β cat β bool  β
        βββββββͺββββββͺββββββββ‘
        β 1   β x   β false β
        β 2   β y   β true  β
        βββββββ΄ββββββ΄ββββββββ
    c                σ6    | j                   j                  «       S r   )r   Ϊallr   s    r   r   zall.<locals>.<lambda>  s     §‘Χ 1Ρ 1Τ 3r   r   r   r   r   r)   r)   ζ   s    τP Ρ3Σ4Π4r   )r)   r    r   r&   r   r#   N)r   r   Ϊreturnr   )r*   r   )Ϊ
__future__r   Ϊtypingr   Ϊnarwhals.exprr   Ϊnarwhals.utilsr   r   r   r   r    r#   r&   r)   Ϊ__all__r   r   r   Ϊ<module>r0      sG   πέ "ε ε έ "τ tΤ σ+Iσ\(9σV(9σV(8σV(=σV(5ςVr   