Source code for sasoptpy.abstract.parameter_group


from collections import OrderedDict

from .parameter import Parameter

import sasoptpy

[docs]class ParameterGroup: """ Represents a group of input parameters Parameters ---------- index_key : iterable Index key of the group members name : string Name of the parameter group ptype : string, optional Type of the parameters. Possible values are `sasoptpy.STR` and `sasoptpy.NUM` value : float, optional Value of the parameter init : float, optional Initial value of the parameter Examples -------- >>> from sasoptpy.actions import for_loop >>> with so.Workspace('w') as w: ... p = so.ParameterGroup(so.exp_range(1, 6), name='p', init=3) ... p[0].set_value(3) ... S = so.Set(name='S', value=so.exp_range(1, 6)) ... for i in for_loop(S): ... p[i].set_value(1) ... >>> print(so.to_optmodel(w)) proc optmodel; num p {1..5} init 3; p[0] = 3; set S = 1..5; for {o13 in S} do; p[o13] = 1; end; quit; """ @sasoptpy.class_containable def __init__(self, *index_key, name, init=None, value=None, ptype=None): self._key = list(index_key) self._name = name self._init = init self._value = value if ptype is None: ptype = sasoptpy.NUM self._ptype = ptype self._objorder = sasoptpy.util.get_creation_id() self._shadows = OrderedDict() def get_name(self): return self._name def get_element_name(self, key): keyname = sasoptpy.util.package_utils._to_sas_string(key) return '{}[{}]'.format(self.get_name(), keyname) def __getitem__(self, key): if key in self._shadows: return self._shadows[key] else: try: keys = ', '.join(i._expr() if hasattr(i, '_expr') else str(i) for i in key) except TypeError: keys = str(key) temp_name = '{}[{}]'.format(self.get_name(), keys) pv = Parameter(name=temp_name, internal=True) pv.set_parent(self, key=key) self._shadows[key] = pv return pv def __setitem__(self, key, value): k = self[key] k.set_value(value) sasoptpy.abstract.Assignment(self._shadows[key], value) def get_type_name_str(self): return '{} {}'.format(self._ptype, self.get_name()) def get_iterator_str(self): key_defs = [] for k in self._key: if sasoptpy.abstract.is_key_abstract(k): key_defs.append(k._defn()) else: key_defs.append(sasoptpy.to_expression(k)) return ' {{{}}}'.format(', '.join(key_defs)) def get_value_init_str(self): if self._init is not None: return ' init {}'.format(self._init) elif self._value is not None: return ' = {}'.format(self._value) return '' def _defn(self): type_name_str = self.get_type_name_str() iterator_str = self.get_iterator_str() value_init_str = self.get_value_init_str() s = type_name_str + iterator_str + value_init_str s += ';' return s def _expr(self): return self.get_name()