From fe82598f27b7c79a4b9d12c7ed3216acdb31f6fe Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Fri, 14 Feb 2025 17:41:51 +0000 Subject: [PATCH 1/2] chore(typing): resolve time unit/zone `set` invariance --- narwhals/utils.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/narwhals/utils.py b/narwhals/utils.py index c8615ab92..5531e3011 100644 --- a/narwhals/utils.py +++ b/narwhals/utils.py @@ -39,6 +39,7 @@ if TYPE_CHECKING: from types import ModuleType + from typing import AbstractSet from typing import Protocol import pandas as pd @@ -1241,15 +1242,15 @@ def check_column_names_are_unique(columns: list[str]) -> None: def _parse_time_unit_and_time_zone( time_unit: TimeUnit | Iterable[TimeUnit] | None, time_zone: str | timezone | Iterable[str | timezone | None] | None, -) -> tuple[set[str], set[str | None]]: - time_units = ( +) -> tuple[set[TimeUnit], AbstractSet[str | None]]: + time_units: set[TimeUnit] = ( {"ms", "us", "ns", "s"} if time_unit is None else {time_unit} if isinstance(time_unit, str) else set(time_unit) ) - time_zones: set[str | None] = ( + time_zones: AbstractSet[str | None] = ( {None} if time_zone is None else {str(time_zone)} @@ -1262,8 +1263,8 @@ def _parse_time_unit_and_time_zone( def dtype_matches_time_unit_and_time_zone( dtype: DType, dtypes: DTypes, - time_units: set[str], - time_zones: set[str | None], + time_units: set[TimeUnit], + time_zones: AbstractSet[str | None], ) -> bool: return ( (dtype == dtypes.Datetime) From b38403c0ecad54e39d6a471861412724a7313b26 Mon Sep 17 00:00:00 2001 From: dangotbanned <125183946+dangotbanned@users.noreply.github.com> Date: Sat, 15 Feb 2025 10:48:15 +0000 Subject: [PATCH 2/2] refactor(typing): alias `AbstractSet` and consistently use `Set` - https://github.com/narwhals-dev/narwhals/pull/2012#discussion_r1957088388 - https://docs.python.org/3/library/typing.html#typing.AbstractSet --- narwhals/utils.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/narwhals/utils.py b/narwhals/utils.py index d2f3cbb87..96f912cd5 100644 --- a/narwhals/utils.py +++ b/narwhals/utils.py @@ -40,7 +40,7 @@ if TYPE_CHECKING: from types import ModuleType - from typing import AbstractSet + from typing import AbstractSet as Set from typing import Protocol import pandas as pd @@ -1243,15 +1243,15 @@ def check_column_names_are_unique(columns: list[str]) -> None: def _parse_time_unit_and_time_zone( time_unit: TimeUnit | Iterable[TimeUnit] | None, time_zone: str | timezone | Iterable[str | timezone | None] | None, -) -> tuple[set[TimeUnit], AbstractSet[str | None]]: - time_units: set[TimeUnit] = ( +) -> tuple[Set[TimeUnit], Set[str | None]]: + time_units: Set[TimeUnit] = ( {"ms", "us", "ns", "s"} if time_unit is None else {time_unit} if isinstance(time_unit, str) else set(time_unit) ) - time_zones: AbstractSet[str | None] = ( + time_zones: Set[str | None] = ( {None} if time_zone is None else {str(time_zone)} @@ -1262,10 +1262,7 @@ def _parse_time_unit_and_time_zone( def dtype_matches_time_unit_and_time_zone( - dtype: DType, - dtypes: DTypes, - time_units: set[TimeUnit], - time_zones: AbstractSet[str | None], + dtype: DType, dtypes: DTypes, time_units: Set[TimeUnit], time_zones: Set[str | None] ) -> bool: return ( (dtype == dtypes.Datetime)