From 7fea97202e956c21f9515d6b999ba3a76fe54afc Mon Sep 17 00:00:00 2001 From: KotlinIsland Date: Mon, 18 Dec 2023 03:38:44 +1000 Subject: [PATCH] Add generic aliases for collection types --- basedtyping/__init__.py | 26 ++++++++++++++++++++++++++ tests/test_aliases.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 tests/test_aliases.py diff --git a/basedtyping/__init__.py b/basedtyping/__init__.py index 1ec8a0a..8233564 100644 --- a/basedtyping/__init__.py +++ b/basedtyping/__init__.py @@ -22,8 +22,10 @@ _tp_cache, _type_check, cast, + _alias, ) +import _collections_abc import typing_extensions from typing_extensions import Never, ParamSpec, Self, TypeAlias, TypeGuard, TypeVarTuple @@ -556,3 +558,27 @@ def f[T](t: TypeForm[T]) -> T: ... reveal_type(f(int | str)) # int | str """) + +# generic aliases +if TYPE_CHECKING: + dict_keyiterator = _collections_abc.dict_keyiterator # type: ignore[attr-defined] + dict_valueiterator = _collections_abc.dict_valueiterator # type: ignore[attr-defined] + dict_itemiterator = _collections_abc.dict_itemiterator # type: ignore[attr-defined] + list_iterator = _collections_abc.list_iterator # type: ignore[attr-defined] + list_reverseiterator = _collections_abc.list_reverseiterator # type: ignore[attr-defined] + set_iterator = _collections_abc.set_iterator # type: ignore[attr-defined] + tuple_iterator = _collections_abc.tuple_iterator # type: ignore[attr-defined] + dict_keys = _collections_abc.dict_keys + dict_values = _collections_abc.dict_values + dict_items = _collections_abc.dict_items +else: + dict_keyiterator = _alias(_collections_abc.dict_keyiterator, 2) + dict_valueiterator = _alias(_collections_abc.dict_valueiterator, 2) + dict_itemiterator = _alias(_collections_abc.dict_itemiterator, 2) + list_iterator = _alias(_collections_abc.list_iterator, 1) + list_reverseiterator = _alias(_collections_abc.list_reverseiterator, 1) + set_iterator = _alias(_collections_abc.set_iterator, 1) + tuple_iterator = _alias(_collections_abc.tuple_iterator, -1) + dict_keys = _alias(_collections_abc.dict_keys, 2) + dict_values = _alias(_collections_abc.dict_values, 2) + dict_items = _alias(_collections_abc.dict_items, 2) diff --git a/tests/test_aliases.py b/tests/test_aliases.py new file mode 100644 index 0000000..95e0791 --- /dev/null +++ b/tests/test_aliases.py @@ -0,0 +1,30 @@ +from __future__ import annotations + +from basedtyping import ( + dict_itemiterator, + dict_items, + dict_keyiterator, + dict_keys, + dict_valueiterator, + dict_values, + list_iterator, + list_reverseiterator, + set_iterator, + tuple_iterator, +) +import _collections_abc + + +def test_aliases(): + dk = dict_keys[int, str] + dv = dict_values[int, str] + di = dict_items[int, str] + t1 = tuple_iterator[int, str] + t2 = tuple_iterator[int, ...] + si = set_iterator[int] + lr = list_reverseiterator[int] + li = list_iterator[int] + dii = dict_itemiterator[int, str] + dvi = dict_valueiterator[int, str] + dki = dict_keyiterator[int, str] + print(dk, dv, di, t1, t2, si, lr, li, dii, dvi, dki) # noqa: T201