def test_mc_2d(self): m = ConcreteModel() m.x = Var(bounds=(pi / 6, pi / 3), initialize=pi / 4) m.e = Expression(expr=cos(pow(m.x, 2)) * sin(pow(m.x, -3))) mc_ccVals, mc_cvVals, aff_cc, aff_cv = make2dPlot(m.e.expr, 50) self.assertAlmostEqual(mc_ccVals[1], 0.6443888590411435) self.assertAlmostEqual(mc_cvVals[1], 0.2328315489072924) self.assertAlmostEqual(aff_cc[1], 0.9674274332870583) self.assertAlmostEqual(aff_cv[1], -1.578938503009686)
def test_trig(self): m = ConcreteModel() m.x = Var(bounds=(pi / 4, pi / 2), initialize=pi / 4) mc_expr = mc(tan(atan((m.x)))) self.assertAlmostEqual(mc_expr.lower(), pi / 4) self.assertAlmostEqual(mc_expr.upper(), pi / 2) m.y = Var(bounds=(0, sin(pi / 4)), initialize=0) mc_expr = mc(asin((m.y))) self.assertEqual(mc_expr.lower(), 0) self.assertAlmostEqual(mc_expr.upper(), pi / 4) m.z = Var(bounds=(0, cos(pi / 4)), initialize=0) mc_expr = mc(acos((m.z))) self.assertAlmostEqual(mc_expr.lower(), pi / 4) self.assertAlmostEqual(mc_expr.upper(), pi / 2)
def test_collect_mutable_parameters(self): model = pc.ConcreteModel() model.p = pc.Param(mutable=True) model.q = pc.Param([1], mutable=True, initialize=1.0) model.r = pc.Param(initialize=1.1, mutable=False) model.x = pc.Var() for obj in [model.p, model.q[1]]: result = EmbeddedSP._collect_mutable_parameters( obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj + 1) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 2 * (obj + 1)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 2 * obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 2 * obj + 1) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 2 * obj + 1 + model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj * model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x / obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x / (2 * obj)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj * pc.log(2 * model.x)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj * pc.sin(model.r) ** model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x**(obj * pc.sin(model.r))) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 1.0) self.assertEqual(len(result), 0) del result result = EmbeddedSP._collect_mutable_parameters( model.p + model.q[1] + model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( model.p + 1 + model.r + model.q[1]) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) result = EmbeddedSP._collect_mutable_parameters( model.q[1] * 2 * (model.p + model.r) + model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( 2 * model.x * model.p * model.q[1] * model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( 2 * obj * model.q[1] * model.r + 1) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( 2 * model.q[1] + 1 + model.x - model.p) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( model.r * model.x) self.assertEqual(len(result), 0) del result result = EmbeddedSP._collect_mutable_parameters( model.x / obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x / (2 * model.q[1] / model.p)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( (model.p / model.q[1]) * pc.log(2 * model.x)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( model.q[1] * pc.sin(model.p) ** (model.x + model.r)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( (model.p + model.x) ** (model.q[1] * pc.sin(model.r))) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result
def _sum(*x): return sum(i for i in x) def _nondifferentiable(*x): raise NondifferentiableError( "The sub-expression '%s' is not differentiable with respect to %s" % (x[0], x[1])) _operatorMap = { sympy.Add: _sum, sympy.Mul: _prod, sympy.Pow: lambda x, y: x**y, sympy.exp: lambda x: core.exp(x), sympy.log: lambda x: core.log(x), sympy.sin: lambda x: core.sin(x), sympy.asin: lambda x: core.asin(x), sympy.sinh: lambda x: core.sinh(x), sympy.asinh: lambda x: core.asinh(x), sympy.cos: lambda x: core.cos(x), sympy.acos: lambda x: core.acos(x), sympy.cosh: lambda x: core.cosh(x), sympy.acosh: lambda x: core.acosh(x), sympy.tan: lambda x: core.tan(x), sympy.atan: lambda x: core.atan(x), sympy.tanh: lambda x: core.tanh(x), sympy.atanh: lambda x: core.atanh(x), sympy.ceiling: lambda x: core.ceil(x), sympy.floor: lambda x: core.floor(x), sympy.Derivative: _nondifferentiable, }
return ans def _sum(*x): return sum(i for i in x) def _nondifferentiable(*x): raise NondifferentiableError( "The sub-expression '%s' is not differentiable with respect to %s" % (x[0],x[1]) ) _operatorMap = { sympy.Add: _sum, sympy.Mul: _prod, sympy.Pow: lambda x,y: x**y, sympy.log: lambda x: core.log(x), sympy.sin: lambda x: core.sin(x), sympy.asin: lambda x: core.asin(x), sympy.sinh: lambda x: core.sinh(x), sympy.asinh: lambda x: core.asinh(x), sympy.cos: lambda x: core.cos(x), sympy.acos: lambda x: core.acos(x), sympy.cosh: lambda x: core.cosh(x), sympy.acosh: lambda x: core.acosh(x), sympy.tan: lambda x: core.tan(x), sympy.atan: lambda x: core.atan(x), sympy.tanh: lambda x: core.tanh(x), sympy.atanh: lambda x: core.atanh(x), sympy.ceiling: lambda x: core.ceil(x), sympy.floor: lambda x: core.floor(x), sympy.Derivative: _nondifferentiable, }
def test_collect_mutable_parameters(self): model = pc.ConcreteModel() model.p = pc.Param(mutable=True) model.q = pc.Param([1], mutable=True, initialize=1.0) model.r = pc.Param(initialize=1.1, mutable=False) model.x = pc.Var() for obj in [model.p, model.q[1]]: result = EmbeddedSP._collect_mutable_parameters(obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(obj + 1) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(2 * (obj + 1)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(2 * obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(2 * obj + 1) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(2 * obj + 1 + model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(obj * model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(model.x / obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(model.x / (2 * obj)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj * pc.log(2 * model.x)) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( obj * pc.sin(model.r)**model.x) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x**(obj * pc.sin(model.r))) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(1.0) self.assertEqual(len(result), 0) del result result = EmbeddedSP._collect_mutable_parameters(model.p + model.q[1] + model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters(model.p + 1 + model.r + model.q[1]) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) result = EmbeddedSP._collect_mutable_parameters(model.q[1] * 2 * (model.p + model.r) + model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters(2 * model.x * model.p * model.q[1] * model.r) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters(2 * obj * model.q[1] * model.r + 1) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters(2 * model.q[1] + 1 + model.x - model.p) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters(model.r * model.x) self.assertEqual(len(result), 0) del result result = EmbeddedSP._collect_mutable_parameters(model.x / obj) self.assertTrue(id(obj) in result) self.assertEqual(len(result), 1) del result result = EmbeddedSP._collect_mutable_parameters( model.x / (2 * model.q[1] / model.p)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( (model.p / model.q[1]) * pc.log(2 * model.x)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( model.q[1] * pc.sin(model.p)**(model.x + model.r)) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result result = EmbeddedSP._collect_mutable_parameters( (model.p + model.x)**(model.q[1] * pc.sin(model.r))) self.assertTrue(id(model.p) in result) self.assertTrue(id(model.q[1]) in result) self.assertEqual(len(result), 2) del result