1+ from __future__ import annotations
2+
13import collections
24import textwrap
35import unittest
@@ -398,9 +400,10 @@ def test_getmember_01():
398400 assert d == Never
399401
400402
401- def test_getmember_02 ():
402- type OnlyIntToSet [ T ] = set [ T ] if IsAssignable [ T , int ] else T
403+ type OnlyIntToSet [ T ] = set [ T ] if IsAssignable [ T , int ] else T
404+
403405
406+ def test_getmember_02 ():
404407 class C :
405408 def f [T ](self , x : T ) -> OnlyIntToSet [T ]: ...
406409
@@ -423,8 +426,6 @@ def f[T](self, x: T) -> OnlyIntToSet[T]: ...
423426
424427
425428def test_getmember_03 ():
426- type OnlyIntToSet [T ] = set [T ] if IsAssignable [T , int ] else T
427-
428429 class C :
429430 def f [T ](self , x : T ) -> OnlyIntToSet [T ]: ...
430431
@@ -957,20 +958,24 @@ class ATree(Generic[A]):
957958 assert eval_typing (GetArg [t , ATree , Literal [1 ]]) == Never
958959
959960
960- def test_eval_getarg_custom_07 ():
961- # Doubly recursive generic types
962- A = TypeVar ("A" )
963- B = TypeVar ("B" )
961+ # Doubly recursive generic types
962+ NA = TypeVar ("NA" )
963+ NB = TypeVar ("NB" )
964+
965+
966+ class ANode (Generic [NA , NB ]):
967+ val : NA | list [BNode [NA , NB ]]
968+
964969
965- class ANode (Generic [A , B ]):
966- val : A | list [BNode [ A , B ]]
970+ class BNode (Generic [NA , NB ]):
971+ val : NB | list [ANode [ NA , NB ]]
967972
968- class BNode (Generic [A , B ]):
969- val : B | list [ANode [A , B ]]
970973
971- class ABTree (Generic [A , B ]):
972- root : ANode [A , B ] | BNode [A , B ]
974+ class ABTree (Generic [NA , NB ]):
975+ root : ANode [NA , NB ] | BNode [NA , NB ]
973976
977+
978+ def test_eval_getarg_custom_07 ():
974979 t = ABTree [int , str ]
975980 assert eval_typing (GetArg [t , ABTree , Literal [0 ]]) is int
976981 assert eval_typing (GetArg [t , ABTree , Literal [1 ]]) is str
@@ -982,19 +987,22 @@ class ABTree(Generic[A, B]):
982987 assert eval_typing (GetArg [t , ABTree , Literal [2 ]]) == Never
983988
984989
985- def test_eval_getarg_custom_08 ():
986- # Generic class with generic methods
987- T = TypeVar ("T" )
990+ T = TypeVar ("T" )
988991
989- class Container (Generic [T ]):
990- data : list [T ]
991992
992- def get [T ](self , index : int , default : T ) -> int | T : ...
993- def map [U ](self , func : Callable [[int ], U ]) -> list [U ]: ...
994- def convert [T ](self , func : Callable [[int ], T ]) -> Container2 [T ]: ...
993+ class Container (Generic [T ]):
994+ data : list [T ]
995995
996- class Container2 [T ]: ...
996+ def get [T ](self , index : int , default : T ) -> int | T : ...
997+ def map [U ](self , func : Callable [[int ], U ]) -> list [U ]: ...
998+ def convert [T ](self , func : Callable [[int ], T ]) -> Container2 [T ]: ...
997999
1000+
1001+ class Container2 [T ]: ...
1002+
1003+
1004+ def test_eval_getarg_custom_08 ():
1005+ # Generic class with generic methods
9981006 t = Container [int ]
9991007 assert eval_typing (GetArg [t , Container , Literal [0 ]]) is int
10001008 assert eval_typing (GetArg [t , Container , Literal [- 1 ]]) is int
@@ -1819,12 +1827,13 @@ def g(self) -> int: ... # omitted
18191827 assert m == Never
18201828
18211829
1830+ type AttrsAsSets [T ] = UpdateClass [
1831+ * [Member [GetName [m ], set [GetType [m ]]] for m in Iter [Attrs [T ]]]
1832+ ]
1833+
1834+
18221835def test_update_class_members_03 ():
18231836 # Generic UpdateClass, uses T
1824- type AttrsAsSets [T ] = UpdateClass [
1825- * [Member [GetName [m ], set [GetType [m ]]] for m in Iter [Attrs [T ]]]
1826- ]
1827-
18281837 class A :
18291838 a : int
18301839
@@ -1898,9 +1907,8 @@ def g(self) -> int: ...
18981907
18991908 # Attrs
19001909 attrs = eval_typing (Attrs [B ])
1901- assert (
1902- attrs
1903- == tuple [
1910+ assert str (attrs ) == str (
1911+ tuple [
19041912 Member [Literal ["a" ], int , Never , Never , A ],
19051913 Member [Literal ["b" ], int , Never , Never , B ],
19061914 ]
@@ -1955,10 +1963,6 @@ def g(self) -> int: ...
19551963
19561964def test_update_class_inheritance_01 ():
19571965 # current class init subclass is not applied
1958- type AttrsAsSets [T ] = UpdateClass [
1959- * [Member [GetName [m ], set [GetType [m ]]] for m in Iter [Attrs [T ]]]
1960- ]
1961-
19621966 class A :
19631967 a : int
19641968
@@ -1985,18 +1989,16 @@ def __init_subclass__[T](
19851989 )
19861990
19871991
1992+ type AttrsAsList [T ] = UpdateClass [
1993+ * [Member [GetName [m ], list [GetType [m ]]] for m in Iter [Attrs [T ]]]
1994+ ]
1995+ type AttrsAsTuple [T ] = UpdateClass [
1996+ * [Member [GetName [m ], tuple [GetType [m ]]] for m in Iter [Attrs [T ]]]
1997+ ]
1998+
1999+
19882000def test_update_class_inheritance_02 ():
19892001 # __init_subclass__ calls follow normal MRO
1990- type AttrsAsSets [T ] = UpdateClass [
1991- * [Member [GetName [m ], set [GetType [m ]]] for m in Iter [Attrs [T ]]]
1992- ]
1993- type AttrsAsList [T ] = UpdateClass [
1994- * [Member [GetName [m ], list [GetType [m ]]] for m in Iter [Attrs [T ]]]
1995- ]
1996- type AttrsAsTuple [T ] = UpdateClass [
1997- * [Member [GetName [m ], tuple [GetType [m ]]] for m in Iter [Attrs [T ]]]
1998- ]
1999-
20002002 class A :
20012003 a : int
20022004
0 commit comments