Source code for smif.parameters
# -*- coding: utf-8 -*-
"""Encapsulates the input or output parameters of a sector model,
for example::
- name: petrol_price
spatial_resolution: GB
temporal_resolution: annual
- name: diesel_price
spatial_resolution: GB
temporal_resolution: annual
- name: LPG_price
spatial_resolution: GB
temporal_resolution: annual
"""
from __future__ import absolute_import, division, print_function
import logging
from collections import namedtuple
__author__ = "Will Usher, Tom Russell"
__copyright__ = "Will Usher, Tom Russell, University of Oxford 2017"
__license__ = "mit"
Parameter = namedtuple(
"Parameter",
[
"name",
"spatial_resolution",
"temporal_resolution"
]
)
[docs]class ModelParameters(object):
"""A container for all the model inputs
Arguments
=========
inputs : list
A list of dicts of model parameter name, spatial resolution
and temporal resolution
"""
def __init__(self, parameters):
self._parameters = [Parameter(parameter['name'],
parameter['spatial_resolution'],
parameter['temporal_resolution']
) for parameter in parameters]
self.logger = logging.getLogger(__name__)
@property
def parameters(self):
"""A list of the model parameters
Returns
=======
:class:`smif.parameters.ParameterList`
"""
return self._parameters
def __len__(self):
return len(self.parameters)
[docs] def get_spatial_res(self, name):
"""The spatial resolution for parameter `name`
Arguments
---------
name: str
The name of a model parameter
"""
for parameter in self._parameters:
if parameter.name == name:
spatial_resolution = parameter.spatial_resolution
break
else:
raise ValueError("No output found for name '{}'".format(name))
return spatial_resolution
[docs] def get_temporal_res(self, name):
"""The temporal resolution for parameter `name`
Arguments
---------
name: str
The name of a model parameter
"""
for parameter in self._parameters:
if parameter.name == name:
temporal_resolution = parameter.temporal_resolution
break
else:
raise ValueError("No output found for name '{}'".format(name))
return temporal_resolution
@property
def spatial_resolutions(self):
"""A list of the spatial resolutions
Returns
-------
list
A list of the spatial resolutions associated with the model
parameters
"""
return [parameter.spatial_resolution for parameter in self._parameters]
@property
def temporal_resolutions(self):
"""A list of the temporal resolutions
Returns
-------
list
A list of the temporal resolutions associated with the model
parameters
"""
return [parameter.temporal_resolution for parameter in self._parameters]
@property
def names(self):
return [parameter.name for parameter in self._parameters]