Beispiel #1
0
 def __init__(self, formulas=None):
     super(Formulas, self).__init__(formulas)
     #: dictionary of formula sources added to the Formula layer
     self.formula_sources = {}
     #: formula source objects
     self.formula_obj = {}
     #: formulas
     self.formulas = FormulaRegistry()
Beispiel #2
0
class Formulas(Layer):
    """
    Layer containing formulas.
    """
    def __init__(self, formulas=None):
        super(Formulas, self).__init__(formulas)
        #: dictionary of formula sources added to the Formula layer
        self.formula_sources = {}
        #: formula source objects
        self.formula_obj = {}
        #: formulas
        self.formulas = FormulaRegistry()
        # layers are initialized by the model

    def add(self, formula_source, module, package=None):
        """
        Import module (from package) with formulas, import formulas and add
        them to formula registry.

        :param formula_source: Name of the formula source to add/open.
        :param module: Module containing formula source.
        :param package: [Optional] Package of formula source module.

        .. seealso::
            :func:`importlib.import_module`
        """
        # import module
        mod = importlib.import_module(module, package)
        # get formula source class definition from module
        if formula_source.startswith('_'):
            err_msg = 'No "%s" attribute in "%s".' % (formula_source, mod)
            raise AttributeError(err_msg)
        self.formula_sources[formula_source] = getattr(mod, formula_source)
        # only update layer info if it is missing!
        if formula_source not in self.layer:
            # copy formula source parameters to :attr:`Layer.layer`
            self.layer[formula_source] = {'module': module, 'package': package}
        self.formula_obj[formula_source] = \
            self.formula_sources[formula_source]()
        # register formula and linearity in registry
        formula_src_obj = self.formula_obj[formula_source]
        self.formulas.register(formula_src_obj.formulas,
                               formula_src_obj.islinear)

    def open(self, formula_source, module, package=None):
        self.add(formula_source, module, package=None)

    def load(self):
        """
        Add formula_source to layer.
        """
        for k, v in self.layer.iteritems():
            self.add(k, v['module'], v.get('package'))
Beispiel #3
0
class Formulas(Layer):
    """
    Layer containing formulas.
    """
    def __init__(self, formulas=None):
        super(Formulas, self).__init__(formulas)
        #: dictionary of formula sources added to the Formula layer
        self.formula_sources = {}
        #: formula source objects
        self.formula_obj = {}
        #: formulas
        self.formulas = FormulaRegistry()
        # layers are initialized by the model

    def add(self, formula_source, module, package=None):
        """
        Import module (from package) with formulas, import formulas and add
        them to formula registry.

        :param formula_source: Name of the formula source to add/open.
        :param module: Module containing formula source.
        :param package: [Optional] Package of formula source module.

        .. seealso::
            :func:`importlib.import_module`
        """
        # import module
        mod = importlib.import_module(module, package)
        # get formula source class definition from module
        if formula_source.startswith('_'):
                err_msg = 'No "%s" attribute in "%s".' % (formula_source, mod)
                raise AttributeError(err_msg)
        self.formula_sources[formula_source] = getattr(mod, formula_source)
        # only update layer info if it is missing!
        if formula_source not in self.layer:
            # copy formula source parameters to :attr:`Layer.layer`
            self.layer[formula_source] = {'module': module, 'package': package}
        self.formula_obj[formula_source] = \
            self.formula_sources[formula_source]()
        # register formula and linearity in registry
        formula_src_obj = self.formula_obj[formula_source]
        self.formulas.register(formula_src_obj.formulas,
                               formula_src_obj.islinear)

    def open(self, formula_source, module, package=None):
        self.add(formula_source, module, package=None)

    def load(self):
        """
        Add formula_source to layer.
        """
        for k, v in self.layer.iteritems():
            self.add(k, v['module'], v.get('package'))
Beispiel #4
0
 def __init__(self, formulas=None):
     super(Formulas, self).__init__(formulas)
     #: dictionary of formula sources added to the Formula layer
     self.formula_sources = {}
     #: formula source objects
     self.formula_obj = {}
     #: formulas
     self.formulas = FormulaRegistry()