Source code for yaocptool.modelling.mixins.parameter_mixin

from casadi.casadi import SX, vec, vertcat
from yaocptool.util.util import remove_variables_from_vector


[docs]class ParameterMixin:
[docs] def __init__(self, **kwargs): super().__init__(**kwargs) self.p = SX([]) self.theta = SX([])
@property def n_p(self): return self.p.numel() @property def n_theta(self): return self.theta.numel() @property def p_names(self): return [self.p[i].name() for i in range(self.n_p)] @property def theta_names(self): return [self.theta[i].name() for i in range(self.n_theta)]
[docs] def create_parameter(self, name="p", size=1): """ Create a new parameter name "name" and size "size" :param name: str :param size: int :return: """ if callable(getattr(self, 'name_variable', None)): name = self.name_variable(name) new_p = SX.sym(name, size) self.include_parameter(vec(new_p)) return new_p
[docs] def create_theta(self, name="theta", size=1): """ Create a new parameter name "name" and size "size" :param name: str :param size: int :return: """ if callable(getattr(self, 'name_variable', None)): name = self.name_variable(name) new_theta = SX.sym(name, size) self.include_theta(vec(new_theta)) return new_theta
[docs] def include_parameter(self, p): self.p = vertcat(self.p, p)
[docs] def include_theta(self, theta): self.theta = vertcat(self.theta, theta)
[docs] def remove_parameter(self, var): self.p = remove_variables_from_vector(var, self.p)
[docs] def remove_theta(self, var): self.theta = remove_variables_from_vector(var, self.theta)