def testConstraint(self): """Test the Constraint class.""" p1 = Parameter("p1", 1) p2 = Parameter("p2", 2) factory = EquationFactory() factory.registerArgument("p1", p1) factory.registerArgument("p2", p2) c = Constraint() # Constrain p1 = 2*p2 eq = equationFromString("2*p2", factory) c.constrain(p1, eq) self.assertTrue(p1.constrained) self.assertFalse(p2.constrained) eq2 = equationFromString("2*p2+1", factory) c2 = Constraint() self.assertRaises(ValueError, c2.constrain, p1, eq2) p2.setConst() eq3 = equationFromString("p1", factory) self.assertRaises(ValueError, c2.constrain, p2, eq3) p2.setValue(2.5) c.update() self.assertEquals(5.0, p1.getValue()) p2.setValue(8.1) self.assertEquals(5.0, p1.getValue()) c.update() self.assertEquals(16.2, p1.getValue()) return
def testConstraint(self): """Test the Constraint class.""" p1 = Parameter("p1", 1) p2 = Parameter("p2", 2) factory = EquationFactory() factory.registerArgument("p1", p1) factory.registerArgument("p2", p2) c = Constraint() # Constrain p1 = 2*p2 eq = equationFromString("2*p2", factory) c.constrain(p1, eq) self.assertTrue(p1.constrained) self.assertFalse(p2.constrained) eq2 = equationFromString("2*p2+1", factory) c2 = Constraint() self.assertRaises(ValueError, c2.constrain, p1, eq2) p2.setConst() eq3 = equationFromString("p1", factory) self.assertRaises(ValueError, c2.constrain, p2, eq3) p2.setValue(2.5) c.update() self.assertEquals(5.0, p1.getValue()) p2.setValue(8.1) self.assertEquals(5.0, p1.getValue()) c.update() self.assertEquals(16.2, p1.getValue()) return
def testSetValue(self): """Test initialization.""" l = Parameter("l") l.setValue(3.14) self.assertAlmostEqual(3.14, l.getValue()) # Try array import numpy x = numpy.arange(0, 10, 0.1) l.setValue(x) self.assertTrue( l.getValue() is x ) self.assertTrue( l.value is x ) # Change the array y = numpy.arange(0, 10, 0.5) l.value = y self.assertTrue( l.getValue() is y ) self.assertTrue( l.value is y ) # Back to scalar l.setValue(1.01) self.assertAlmostEqual(1.01, l.getValue()) self.assertAlmostEqual(1.01, l.value) return
def testSetValue(self): """Test initialization.""" l = Parameter("l") l.setValue(3.14) self.assertAlmostEqual(3.14, l.getValue()) # Try array import numpy x = numpy.arange(0, 10, 0.1) l.setValue(x) self.assertTrue(l.getValue() is x) self.assertTrue(l.value is x) # Change the array y = numpy.arange(0, 10, 0.5) l.value = y self.assertTrue(l.getValue() is y) self.assertTrue(l.value is y) # Back to scalar l.setValue(1.01) self.assertAlmostEqual(1.01, l.getValue()) self.assertAlmostEqual(1.01, l.value) return
def testProxy(self): """Test the ParameterProxy class.""" l = Parameter("l", 3.14) # Try Accessor adaptation la = ParameterProxy("l2", l) self.assertEqual("l2", la.name) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.value = 2.3 self.assertEqual(l.getValue(), la.getValue()) self.assertEqual(l.value, la.value) # Change the proxy la.value = 3.2 self.assertEqual(l.getValue(), la.getValue()) self.assertEqual(l.value, la.value) return
def testProxy(self): """Test the ParameterProxy class.""" l = Parameter("l", 3.14) # Try Accessor adaptation la = ParameterProxy("l2", l) self.assertEqual("l2", la.name) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.value = 2.3 self.assertEqual(l.getValue(), la.getValue()) self.assertEqual(l.value, la.value) # Change the proxy la.value = 3.2 self.assertEqual(l.getValue(), la.getValue()) self.assertEqual(l.value, la.value) return
def bound_range(variable: Parameter, bound: tp.Union[tp.Tuple, tp.Dict], ratio: bool = False) -> Parameter: """Bound variable by range.""" value = variable.getValue() if isinstance(bound, dict): if ratio: for k, r in bound.items(): bound[k] = value * r variable.boundRange(**bound) else: if ratio: bound = tuple((r * value for r in bound)) variable.boundRange(*bound) return variable
def bound_window( variable: Parameter, bound: tp.Union[float, tp.Tuple, tp.Dict], ratio: bool = False ) -> Parameter: """Bound variable by window.""" value = variable.getValue() if isinstance(bound, dict): if ratio: for k, r in bound.items(): bound[k] = value * r variable.boundWindow(**bound) elif isinstance(bound, float): if ratio: bound = bound * value variable.boundWindow(bound) else: if ratio: bound = tuple((r * value for r in bound)) variable.boundWindow(*bound) return variable
def testWrapper(self): """Test the adapter. This adapts a Parameter to the Parameter interface. :) """ l = Parameter("l", 3.14) # Try Accessor adaptation la = ParameterAdapter("l", l, getter=Parameter.getValue, setter=Parameter.setValue) self.assertEqual(l.name, la.name) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.setValue(2.3) self.assertEqual(l.getValue(), la.getValue()) # Change the adapter la.setValue(3.2) self.assertEqual(l.getValue(), la.getValue()) # Try Attribute adaptation la = ParameterAdapter("l", l, attr="value") self.assertEqual(l.name, la.name) self.assertEqual("value", la.attr) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.setValue(2.3) self.assertEqual(l.getValue(), la.getValue()) # Change the adapter la.setValue(3.2) self.assertEqual(l.getValue(), la.getValue()) return
def testWrapper(self): """Test the adapter. This adapts a Parameter to the Parameter interface. :) """ l = Parameter("l", 3.14) # Try Accessor adaptation la = ParameterAdapter("l", l, getter = Parameter.getValue, setter = Parameter.setValue) self.assertEqual(l.name, la.name) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.setValue(2.3) self.assertEqual(l.getValue(), la.getValue()) # Change the adapter la.setValue(3.2) self.assertEqual(l.getValue(), la.getValue()) # Try Attribute adaptation la = ParameterAdapter("l", l, attr = "value") self.assertEqual(l.name, la.name) self.assertEqual("value", la.attr) self.assertEqual(l.getValue(), la.getValue()) # Change the parameter l.setValue(2.3) self.assertEqual(l.getValue(), la.getValue()) # Change the adapter la.setValue(3.2) self.assertEqual(l.getValue(), la.getValue()) return