Source code for energia.modeling.parameters.instruction
"""A Pre-set Parameter"""
from __future__ import annotations
from typing import TYPE_CHECKING, Type
from ..._core._name import _Name
if TYPE_CHECKING:
from ..._core._component import _Component
from ...represent.model import Model
[docs]
class Instruction(_Name):
"""
Pre-set instructions to deal with parameter calculations
:param deciding: Name of the deciding aspect
:type deciding: str
:param depending: Name of the depending aspect
:type depending: str
:param default: Name of the default component
:type default: str
:param label: Label for the parameter. Defaults to ''.
:type label: str, optional
:param latex: LaTeX representation of the parameter. Defaults to ''.
:type latex: str, optional
:raises TypeError: If the component provided is not of the correct kind.
"""
def __init__(
self,
name: str,
kind: Type[_Component],
deciding: str,
depending: str,
default: str,
label: str = "",
latex: str = "",
):
_Name.__init__(self, label=label)
self.name = name
self.kind = kind
self.deciding = deciding
self.depending = depending
self.default = default
self.model: Model | None = None
self.latex = latex or self.name
def __call__(self, component: _Component):
# create the calculation
# there has to be a model
if isinstance(component, self.kind):
self.model = component.model
default_comp = self.model.default_components[self.default]()
depending = getattr(default_comp, self.depending)
deciding = getattr(component, self.deciding)
return deciding[depending]
raise TypeError(
f"{component} ({type(component)}): {self.name} earmarked for {self.kind.__name__}"
)