def setUp(self): # pylint: disable=invalid-name self.model = TestEquation.MockModel() self.model.variables['x'] = Variable('x') self.model.variables['y'] = Variable('y') self.model.variables['z'] = Variable('z') self.x = self.model.variables['x'] self.x.model = self.model self.y = self.model.variables['y'] self.y.model = self.model self.z = self.model.variables['z'] self.z.model = self.model self.model.parameters['a'] = Parameter('a') self.model.parameters['b'] = Parameter('b') self.a = self.model.parameters['a'] self.a.model = self.model self.b = self.model.parameters['b'] self.b.model = self.model for var in self.model.variables.values(): _add_var_to_context(self.model._local_context, var) for param in self.model.parameters.values(): _add_param_to_context(self.model._local_context, param) _add_functions(self.model._local_context)
def var(self, name, desc=None, default=None): """ Creates a variable for use within the model. Arguments: name: The name of the variable. This is the symbol used in the equations. desc: A longer description of the variable. default: The default value of the variable, if the value is not set. Returns: a Variable Raises: DuplicateNameError: """ if default is None: default = self._var_default if name in self.variables or name in self.parameters: raise DuplicateNameError('Name already in use: ' + name) var = Variable(name, desc=desc, default=default) self.variables[name] = var var.model = self _add_var_to_context(self._local_context, var) self._need_function_update = True return var
def test_equation_rewrite(self): """ Test the equation rewriting function """ variables = dict() variables['x'] = Variable('x') variables['y'] = Variable('y') self.assertEquals('x - y', _rewrite(variables, {}, 'x - y')) self.assertEquals('xx - y', _rewrite(variables, {}, 'xx - y')) self.assertEquals('xx - yx', _rewrite(variables, {}, 'xx - yx')) self.assertEquals('xx(0) - yx', _rewrite(variables, {}, 'xx(0) - yx')) self.assertEquals('_series_acc(x,-1)', _rewrite(variables, {}, 'x(-1)')) self.assertEquals('_series_acc(x,-t)', _rewrite(variables, {}, 'x(-t)')) parameters = dict() parameters['a'] = Parameter('a') parameters['b'] = Parameter('b') self.assertEquals('_series_acc(a,-1)', _rewrite({}, parameters, 'a(-1)'))
def test_seriesparameter_access(self): """ Test get/set access of value attribute """ model = TestSeriesParameter.MockModel() varx = Variable('x', default=-1) varx.model = model param = SeriesParameter('a', variable=varx, iteration=-1) self.assertEquals(-1, param.value) self.assertEquals(model.last_variable, varx) self.assertEquals(model.last_iteration, -1) param = SeriesParameter('a', variable=varx, iteration=2) self.assertEquals(2, param.value) self.assertEquals(model.last_variable, varx) self.assertEquals(model.last_iteration, 2) with self.assertRaises(AttributeError): param.value = 4
def test_illegal_names(self): """ Test for illeagl name handling """ for name in Variable.ILLEGAL_NAMES: with self.assertRaises(InvalidNameError) as context: Variable(name) self.assertEquals(name, context.exception.name)