def testRestraint(self): """Test the Restraint class.""" p1 = Parameter("p1", 1) p2 = Parameter("p2", 2) factory = EquationFactory() factory.registerArgument("p1", p1) factory.registerArgument("p2", p2) # Restrain 1 < p1 + p2 < 5 eq = equationFromString("p1 + p2", factory) r = Restraint(eq, 1, 5) # This should have no penalty p1.setValue(1) p2.setValue(1) self.assertEqual(0, r.penalty()) # Make p1 + p2 = 0 # This should have a penalty of 1*(1 - 0)**2 = 1 p1.setValue(-1) p2.setValue(1) self.assertEqual(1, r.penalty()) # Make p1 + p2 = 8 # This should have a penalty of 1*(8 - 5)**2 = 9 p1.setValue(4) p2.setValue(4) self.assertEqual(9, r.penalty()) # Set the chi^2 to get a dynamic penalty r.scaled = True self.assertEqual(13.5, r.penalty(1.5)) # Make a really large number to check the upper bound import numpy r.ub = numpy.inf p1.setValue(1e100) self.assertEqual(0, r.penalty()) return
def testRestraint(self): """Test the Restraint class.""" p1 = Parameter("p1", 1) p2 = Parameter("p2", 2) factory = EquationFactory() factory.registerArgument("p1", p1) factory.registerArgument("p2", p2) # Restrain 1 < p1 + p2 < 5 eq = equationFromString("p1 + p2", factory) r = Restraint(eq, 1, 5) # This should have no penalty p1.setValue(1) p2.setValue(1) self.assertEquals(0, r.penalty()) # Make p1 + p2 = 0 # This should have a penalty of 1*(1 - 0)**2 = 1 p1.setValue(-1) p2.setValue(1) self.assertEquals(1, r.penalty()) # Make p1 + p2 = 8 # This should have a penalty of 1*(8 - 5)**2 = 9 p1.setValue(4) p2.setValue(4) self.assertEquals(9, r.penalty()) # Set the chi^2 to get a dynamic penalty r.scaled = True self.assertEquals(13.5, r.penalty(1.5)) # Make a really large number to check the upper bound import numpy r.ub = numpy.inf p1.setValue(1e100) self.assertEquals(0, r.penalty()) return