Source code for domainlab.algos.zoo_algos

"""
chain of responsibility pattern for algorithm selection
"""
from domainlab.algos.builder_api_model import NodeAlgoBuilderAPIModel
from domainlab.algos.builder_dann import NodeAlgoBuilderDANN
from domainlab.algos.builder_diva import NodeAlgoBuilderDIVA
from domainlab.algos.builder_erm import NodeAlgoBuilderERM
from domainlab.algos.builder_hduva import NodeAlgoBuilderHDUVA
from domainlab.algos.builder_jigen1 import NodeAlgoBuilderJiGen
from domainlab.utils.u_import import import_path


[docs] class AlgoBuilderChainNodeGetter: """ 1. Hardcoded chain 3. Return selected node """ def __init__(self, model, apath): self.model = model self.apath = apath # self._list_str_model = model.split("_") self.model = self._list_str_model.pop(0)
[docs] def register_external_node(self, chain): """ if the user specify an external python file to implement the algorithm """ if self.apath is None: return chain node_module = import_path(self.apath) node_fun = node_module.get_node_na() # @FIXME: build_node API need newchain = node_fun(chain) return newchain
def __call__(self): """ 1. construct the chain, filter out responsible node, create heavy-weight business object 2. hard code seems to be the best solution """ chain = NodeAlgoBuilderDIVA(None) chain = NodeAlgoBuilderERM(chain) chain = NodeAlgoBuilderDANN(chain) chain = NodeAlgoBuilderJiGen(chain) chain = NodeAlgoBuilderHDUVA(chain) chain = NodeAlgoBuilderAPIModel(chain) chain = self.register_external_node(chain) node = chain.handle(self.model) head = node while self._list_str_model: self.model = self._list_str_model.pop(0) node2decorate = self.__call__() head.extend(node2decorate) head = node2decorate return node