Source code for smif.model.scenario_model
from numpy import ndarray
from smif.metadata import MetadataSet
from smif.model import Model
[docs]class ScenarioModel(Model):
"""Represents exogenous scenario data
Arguments
---------
name : string
The unique name of this scenario
output : smif.metadata.MetaData
A name for the scenario output parameter
"""
def __init__(self, name, output=None):
if output:
if isinstance(output, MetadataSet):
super().__init__(name)
self._model_outputs = output
else:
msg = "output argument should be type smif.metadata.MetadataSet"
raise TypeError(msg)
else:
super().__init__(name)
self._data = {}
self.timesteps = []
[docs] def add_output(self, name, spatial_resolution, temporal_resolution, units):
"""Add an output to the scenario model
Arguments
---------
name: str
spatial_resolution: :class:`smif.convert.area.RegionRegister`
temporal_resolution: :class:`smif.convert.interval.TimeIntervalRegister`
units: str
"""
output_metadata = {"name": name,
"spatial_resolution": spatial_resolution,
"temporal_resolution": temporal_resolution,
"units": units}
self._model_outputs.add_metadata(output_metadata)
[docs] def add_data(self, data, timesteps):
"""Add data to the scenario
Arguments
---------
data : numpy.ndarray
timesteps : list
Example
-------
>>> elec_scenario = ScenarioModel('elec_scenario')
>>> data = np.array([[[120.23]]])
>>> timesteps = [2010]
>>> elec_scenario.add_data(data, timesteps)
"""
self.timesteps = timesteps
assert isinstance(data, ndarray)
self._data = data
[docs] def simulate(self, timestep, data=None):
"""Returns the scenario data
"""
time_index = self.timesteps.index(timestep)
return {self.name: {self.model_outputs.names[0]: self._data[time_index]}}