2
2
import sys
3
3
import typing
4
4
import warnings
5
+ from typing import Hashable , Union
6
+
7
+ from typing_extensions import Self , TypeGuard
5
8
6
9
from beartype .vale ._core ._valecore import BeartypeValidator
7
10
@@ -32,14 +35,14 @@ class ResolvableType(type):
32
35
name (str): Name of the type to be delivered.
33
36
"""
34
37
35
- def __init__ (self , name ) :
38
+ def __init__ (self , name : str ) -> None :
36
39
type .__init__ (self , name , (), {})
37
40
self ._type = None
38
41
39
- def __new__ (self , name ) :
42
+ def __new__ (self , name : str ) -> Self :
40
43
return type .__new__ (self , name , (), {})
41
44
42
- def deliver (self , type ) :
45
+ def deliver (self , type : type ) -> Self :
43
46
"""Deliver the type.
44
47
45
48
Args:
@@ -51,7 +54,7 @@ def deliver(self, type):
51
54
self ._type = type
52
55
return self
53
56
54
- def resolve (self ):
57
+ def resolve (self ) -> Union [ type , Self ] :
55
58
"""Resolve the type.
56
59
57
60
Returns:
@@ -73,11 +76,11 @@ class PromisedType(ResolvableType):
73
76
`"SomeType"`.
74
77
"""
75
78
76
- def __init__ (self , name = "SomeType" ):
79
+ def __init__ (self , name : str = "SomeType" ) -> None :
77
80
ResolvableType .__init__ (self , f"PromisedType[{ name } ]" )
78
81
self ._name = name
79
82
80
- def __new__ (cls , name = "SomeType" ):
83
+ def __new__ (cls , name : str = "SomeType" ) -> Self :
81
84
return ResolvableType .__new__ (cls , f"PromisedType[{ name } ]" )
82
85
83
86
@@ -91,18 +94,18 @@ class ModuleType(ResolvableType):
91
94
do not raise an `AttributeError`.
92
95
"""
93
96
94
- def __init__ (self , module , name , allow_fail = False ):
97
+ def __init__ (self , module : str , name : str , allow_fail : bool = False ) -> None :
95
98
if module in {"__builtin__" , "__builtins__" }:
96
99
module = "builtins"
97
100
ResolvableType .__init__ (self , f"ModuleType[{ module } .{ name } ]" )
98
101
self ._name = name
99
102
self ._module = module
100
103
self ._allow_fail = allow_fail
101
104
102
- def __new__ (cls , module , name , allow_fail = False ):
105
+ def __new__ (cls , module : str , name : str , allow_fail : bool = False ) -> Self :
103
106
return ResolvableType .__new__ (cls , f"ModuleType[{ module } .{ name } ]" )
104
107
105
- def retrieve (self ):
108
+ def retrieve (self ) -> bool :
106
109
"""Attempt to retrieve the type from the reference module.
107
110
108
111
Returns:
@@ -120,7 +123,7 @@ def retrieve(self):
120
123
return self ._type is not None
121
124
122
125
123
- def _is_hint (x ) :
126
+ def _is_hint (x : object ) -> bool :
124
127
"""Check if an object is a type hint.
125
128
126
129
Args:
@@ -144,7 +147,7 @@ def _is_hint(x):
144
147
return False
145
148
146
149
147
- def _hashable (x ) :
150
+ def _hashable (x : object ) -> TypeGuard [ Hashable ] :
148
151
"""Check if an object is hashable.
149
152
150
153
Args:
@@ -242,7 +245,7 @@ def resolve_type_hint(x):
242
245
return x
243
246
244
247
245
- def is_faithful (x ):
248
+ def is_faithful (x ) -> bool :
246
249
"""Check whether a type hint is faithful.
247
250
248
251
A type or type hint `t` is defined _faithful_ if, for all `x`, the following holds
@@ -265,7 +268,7 @@ class UnfaithfulType:
265
268
return _is_faithful (resolve_type_hint (x ))
266
269
267
270
268
- def _is_faithful (x ):
271
+ def _is_faithful (x ) -> bool :
269
272
if _is_hint (x ):
270
273
origin = get_origin (x )
271
274
args = get_args (x )
0 commit comments