22import sys
33import typing
44import warnings
5+ from typing import Hashable , Union
6+
7+ from typing_extensions import Self , TypeGuard
58
69from beartype .vale ._core ._valecore import BeartypeValidator
710
@@ -32,14 +35,14 @@ class ResolvableType(type):
3235 name (str): Name of the type to be delivered.
3336 """
3437
35- def __init__ (self , name ) :
38+ def __init__ (self , name : str ) -> None :
3639 type .__init__ (self , name , (), {})
3740 self ._type = None
3841
39- def __new__ (self , name ) :
42+ def __new__ (self , name : str ) -> Self :
4043 return type .__new__ (self , name , (), {})
4144
42- def deliver (self , type ) :
45+ def deliver (self , type : type ) -> Self :
4346 """Deliver the type.
4447
4548 Args:
@@ -51,7 +54,7 @@ def deliver(self, type):
5154 self ._type = type
5255 return self
5356
54- def resolve (self ):
57+ def resolve (self ) -> Union [ type , Self ] :
5558 """Resolve the type.
5659
5760 Returns:
@@ -73,11 +76,11 @@ class PromisedType(ResolvableType):
7376 `"SomeType"`.
7477 """
7578
76- def __init__ (self , name = "SomeType" ):
79+ def __init__ (self , name : str = "SomeType" ) -> None :
7780 ResolvableType .__init__ (self , f"PromisedType[{ name } ]" )
7881 self ._name = name
7982
80- def __new__ (cls , name = "SomeType" ):
83+ def __new__ (cls , name : str = "SomeType" ) -> Self :
8184 return ResolvableType .__new__ (cls , f"PromisedType[{ name } ]" )
8285
8386
@@ -91,18 +94,18 @@ class ModuleType(ResolvableType):
9194 do not raise an `AttributeError`.
9295 """
9396
94- def __init__ (self , module , name , allow_fail = False ):
97+ def __init__ (self , module : str , name : str , allow_fail : bool = False ) -> None :
9598 if module in {"__builtin__" , "__builtins__" }:
9699 module = "builtins"
97100 ResolvableType .__init__ (self , f"ModuleType[{ module } .{ name } ]" )
98101 self ._name = name
99102 self ._module = module
100103 self ._allow_fail = allow_fail
101104
102- def __new__ (cls , module , name , allow_fail = False ):
105+ def __new__ (cls , module : str , name : str , allow_fail : bool = False ) -> Self :
103106 return ResolvableType .__new__ (cls , f"ModuleType[{ module } .{ name } ]" )
104107
105- def retrieve (self ):
108+ def retrieve (self ) -> bool :
106109 """Attempt to retrieve the type from the reference module.
107110
108111 Returns:
@@ -120,7 +123,7 @@ def retrieve(self):
120123 return self ._type is not None
121124
122125
123- def _is_hint (x ) :
126+ def _is_hint (x : object ) -> bool :
124127 """Check if an object is a type hint.
125128
126129 Args:
@@ -144,7 +147,7 @@ def _is_hint(x):
144147 return False
145148
146149
147- def _hashable (x ) :
150+ def _hashable (x : object ) -> TypeGuard [ Hashable ] :
148151 """Check if an object is hashable.
149152
150153 Args:
@@ -242,7 +245,7 @@ def resolve_type_hint(x):
242245 return x
243246
244247
245- def is_faithful (x ):
248+ def is_faithful (x ) -> bool :
246249 """Check whether a type hint is faithful.
247250
248251 A type or type hint `t` is defined _faithful_ if, for all `x`, the following holds
@@ -265,7 +268,7 @@ class UnfaithfulType:
265268 return _is_faithful (resolve_type_hint (x ))
266269
267270
268- def _is_faithful (x ):
271+ def _is_faithful (x ) -> bool :
269272 if _is_hint (x ):
270273 origin = get_origin (x )
271274 args = get_args (x )
0 commit comments