Source code for wntr.sim.models.utils
"""Utilities for the WNTRSimulator model."""
from wntr.utils.ordered_set import OrderedDict, OrderedSet
from six import with_metaclass
import abc
[docs]
class ModelUpdater(object):
[docs]
    def __init__(self):
        self.update_functions = OrderedDict() 
[docs]
    def add(self, obj, attr, func):
        if (obj, attr) not in self.update_functions:
            self.update_functions[(obj, attr)] = OrderedSet()
        self.update_functions[(obj, attr)].add(func) 
[docs]
    def update(self, m, wn, obj, attr):
        if (obj, attr) in self.update_functions:
            for func in self.update_functions[(obj, attr)]:
                func(m, wn, self, obj, attr) 
 
[docs]
class Definition(with_metaclass(abc.ABCMeta, object)):
[docs]
    @classmethod
    @abc.abstractmethod
    def build(cls, m, wn, updater, index_over=None):
        pass 
[docs]
    @classmethod
    def update(cls, m, wn, updater, obj, attr):
        cls.build(m, wn, updater, index_over=[obj.name])