"""Handling of algorithms and algorithm parameters."""
from typing import List, Optional, Union
from pymetadata.metadata import KISAO, KISAOType
from sbmlutils import log
from sbmlsim.simulation.base import BaseObject
[docs]logger = log.get_logger(__name__)
[docs]class AlgorithmParameter(BaseObject):
"""AlgorithmParameter.
The AlgorithmParameter class allows to parameterize a particular simulation
algorithm. The set of possible parameters for a particular instance is determined
by the algorithm that is referenced by the kisaoID of the enclosing algorithm
element.
"""
def __init__(
self,
kisao: KISAOType,
value: Union[str, float],
sid: str = None,
name: str = None,
):
"""Initialize AlgorithmParameter."""
term: KISAO = KISAO.validate(kisao)
term_name: str = KISAO.get_name(term)
if name:
if name != term_name:
logger.warning("Using name '{name}' instead of '{term_name}'.")
else:
name = term_name
super(AlgorithmParameter, self).__init__(sid=sid, name=name)
self.kisao: KISAO = term
self.value: str = str(value)
[docs] def __repr__(self) -> str:
"""Get string representation."""
return f"AlgorithmParameter('{self.name}' = {self.value} | {self.kisao})"
[docs]class Algorithm(BaseObject):
"""Algorithm class."""
def __init__(
self,
kisao: KISAOType,
parameters: Optional[List[AlgorithmParameter]] = None,
sid: Optional[str] = None,
name: Optional[str] = None,
):
"""Initialize Algorithm."""
term: KISAO = KISAO.validate(kisao)
term_name: str = KISAO.get_name(term)
if name:
if name != term_name:
logger.warning("Using name '{name}' instead of '{term_name}'.")
else:
name = term_name
super(Algorithm, self).__init__(sid, name)
self.kisao: KISAO = kisao
self.parameters: Optional[List[AlgorithmParameter]] = parameters
[docs] def __repr__(self) -> str:
"""Get string representation."""
return f"Algorithm({self.name}, {self.kisao}, parameters={self.parameters})"