Source code for domainlab.algos.a_algo_builder
"""
parent class for combing model, trainer, task, observer
"""
import abc
from domainlab.compos.pcr.p_chain_handler import AbstractChainNodeHandler
from domainlab.utils.logger import Logger
[docs]
class NodeAlgoBuilder(AbstractChainNodeHandler):
"""
Base class for Algorithm Builder
"""
na_prefix = "NodeAlgoBuilder"
@property
def name(self):
"""
get the name of the algorithm
"""
na_prefix = NodeAlgoBuilder.na_prefix
len_prefix = len(na_prefix)
na_class = type(self).__name__
if na_class[:len_prefix] != na_prefix:
raise RuntimeError(
"algorithm builder node class must start with ",
na_prefix,
"the current class is named: ",
na_class,
)
return type(self).__name__[len_prefix:].lower()
[docs]
def is_myjob(self, request):
"""
:param request: string
"""
return request == self.name
[docs]
@abc.abstractmethod
def init_business(self, exp):
"""
combine model, trainer, observer, task
"""
[docs]
def extend(self, node):
"""
Extends the current algorithm builder with a new node.
This method updates the builder by setting the `next_model` attribute to the specified node.
Args:
node: The node to be added to the algorithm builder.
"""
self.next_model = node
[docs]
def init_next_model(self, model, exp):
"""
initialize the next model and decorate with current model
"""
if self.next_model is not None:
_, next_model, *_ = self.next_model.init_business(exp)
model.extend(next_model)
return model