CellModules
Enums.py
Go to the documentation of this file.
2def IsicellEnum(name,values):
3 class EnumItem(int):
4 def __new__(cls, enum, name, value, *args, **kwargs):
5 test = super(cls, cls).__new__(cls,value)
6 test.__doc__ = name+' : int'
7 test.__enum = enum
8 test.__name = name
9 return test
10 def __repr__(self):
11 return f'<{self.__enum}.{self.__name}: {int(self)}>'
12
13 def managed_attribute(name):
14 @property
15 def prop(self):
16 return self._data[name]
17 return prop
18
19 class Enum():
20 def __init__(self,name,values):
21 self.__doc__ = name+' : Enum'+name
22 self.__name__ = name
23 self._data = {k:EnumItem(name,k,v) for v,k in values.items()}
24 self._cast = {int(v):v for v in self._data.values()}
25 self._dict = {k:v for v,k in values.items()}
26 self._invert_dict = {v:k for v,k in values.items()}
27 for v,k in values.items():
28 setattr(self.__class__, k, managed_attribute(k))
29 def __repr__(self):
30 return f"<enum {self.__name__} : [{', '.join([f'{k}={int(v)}' for k,v in sorted(self._data.items(),key=lambda i:i[1])])}]>"
31 def to_dict(self):
32 r"""to_dict(Enum self) -> dict"""
33 return self._dict
34 def to_invert_dict(self):
35 r"""to_invert_dict(Enum self) -> dict"""
36 return self._invert_dict
37 def __call__(self, key):
38 r"""__call__(Enum self, key) -> EnumItem"""
39 if isinstance(key, int):
40 return self._cast[key]
41 elif isinstance(key, str):
42 return self._data[key]
43 else:
44 raise KeyError(f"Key must be an int or str, got {type(key)}")
45
46 return Enum(name,values)
47
48/*isigen:insert@SWIGenumDeclarations'''
49 tmpAllEnum = {'State':dict(enumerate(sorted([s["name"] for s in builderData["cell"]["States"]])))}
50 tmpAllEnum.update({'Type':dict(enumerate((sorted(builderData["cellTypes"]) if len(builderData["cellTypes"])>0 else ['Common'])))})
51 if "enums" in builderData:
52 tmpAllEnum.update({upperFirst(name): dict(enumerate(sorted(listV))) for name, listV in builderData["enums"].items()})
53 print(f'enumList = {tmpAllEnum}')
54 '''*/
55for enumName,enumValues in enumList.items():
56 globals()[enumName] = IsicellEnum(enumName,enumValues)
57del enumName,IsicellEnum,enumValues,enumList
CompositeGenerator< T > values(T val1, T val2)
Definition: catch.hpp:1968
def IsicellEnum(name, values)
Definition: Enums.py:2