Skip to content

Commit 6b1cde0

Browse files
committed
wip typing
1 parent 48aa14c commit 6b1cde0

File tree

2 files changed

+23
-26
lines changed

2 files changed

+23
-26
lines changed

narwhals/pandas_like/dataframe.py

+14-12
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
if TYPE_CHECKING:
2222
from collections.abc import Sequence
2323

24+
from typing_extensions import Self
25+
2426

2527
class DataFrame(DataFrameT):
2628
"""dataframe object"""
@@ -136,7 +138,7 @@ def join(
136138
.collect()
137139
)
138140

139-
def lazy(self) -> LazyFrameT:
141+
def lazy(self) -> LazyFrame:
140142
return LazyFrame(
141143
self.dataframe,
142144
api_version=self.api_version,
@@ -217,8 +219,8 @@ def _validate_booleanness(self) -> None:
217219
msg,
218220
)
219221

220-
def _from_dataframe(self, df: Any) -> LazyFrameT:
221-
return LazyFrame(
222+
def _from_dataframe(self, df: Any) -> Self:
223+
return self.__class__(
222224
df,
223225
api_version=self.api_version,
224226
implementation=self._implementation,
@@ -245,7 +247,7 @@ def select(
245247
self,
246248
*exprs: IntoExpr | Iterable[IntoExpr],
247249
**named_exprs: IntoExpr,
248-
) -> LazyFrameT:
250+
) -> Self:
249251
new_series = evaluate_into_exprs(self, *exprs, **named_exprs)
250252
df = horizontal_concat(
251253
[series.series for series in new_series], # type: ignore[attr-defined]
@@ -256,7 +258,7 @@ def select(
256258
def filter(
257259
self,
258260
*predicates: IntoExpr | Iterable[IntoExpr],
259-
) -> LazyFrameT:
261+
) -> Self:
260262
plx = self.__lazyframe_namespace__()
261263
expr = plx.all_horizontal(*predicates)
262264
# Safety: all_horizontal's expression only returns a single column.
@@ -268,7 +270,7 @@ def with_columns(
268270
self,
269271
*exprs: IntoExpr | Iterable[IntoExpr],
270272
**named_exprs: IntoExpr,
271-
) -> LazyFrameT:
273+
) -> Self:
272274
new_series = evaluate_into_exprs(self, *exprs, **named_exprs)
273275
df = self.dataframe.assign(
274276
**{
@@ -283,7 +285,7 @@ def sort(
283285
by: str | Iterable[str],
284286
*more_by: str,
285287
descending: bool | Iterable[bool] = False,
286-
) -> LazyFrameT:
288+
) -> Self:
287289
flat_keys = flatten_str([*flatten_str(by), *more_by])
288290
if not flat_keys:
289291
flat_keys = self.dataframe.columns.tolist()
@@ -304,7 +306,7 @@ def join(
304306
how: Literal["left", "inner", "outer"] = "inner",
305307
left_on: str | list[str],
306308
right_on: str | list[str],
307-
) -> LazyFrameT:
309+
) -> Self:
308310
if how not in ["inner"]:
309311
msg = "Only inner join supported for now, others coming soon"
310312
raise ValueError(msg)
@@ -337,14 +339,14 @@ def collect(self) -> DataFrameT:
337339
implementation=self._implementation,
338340
)
339341

340-
def cache(self) -> LazyFrameT:
342+
def cache(self) -> Self:
341343
return self
342344

343-
def head(self, n: int) -> LazyFrameT:
345+
def head(self, n: int) -> Self:
344346
return self._from_dataframe(self.dataframe.head(n))
345347

346-
def unique(self, subset: list[str]) -> LazyFrameT:
348+
def unique(self, subset: list[str]) -> Self:
347349
return self._from_dataframe(self.dataframe.drop_duplicates(subset=subset))
348350

349-
def rename(self, mapping: dict[str, str]) -> LazyFrameT:
351+
def rename(self, mapping: dict[str, str]) -> Self:
350352
return self._from_dataframe(self.dataframe.rename(columns=mapping))

narwhals/spec/__init__.py

+9-14
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,6 @@ def ends_with(self, other: str) -> Expr:
8989
...
9090

9191

92-
class ExprNameNamespace(Protocol):
93-
def keep(self) -> Expr:
94-
...
95-
96-
9792
class Namespace(Protocol):
9893
def col(self, *names: str | Iterable[str]) -> Expr:
9994
...
@@ -233,23 +228,23 @@ def columns(self) -> list[str]:
233228

234229
def with_columns(
235230
self, *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr
236-
) -> LazyFrame:
231+
) -> Self:
237232
...
238233

239-
def filter(self, *predicates: IntoExpr | Iterable[IntoExpr]) -> LazyFrame:
234+
def filter(self, *predicates: IntoExpr | Iterable[IntoExpr]) -> Self:
240235
...
241236

242237
def select(
243238
self, *exprs: IntoExpr | Iterable[IntoExpr], **named_exprs: IntoExpr
244-
) -> LazyFrame:
239+
) -> Self:
245240
...
246241

247242
def sort(
248243
self,
249244
by: str | Iterable[str],
250245
*more_by: str,
251246
descending: bool | Iterable[bool] = False,
252-
) -> LazyFrame:
247+
) -> Self:
253248
...
254249

255250
def collect(self) -> DataFrame:
@@ -265,19 +260,19 @@ def join(
265260
how: Literal["left", "inner", "outer"] = "inner",
266261
left_on: str | list[str],
267262
right_on: str | list[str],
268-
) -> LazyFrame:
263+
) -> Self:
269264
...
270265

271-
def cache(self) -> LazyFrame:
266+
def cache(self) -> Self:
272267
...
273268

274-
def head(self, n: int) -> LazyFrame:
269+
def head(self, n: int) -> Self:
275270
...
276271

277-
def unique(self, subset: list[str]) -> LazyFrame:
272+
def unique(self, subset: list[str]) -> Self:
278273
...
279274

280-
def rename(self, mapping: dict[str, str]) -> LazyFrame:
275+
def rename(self, mapping: dict[str, str]) -> Self:
281276
...
282277

283278

0 commit comments

Comments
 (0)