blob: 75f61b18c07b661d3cf88f9ef0cdb31b5d11f263 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
from enum import Enum, auto
class TypeEnum(Enum):
ANY = auto()
STRING = auto()
INT = auto()
FLOAT = auto()
NUMBER = auto()
LIST = auto()
LITERAL = auto()
BOOL = auto()
HANDLE = auto()
TYPE = auto()
USER = auto()
def __str__(self):
return f":{self.name.lower()}"
HIERARCHY = { TypeEnum.ANY: None,
TypeEnum.LITERAL: TypeEnum.ANY,
TypeEnum.LIST: TypeEnum.ANY,
TypeEnum.STRING: TypeEnum.LITERAL,
TypeEnum.BOOL: TypeEnum.LITERAL,
TypeEnum.NUMBER: TypeEnum.LITERAL,
TypeEnum.INT: TypeEnum.NUMBER,
TypeEnum.FLOAT: TypeEnum.NUMBER }
def is_subtype_of(candidate, expected):
if candidate == expected:
return True
parent = HIERARCHY[candidate]
while parent is not None:
if parent == expected:
return True
parent = HIERARCHY[parent]
return False
|