Spaces:
Running
Running
class BASE_C2G: | |
""" | |
This is the base class for C2G models. | |
Class Methods | |
serialize_c2g(cls, config): Serializes the configuration into a dictionary. | |
deserialize_c2g(self, config): Deserializes the configuration from a dictionary. | |
construct_model(self, configs): Abstract method for constructing a model. This needs to be implemented by subclasses. | |
Examples | |
``` | |
>>> @register_module('test_module') | |
>>> class test_module(BASE_C2G): | |
>>> def __init__(self, a, b): | |
>>> self._config = {'a':a, 'b':b} | |
>>> self.a = a | |
>>> self.b = b | |
>>> def __call__(self): | |
>>> return self.a+self.b | |
>>> sub_module = test_module(1, 2) | |
>>> sub_module() | |
3 | |
>>> @register_module('master_module') | |
>>> class master_module(BASE_C2G): | |
>>> def __init__(self, sub_module): | |
>>> self._config = {'sub_module': sub_module} | |
>>> self.sub_module = sub_module | |
>>> def __call__(self): | |
>>> print(self.sub_module()) | |
>>> master_mod = master_module(sub_module) | |
>>> master_mod() | |
3 | |
>>> save_master_module = BASE_C2G() | |
>>> save_master_module.serialize_c2g(master_mod._config) | |
{'BASE_C2G': {'SUB_MODULE': {'TEST_MODULE': {'a': 1, 'b': 2}}}} | |
>>> cfg._module_list | |
['TEST_MODULE', 'MASTER_MODULE'] | |
``` | |
""" | |
def serialize_c2g(cls, config): | |
cls_config = {} | |
for keyword, value in config.items(): | |
if value.__class__.__name__.upper() not in cfg._module_list: | |
#if value.__name__.upper() not in cfg._module_list: | |
cls_config[keyword] = value | |
else: | |
cls_config[keyword.upper()] = value.serialize_c2g(value._config) | |
cfg._C = {cls.__name__.upper(): cls_config} | |
return cfg._C | |
def has_sub_dicts(self, config): | |
for key, val in config.items(): | |
if isinstance(val, dict): | |
return False | |
return True | |
def deserialize_c2g(self, config): | |
for model, params in config.items(): | |
pass | |
return cfg._dir[model](**params) | |
def construct_model(self, configs): | |
raise NotImplementedError('`construct_model` method is not implemented. To implement it, define it on the subclasses of BASE_C2G Models.') | |