Source code for energy_hub.param_var

"""
Provides a class that can either be a reference to a value or to a variable.
"""
from typing import List, Dict


[docs] class ConstantOrVar: """ Provides access to data that can either be a constant or a variable. The values can either be a constant (like a float) or can be a str, which is a reference to a variable in the model. """ def __init__(self, *indices: List, model=None, values: Dict = None) -> None: """ Create a new class. Args: *indices: The indices of which to index by model: The model that holds the variables values: The dictionary to initialize the object. The keys are indexed by *indices and their values are either constants or strings that reference a variable. """ if model is None or values is None: raise ValueError self._model = model self._indices = indices self._values = values def __getitem__(self, item): value = self._values[item] if isinstance(value, str): # References a variable return getattr(self._model, value) return value def _get_values(self, matrix: Dict) -> Dict: for key, value in matrix.items(): if isinstance(value, dict): value = self._get_values(value) elif hasattr(value, 'value'): value = value.name matrix[key] = value return matrix @property def values(self): """Return the values.""" return self._get_values(self._values)