L i'ddlmZddlmZmZmZddlmZmZddl m Z ddl m Z erddl mZddlmZddlmZdd lmZGd d e Zdd Zdd ZddZddZddZddZddZ d ddZgdZy)) annotations) TYPE_CHECKINGAnyNoReturn)ExprKindExprNode)flatten)Expr)Iterable)timezone)DType)TimeUnitcDeZdZd dZd dZd dZd dZd dZd dZd dZ y) Selectorc&t|jSN)r _nodes)selfs X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/selectors.py_to_exprzSelector._to_exprsT[[!!ct|tr d}t||jj t t jd|dS)Nz=unsupported operand type(s) for op: ('Selector' + 'Selector')__add__T str_as_lit) isinstancer TypeErrorr _append_noderr ELEMENTWISE)rothermsgs rrzSelector.__add__sH eX &QCC. }}++ X))9e M  rc t|tr-|jttj d|ddS|j jttj d|dS)N__or__Trallow_multi_outputrrrrrrrrrr s rr#zSelector.__or__sk eX &$$((#'+  }}++ X))8Ut L  rc t|tr-|jttj d|ddS|j jttj d|dS)N__and__Tr$rr&r's rr)zSelector.__and__,sk eX &$$((#'+  }}++ X))9e M  rctrNotImplementedErrorr's r__rsub__zSelector.__rsub__;!!rctrr+r's r__rand__zSelector.__rand__>r.rctrr+r's r__ror__zSelector.__ror__Ar.rN)returnr )r rr3r )r rr3r) __name__ __module__ __qualname__rrr#r)r-r0r2rrrrs%"     """rrcbt|}tttjd|S)ajSelect 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]] zselectors.by_dtype)dtypes)r rrrSELECTOR)r9 flatteneds rby_dtyper<Es(.I HX..0DYW XXrcLtttjd|S)awSelect 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 zselectors.matchespatternrrrr:r>s rmatchesrA`s, HX..0CWU VVrcHtttjdS)uSelect 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 │ └─────┴─────┘ zselectors.numericr@r7rrnumericrCys. HX..0CD EErcHtttjdS)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 │ | | └───────┘ | └──────────────────┘ zselectors.booleanr@r7rrbooleanrEs6 HX..0CD EErcHtttjdS)uGSelect 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 │ └─────┘ zselectors.stringr@r7rrstringrGs. HX..0BC DDrcHtttjdS)uSelect 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 │ └─────┘ zselectors.categoricalr@r7rr categoricalrIs2 HX..0GH IIrcHtttjdS)aSelect 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@r7rrallrKs" HX..@ AArNcNtttjd||S)aSelect 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]] zselectors.datetime time_unit time_zoner@rMs rdatetimerPs,h        r)rKrEr<rIrPrArCrG)r9z3DType | type[DType] | Iterable[DType | type[DType]]r3r)r?strr3r)r3r)N)*N)rNz$TimeUnit | Iterable[TimeUnit] | NonerOz7str | timezone | Iterable[str | timezone | None] | Noner3r) __future__rtypingrrrnarwhals._expression_parsingrrnarwhals._utilsr narwhals.exprr collections.abcr rPr narwhals.dtypesr narwhals.typingrrr<rArCrErGrIrK__all__r7rrr\s"//;#(!%(1"t1"hY6W2F4F<E4J8B*7;IT;3;F;;| r