Source code for kernel.observerCreation

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Definition of the class Observer
Inspired on datacollection.py from mesa abm
https://mesa.readthedocs.io/en/master/
"""
import basicObservers as obs
import dependency_injector.errors as errors
import dependency_injector.providers as providers


[docs]class ObserverCreator(object): """ Observer Generator - Observer Implemented Subclass must be used""" def __init__(self, model, simulation, observer_def, path_to_results): self.model = model self.simulation = simulation self.path_to_results = path_to_results self.observers = {} for observer in observer_def: self.observer_type = observer['observer_type'] self.observer_name = observer['observer_name'] self.observer_agent = observer['observer_agent'] self.observable_vars = observer['observable_vars'] self.observer_model = self.model self.observer_simulation = self.simulation try: an_observer = "obs" + "." + self.observer_type self.observer_class = eval(an_observer) except NameError: print("class ", self.observer_type, " is not defined") self.observer_Factory = ObserverProvider(self.observer_class) self.observer_Factory.add_args(self.observer_name, self.observer_model, self.observer_simulation, self.observer_agent, self.observable_vars, self.path_to_results) try: self.new_observer = self.observer_Factory() self.observers[self.observer_name] = self.new_observer except errors.Error as exception: print(exception)
# <class '__main__.observer_Factory'> # does not know <'__main__.self.observer_name'>
[docs]class ObserverProvider(providers.Factory): """ Observer Provider Class""" provided_type = obs.Observer