Skip to content

Commit eb60314

Browse files
authored
perf: avoid repeating constant iteration (#2079)
* perf: avoid repeating constant iteration * fix: revert 2 pandas calls, fix incorrect annotation I wouldn't have tried this if I knew `tuple` wasn't allowed https://github.com/narwhals-dev/narwhals/actions/runs/13486748618/job/37678868035?pr=2079
1 parent a5b0aa2 commit eb60314

File tree

9 files changed

+11
-10
lines changed

9 files changed

+11
-10
lines changed

narwhals/_arrow/expr.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def func(df: ArrowDataFrame) -> list[ArrowSeries]:
113113
func,
114114
depth=0,
115115
function_name="col",
116-
evaluate_output_names=lambda _df: list(column_names),
116+
evaluate_output_names=lambda _df: column_names,
117117
alias_output_names=None,
118118
backend_version=backend_version,
119119
version=version,

narwhals/_dask/expr.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def func(df: DaskLazyFrame) -> list[dx.Series]:
108108
func,
109109
depth=0,
110110
function_name="col",
111-
evaluate_output_names=lambda _df: list(column_names),
111+
evaluate_output_names=lambda _df: column_names,
112112
alias_output_names=None,
113113
backend_version=backend_version,
114114
version=version,

narwhals/_duckdb/expr.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def func(_: DuckDBLazyFrame) -> list[duckdb.Expression]:
8787
return cls(
8888
func,
8989
function_name="col",
90-
evaluate_output_names=lambda _df: list(column_names),
90+
evaluate_output_names=lambda _df: column_names,
9191
alias_output_names=None,
9292
backend_version=backend_version,
9393
version=version,

narwhals/_pandas_like/dataframe.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def __getitem__(
277277
return self._from_native_frame(
278278
select_columns_by_name(
279279
self._native_frame,
280-
cast("Sequence[str] | _1DArray", item),
280+
cast("list[str] | _1DArray", item),
281281
self._backend_version,
282282
self._implementation,
283283
),

narwhals/_pandas_like/expr.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def func(df: PandasLikeDataFrame) -> list[PandasLikeSeries]:
140140
func,
141141
depth=0,
142142
function_name="col",
143-
evaluate_output_names=lambda _df: list(column_names),
143+
evaluate_output_names=lambda _df: column_names,
144144
alias_output_names=None,
145145
implementation=implementation,
146146
backend_version=backend_version,

narwhals/_pandas_like/utils.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from typing import TYPE_CHECKING
88
from typing import Any
99
from typing import Iterable
10-
from typing import Sequence
1110
from typing import TypeVar
1211
from typing import cast
1312

@@ -765,7 +764,7 @@ def calculate_timestamp_date(s: pd.Series[int], time_unit: str) -> pd.Series[int
765764

766765
def select_columns_by_name(
767766
df: T,
768-
column_names: Sequence[str] | _1DArray,
767+
column_names: list[str] | _1DArray, # NOTE: Cannot be a tuple!
769768
backend_version: tuple[int, ...],
770769
implementation: Implementation,
771770
) -> T:

narwhals/_spark_like/expr.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def func(df: SparkLikeLazyFrame) -> list[Column]:
128128
return cls(
129129
func,
130130
function_name="col",
131-
evaluate_output_names=lambda _df: list(column_names),
131+
evaluate_output_names=lambda _df: column_names,
132132
alias_output_names=None,
133133
backend_version=backend_version,
134134
version=version,

narwhals/expr.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1535,9 +1535,10 @@ def over(self: Self, *keys: str | Iterable[str]) -> Self:
15351535
if self._metadata.is_changes_length():
15361536
msg = "`.over()` can not be used for expressions which change length."
15371537
raise LengthChangingExprError(msg)
1538+
flattened = flatten(keys)
15381539
return self.__class__(
15391540
lambda plx: self._to_compliant_expr(plx).over(
1540-
flatten(keys), kind=self._metadata.kind
1541+
flattened, kind=self._metadata.kind
15411542
),
15421543
self._metadata.with_kind(ExprKind.TRANSFORM),
15431544
)

narwhals/selectors.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,9 @@ def by_dtype(*dtypes: DType | type[DType] | Iterable[DType | type[DType]]) -> Se
9494
a: [[2,4]]
9595
c: [[8.2,4.6]]
9696
"""
97+
flattened = flatten(dtypes)
9798
return Selector(
98-
lambda plx: plx.selectors.by_dtype(flatten(dtypes)), ExprMetadata.selector()
99+
lambda plx: plx.selectors.by_dtype(flattened), ExprMetadata.selector()
99100
)
100101

101102

0 commit comments

Comments
 (0)