diff --git a/pyomo/core/base/block.py b/pyomo/core/base/block.py index dfe812f88f2..6d619a1e79f 100644 --- a/pyomo/core/base/block.py +++ b/pyomo/core/base/block.py @@ -12,6 +12,7 @@ 'active_components', 'components', 'active_components_data', 'components_data'] +import re import copy import sys import weakref @@ -38,6 +39,7 @@ logger = logging.getLogger('pyomo.core') +valid_component_name = re.compile("[_a-zA-Z][_a-zA-Z0-9]*") # Monkey-patch for deepcopying weakrefs # Only required on Python <= 2.6 @@ -818,6 +820,9 @@ def add_component(self, name, val): # # Error checks # + if valid_component_name.fullmatch(name) is None: + raise AttributeError( + "'%s' is not a valid component name. Cannot add '%s' as a component to a block with t" % (name, str(type(val)))) if not val.valid_model_component(): raise RuntimeError( "Cannot add '%s' as a component to a block" % str(type(val))) diff --git a/pyomo/core/plugins/transform/add_slack_vars.py b/pyomo/core/plugins/transform/add_slack_vars.py index 9a7c2ae3d9a..d353a809ce1 100644 --- a/pyomo/core/plugins/transform/add_slack_vars.py +++ b/pyomo/core/plugins/transform/add_slack_vars.py @@ -58,6 +58,7 @@ def _apply_to(self, instance, **kwds): xblockname = unique_component_name(instance, "_core_add_slack_variables") instance.add_component(xblockname, Block()) xblock = instance.component(xblockname) + xblock.slacks = Var(Any, within=NonNegativeReals, dense=False) obj_expr = 0 for cons in constraintDatas: @@ -72,8 +73,7 @@ def _apply_to(self, instance, **kwds): # we add positive slack variable to body: # declare positive slack varName = "_slack_plus_" + cons.name - posSlack = Var(within=NonNegativeReals) - xblock.add_component(varName, posSlack) + posSlack = xblock.slacks.add(varName) # add positive slack to body expression cons._body += posSlack # penalize slack in objective @@ -82,8 +82,7 @@ def _apply_to(self, instance, **kwds): # we subtract a positive slack variable from the body: # declare slack varName = "_slack_minus_" + cons.name - negSlack = Var(within=NonNegativeReals) - xblock.add_component(varName, negSlack) + negSlack = xblock.slacks.add(varName) # add negative slack to body expression cons._body -= negSlack # add slack to objective diff --git a/pyomo/core/plugins/transform/expand_connectors.py b/pyomo/core/plugins/transform/expand_connectors.py index 51ea3df0015..28dfa0101af 100644 --- a/pyomo/core/plugins/transform/expand_connectors.py +++ b/pyomo/core/plugins/transform/expand_connectors.py @@ -93,7 +93,7 @@ def _apply_to(self, instance, **kwds): for constraint, conn_set in constraint_list: cList = ConstraintList() constraint.parent_block().add_component( - '%s.expanded' % ( constraint.local_name, ), cList ) + '%s_expanded' % ( constraint.local_name, ), cList ) connId = next(iterkeys(conn_set)) ref = known_conn_sets[id(matched_connectors[connId])] for k,v in sorted(iteritems(ref)): @@ -123,7 +123,7 @@ def _apply_to(self, instance, **kwds): for var, aggregator in iteritems(conn.aggregators): c = Constraint(expr=aggregator(block, conn.vars[var])) block.add_component( - '%s.%s.aggregate' % (conn.local_name, var), c ) + '%s_%s_aggregate' % (conn.local_name, var), c ) def _validate_and_expand_connector_set(self, connectors): @@ -227,7 +227,7 @@ def _validate_and_expand_connector_set(self, connectors): except AttributeError: pass new_var = Var( *idx, **var_args ) - block.add_component('%s.auto.%s' % ( c.local_name, k ), new_var) + block.add_component('%s_auto_%s' % ( c.local_name, k ), new_var) if idx: for i in idx[0]: new_var[i].domain = v[0][i].domain diff --git a/pyomo/core/tests/transform/test_add_slacks.py b/pyomo/core/tests/transform/test_add_slacks.py index 6c408323b8d..b6bf2d18a1f 100644 --- a/pyomo/core/tests/transform/test_add_slacks.py +++ b/pyomo/core/tests/transform/test_add_slacks.py @@ -54,17 +54,15 @@ def test_slack_vars_added(self): xblock = m.component("_core_add_slack_variables") # should have new variables on new block - self.assertIsInstance(xblock.component("_slack_minus_rule1"), Var) - self.assertFalse(hasattr(xblock, "_slack_plus_rule1")) - self.assertIsInstance(xblock.component("_slack_minus_rule2"), Var) - self.assertIsInstance(xblock.component("_slack_plus_rule2"), Var) - self.assertFalse(hasattr(xblock, "_slack_minus_rule3")) - self.assertIsInstance(xblock.component("_slack_plus_rule3"), Var) + self.assertTrue("_slack_minus_rule1" in xblock.slacks) + self.assertTrue("_slack_minus_rule2" in xblock.slacks) + self.assertTrue("_slack_plus_rule2" in xblock.slacks) + self.assertTrue("_slack_plus_rule3" in xblock.slacks) # all new variables in non-negative reals - self.assertEqual(xblock._slack_minus_rule1.bounds, (0, None)) - self.assertEqual(xblock._slack_minus_rule2.bounds, (0, None)) - self.assertEqual(xblock._slack_plus_rule2.bounds, (0, None)) - self.assertEqual(xblock._slack_plus_rule3.bounds, (0, None)) + self.assertEqual(xblock.slacks['_slack_minus_rule1'].bounds, (0, None)) + self.assertEqual(xblock.slacks['_slack_minus_rule2'].bounds, (0, None)) + self.assertEqual(xblock.slacks['_slack_plus_rule2'].bounds, (0, None)) + self.assertEqual(xblock.slacks['_slack_plus_rule3'].bounds, (0, None)) # wrapping this as a method because I use it again later when I test # targets @@ -81,7 +79,7 @@ def checkRule1(self, m): self.assertIs(cons.body.arg(0), m.x) self.assertIs(cons.body.arg(1).__class__, EXPR.MonomialTermExpression) self.assertEqual(cons.body.arg(1).arg(0), -1) - self.assertIs(cons.body.arg(1).arg(1), transBlock._slack_minus_rule1) + self.assertIs(cons.body.arg(1).arg(1), transBlock.slacks['_slack_minus_rule1']) def checkRule3(self, m): # check all original variables still there: @@ -94,7 +92,7 @@ def checkRule3(self, m): self.assertEqual(cons.body.nargs(), 2) self.assertIs(cons.body.arg(0), m.x) - self.assertIs(cons.body.arg(1), transBlock._slack_plus_rule3) + self.assertIs(cons.body.arg(1), transBlock.slacks['_slack_plus_rule3']) def test_ub_constraint_modified(self): m = self.makeModel() @@ -120,10 +118,10 @@ def test_both_bounds_constraint_modified(self): self.assertEqual(cons.body.nargs(), 3) self.assertIs(cons.body.arg(0), m.y) - self.assertIs(cons.body.arg(1), transBlock._slack_plus_rule2) + self.assertIs(cons.body.arg(1), transBlock.slacks['_slack_plus_rule2']) self.assertIs(cons.body.arg(2).__class__, EXPR.MonomialTermExpression) self.assertEqual(cons.body.arg(2).arg(0), -1) - self.assertIs(cons.body.arg(2).arg(1), transBlock._slack_minus_rule2) + self.assertIs(cons.body.arg(2).arg(1), transBlock.slacks['_slack_minus_rule2']) def test_obj_deactivated(self): m = self.makeModel() @@ -145,10 +143,10 @@ def test_new_obj_created(self): self.assertEqual(obj.expr.nargs(), 4) - self.assertIs(obj.expr.arg(0), transBlock._slack_minus_rule1) - self.assertIs(obj.expr.arg(1), transBlock._slack_plus_rule2) - self.assertIs(obj.expr.arg(2), transBlock._slack_minus_rule2) - self.assertIs(obj.expr.arg(3), transBlock._slack_plus_rule3) + self.assertIs(obj.expr.arg(0), transBlock.slacks['_slack_minus_rule1']) + self.assertIs(obj.expr.arg(1), transBlock.slacks['_slack_plus_rule2']) + self.assertIs(obj.expr.arg(2), transBlock.slacks['_slack_minus_rule2']) + self.assertIs(obj.expr.arg(3), transBlock.slacks['_slack_plus_rule3']) def test_badModel_err(self): model = ConcreteModel() @@ -173,12 +171,10 @@ def test_leave_deactivated_constraints(self): self.assertIs(cons.body, m.y) def checkTargetSlackVars(self, transBlock): - self.assertIsInstance(transBlock.component("_slack_minus_rule1"), Var) - self.assertFalse(hasattr(transBlock, "_slack_plus_rule1")) - self.assertIsNone(transBlock.component("_slack_minus_rule2")) - self.assertIsNone(transBlock.component("_slack_plus_rule2")) - self.assertFalse(hasattr(transBlock, "_slack_minus_rule3")) - self.assertIsInstance(transBlock.component("_slack_plus_rule3"), Var) + self.assertTrue("_slack_minus_rule1" in transBlock.slacks) + self.assertFalse("_slack_minus_rule2" in transBlock.slacks) + self.assertFalse("_slack_plus_rule2" in transBlock.slacks) + self.assertTrue("_slack_plus_rule3" in transBlock.slacks) def test_only_targets_have_slack_vars(self): m = self.makeModel() @@ -245,8 +241,8 @@ def checkTargetsObj(self, m): transBlock = m._core_add_slack_variables obj = transBlock.component("_slack_objective") self.assertEqual(obj.expr.nargs(), 2) - self.assertIs(obj.expr.arg(0), transBlock._slack_minus_rule1) - self.assertIs(obj.expr.arg(1), transBlock._slack_plus_rule3) + self.assertIs(obj.expr.arg(0), transBlock.slacks['_slack_minus_rule1']) + self.assertIs(obj.expr.arg(1), transBlock.slacks['_slack_plus_rule3']) def test_target_objective(self): m = self.makeModel() @@ -294,10 +290,10 @@ def test_transformed_constraints_sumexpression_body(self): self.assertIs(c.body.arg(0), m.x) self.assertIs(c.body.arg(1).arg(0), -2) self.assertIs(c.body.arg(1).arg(1), m.y) - self.assertIs(c.body.arg(2), transBlock._slack_plus_rule4) + self.assertIs(c.body.arg(2), transBlock.slacks['_slack_plus_rule4']) self.assertIs(c.body.arg(3).__class__, EXPR.MonomialTermExpression) self.assertEqual(c.body.arg(3).arg(0), -1) - self.assertIs(c.body.arg(3).arg(1), transBlock._slack_minus_rule4) + self.assertIs(c.body.arg(3).arg(1), transBlock.slacks['_slack_minus_rule4']) def test_transformed_constraint_scalar_body(self): m = self.makeModel() @@ -315,7 +311,7 @@ def test_transformed_constraint_scalar_body(self): self.assertEqual(c.body.arg(0), 6) self.assertIs(c.body.arg(1).__class__, EXPR.MonomialTermExpression) self.assertEqual(c.body.arg(1).arg(0), -1) - self.assertIs(c.body.arg(1).arg(1), transBlock._slack_minus_rule4) + self.assertIs(c.body.arg(1).arg(1), transBlock.slacks['_slack_minus_rule4']) class TestAddSlacks_IndexedConstraints(unittest.TestCase): @@ -334,10 +330,10 @@ def rule1_rule(m, s): return m def checkSlackVars_indexedtarget(self, transBlock): - self.assertIsInstance(transBlock.component("_slack_plus_rule1[1]"), Var) - self.assertIsInstance(transBlock.component("_slack_plus_rule1[2]"), Var) - self.assertIsInstance(transBlock.component("_slack_plus_rule1[3]"), Var) - self.assertIsNone(transBlock.component("_slack_minus_rule2")) + self.assertTrue("_slack_plus_rule1[1]" in transBlock.slacks) + self.assertTrue("_slack_plus_rule1[2]" in transBlock.slacks) + self.assertTrue("_slack_plus_rule1[3]" in transBlock.slacks) + self.assertFalse("_slack_minus_rule2" in transBlock.slacks) def test_indexedtarget_only_create_slackvars_for_targets(self): m = self.makeModel() @@ -387,12 +383,9 @@ def checkTargetObj(self, m): obj = transBlock.component("_slack_objective") self.assertIsInstance(obj, Objective) self.assertEqual(obj.expr.nargs(), 3) - self.assertIs(obj.expr.arg(0), - transBlock.component("_slack_plus_rule1[1]")) - self.assertIs(obj.expr.arg(1), - transBlock.component("_slack_plus_rule1[2]")) - self.assertIs(obj.expr.arg(2), - transBlock.component("_slack_plus_rule1[3]")) + self.assertIs(obj.expr.arg(0), transBlock.slacks["_slack_plus_rule1[1]"]) + self.assertIs(obj.expr.arg(1), transBlock.slacks["_slack_plus_rule1[2]"]) + self.assertIs(obj.expr.arg(2), transBlock.slacks["_slack_plus_rule1[3]"]) def test_indexedtarget_objective(self): m = self.makeModel() @@ -422,8 +415,7 @@ def checkTransformedRule1(self, m, i): self.assertIs(c.body.arg(0).arg(1), m.x[i]) self.assertIs( c.body.arg(1), - m._core_add_slack_variables.component( - "_slack_plus_rule1[%s]" % i)) + m._core_add_slack_variables.slacks["_slack_plus_rule1[%s]" % i]) def test_indexedtarget_targets_transformed(self): m = self.makeModel() @@ -444,10 +436,10 @@ def test_indexedtarget_targets_transformed_create_using(self): self.checkTransformedRule1(m2, i) def checkSlackVars_constraintDataTarget(self, transBlock): - self.assertIsInstance(transBlock.component("_slack_plus_rule1[2]"), Var) - self.assertIsNone(transBlock.component("_slack_plus_rule1[1]")) - self.assertIsNone(transBlock.component("_slack_plus_rule1[3]")) - self.assertIsNone(transBlock.component("_slack_minus_rule2")) + self.assertTrue("_slack_plus_rule1[2]" in transBlock.slacks) + self.assertFalse("_slack_plus_rule1[1]" in transBlock.slacks) + self.assertFalse("_slack_plus_rule1[3]" in transBlock.slacks) + self.assertFalse("_slack_minus_rule2" in transBlock.slacks) def test_ConstraintDatatarget_only_add_slackvars_for_targets(self): m = self.makeModel() @@ -514,7 +506,7 @@ def checkConstraintDataObj(self, m): transBlock = m._core_add_slack_variables obj = transBlock.component("_slack_objective") self.assertIsInstance(obj, Objective) - self.assertIs(obj.expr, transBlock.component("_slack_plus_rule1[2]")) + self.assertIs(obj.expr, transBlock.slacks["_slack_plus_rule1[2]"]) def test_ConstraintDatatarget_objective(self): m = self.makeModel() diff --git a/pyomo/core/tests/unit/test_component.py b/pyomo/core/tests/unit/test_component.py index 2ac89b2cc1b..42abb44eeef 100644 --- a/pyomo/core/tests/unit/test_component.py +++ b/pyomo/core/tests/unit/test_component.py @@ -362,9 +362,9 @@ def test_generate_cuid_names(self): model.V = Var([('a','b'),(1,'2'),(3,4)]) model.b = Block(concrete=True) model.b.z = Var([1,'2']) - setattr(model.b, '.H', Var(['a',2])) + setattr(model.b, '_H', Var(['a',2])) model.B = Block(['a',2], concrete=True) - setattr(model.B['a'],'.k', Var()) + setattr(model.B['a'],'_k', Var()) model.B[2].b = Block() model.B[2].b.x = Var() @@ -385,14 +385,14 @@ def test_generate_cuid_names(self): model.b.z_index, model.b.z[1], model.b.z['2'], - getattr(model.b, '.H'), - getattr(model.b, '.H_index'), - getattr(model.b, '.H')['a'], - getattr(model.b, '.H')[2], + getattr(model.b, '_H'), + getattr(model.b, '_H_index'), + getattr(model.b, '_H')['a'], + getattr(model.b, '_H')[2], model.B, model.B_index, model.B['a'], - getattr(model.B['a'],'.k'), + getattr(model.B['a'],'_k'), model.B[2], model.B[2].b, model.B[2].b.x]: @@ -437,12 +437,12 @@ def test_generate_cuid_names(self): model.b.z, model.b.z[1], model.b.z['2'], - getattr(model.b, '.H'), - getattr(model.b, '.H')['a'], - getattr(model.b, '.H')[2], + getattr(model.b, '_H'), + getattr(model.b, '_H')['a'], + getattr(model.b, '_H')[2], model.B, model.B['a'], - getattr(model.B['a'],'.k'), + getattr(model.B['a'],'_k'), model.B[2], model.B[2].b, model.B[2].b.x]: diff --git a/pyomo/core/tests/unit/test_connector.py b/pyomo/core/tests/unit/test_connector.py index 1283dddac2d..2af22effb61 100644 --- a/pyomo/core/tests/unit/test_connector.py +++ b/pyomo/core/tests/unit/test_connector.py @@ -278,12 +278,12 @@ def test_expand_single_scalar(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 3) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=1, Index=c.expanded_index, Active=True +"""c_expanded : Size=1, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 1.0 : x : 1.0 : True """) @@ -312,12 +312,12 @@ def test_expand_scalar(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 4) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=2, Index=c.expanded_index, Active=True +"""c_expanded : Size=2, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 1.0 : x : 1.0 : True 2 : 1.0 : y : 1.0 : True @@ -347,12 +347,12 @@ def test_expand_expression(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 4) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=2, Index=c.expanded_index, Active=True +"""c_expanded : Size=2, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 1.0 : - x : 1.0 : True 2 : 1.0 : 1 + y : 1.0 : True @@ -382,12 +382,12 @@ def test_expand_indexed(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 5) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=3, Index=c.expanded_index, Active=True +"""c_expanded : Size=3, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 1.0 : x[1] : 1.0 : True 2 : 1.0 : x[2] : 1.0 : True @@ -419,20 +419,20 @@ def test_expand_empty_scalar(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 4) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) - self.assertIs( m.x.domain, m.component('ECON.auto.x').domain ) - self.assertIs( m.y.domain, m.component('ECON.auto.y').domain ) - self.assertEqual( m.x.bounds, m.component('ECON.auto.x').bounds ) - self.assertEqual( m.y.bounds, m.component('ECON.auto.y').bounds ) + self.assertIs( m.x.domain, m.component('ECON_auto_x').domain ) + self.assertIs( m.y.domain, m.component('ECON_auto_y').domain ) + self.assertEqual( m.x.bounds, m.component('ECON_auto_x').bounds ) + self.assertEqual( m.y.bounds, m.component('ECON_auto_y').bounds ) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=2, Index=c.expanded_index, Active=True +"""c_expanded : Size=2, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : x - ECON.auto.x : 0.0 : True - 2 : 0.0 : y - ECON.auto.y : 0.0 : True + 1 : 0.0 : x - ECON_auto_x : 0.0 : True + 2 : 0.0 : y - ECON_auto_y : 0.0 : True """) @@ -460,15 +460,15 @@ def test_expand_empty_expression(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 4) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=2, Index=c.expanded_index, Active=True +"""c_expanded : Size=2, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : - x - ECON.auto.x : 0.0 : True - 2 : 0.0 : 1 + y - ECON.auto.y : 0.0 : True + 1 : 0.0 : - x - ECON_auto_x : 0.0 : True + 2 : 0.0 : 1 + y - ECON_auto_y : 0.0 : True """) @@ -497,23 +497,23 @@ def test_expand_empty_indexed(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 5) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) - self.assertIs( m.x[1].domain, m.component('ECON.auto.x')[1].domain ) - self.assertIs( m.x[2].domain, m.component('ECON.auto.x')[2].domain ) - self.assertIs( m.y.domain, m.component('ECON.auto.y').domain ) - self.assertEqual( m.x[1].bounds, m.component('ECON.auto.x')[1].bounds ) - self.assertEqual( m.x[2].bounds, m.component('ECON.auto.x')[2].bounds ) - self.assertEqual( m.y.bounds, m.component('ECON.auto.y').bounds ) + self.assertIs( m.x[1].domain, m.component('ECON_auto_x')[1].domain ) + self.assertIs( m.x[2].domain, m.component('ECON_auto_x')[2].domain ) + self.assertIs( m.y.domain, m.component('ECON_auto_y').domain ) + self.assertEqual( m.x[1].bounds, m.component('ECON_auto_x')[1].bounds ) + self.assertEqual( m.x[2].bounds, m.component('ECON_auto_x')[2].bounds ) + self.assertEqual( m.y.bounds, m.component('ECON_auto_y').bounds ) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=3, Index=c.expanded_index, Active=True +"""c_expanded : Size=3, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : x[1] - ECON.auto.x[1] : 0.0 : True - 2 : 0.0 : x[2] - ECON.auto.x[2] : 0.0 : True - 3 : 0.0 : y - ECON.auto.y : 0.0 : True + 1 : 0.0 : x[1] - ECON_auto_x[1] : 0.0 : True + 2 : 0.0 : x[2] - ECON_auto_x[2] : 0.0 : True + 3 : 0.0 : y - ECON_auto_y : 0.0 : True """) def test_expand_multiple_empty_indexed(self): @@ -543,42 +543,42 @@ def test_expand_multiple_empty_indexed(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 9) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) self.assertFalse(m.d.active) - self.assertTrue(m.component('d.expanded').active) - - self.assertIs( m.x[1].domain, m.component('ECON1.auto.x')[1].domain ) - self.assertIs( m.x[2].domain, m.component('ECON1.auto.x')[2].domain ) - self.assertIs( m.y.domain, m.component('ECON1.auto.y').domain ) - self.assertEqual( m.x[1].bounds, m.component('ECON1.auto.x')[1].bounds ) - self.assertEqual( m.x[2].bounds, m.component('ECON1.auto.x')[2].bounds ) - self.assertEqual( m.y.bounds, m.component('ECON1.auto.y').bounds ) - - self.assertIs( m.x[1].domain, m.component('ECON2.auto.x')[1].domain ) - self.assertIs( m.x[2].domain, m.component('ECON2.auto.x')[2].domain ) - self.assertIs( m.y.domain, m.component('ECON2.auto.y').domain ) - self.assertEqual( m.x[1].bounds, m.component('ECON2.auto.x')[1].bounds ) - self.assertEqual( m.x[2].bounds, m.component('ECON2.auto.x')[2].bounds ) - self.assertEqual( m.y.bounds, m.component('ECON2.auto.y').bounds ) + self.assertTrue(m.component('d_expanded').active) + + self.assertIs( m.x[1].domain, m.component('ECON1_auto_x')[1].domain ) + self.assertIs( m.x[2].domain, m.component('ECON1_auto_x')[2].domain ) + self.assertIs( m.y.domain, m.component('ECON1_auto_y').domain ) + self.assertEqual( m.x[1].bounds, m.component('ECON1_auto_x')[1].bounds ) + self.assertEqual( m.x[2].bounds, m.component('ECON1_auto_x')[2].bounds ) + self.assertEqual( m.y.bounds, m.component('ECON1_auto_y').bounds ) + + self.assertIs( m.x[1].domain, m.component('ECON2_auto_x')[1].domain ) + self.assertIs( m.x[2].domain, m.component('ECON2_auto_x')[2].domain ) + self.assertIs( m.y.domain, m.component('ECON2_auto_y').domain ) + self.assertEqual( m.x[1].bounds, m.component('ECON2_auto_x')[1].bounds ) + self.assertEqual( m.x[2].bounds, m.component('ECON2_auto_x')[2].bounds ) + self.assertEqual( m.y.bounds, m.component('ECON2_auto_y').bounds ) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=3, Index=c.expanded_index, Active=True +"""c_expanded : Size=3, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : x[1] - ECON1.auto.x[1] : 0.0 : True - 2 : 0.0 : x[2] - ECON1.auto.x[2] : 0.0 : True - 3 : 0.0 : y - ECON1.auto.y : 0.0 : True + 1 : 0.0 : x[1] - ECON1_auto_x[1] : 0.0 : True + 2 : 0.0 : x[2] - ECON1_auto_x[2] : 0.0 : True + 3 : 0.0 : y - ECON1_auto_y : 0.0 : True """) os = StringIO() - m.component('d.expanded').pprint(ostream=os) + m.component('d_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""d.expanded : Size=3, Index=d.expanded_index, Active=True +"""d_expanded : Size=3, Index=d_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : ECON2.auto.x[1] - ECON1.auto.x[1] : 0.0 : True - 2 : 0.0 : ECON2.auto.x[2] - ECON1.auto.x[2] : 0.0 : True - 3 : 0.0 : ECON2.auto.y - ECON1.auto.y : 0.0 : True + 1 : 0.0 : ECON2_auto_x[1] - ECON1_auto_x[1] : 0.0 : True + 2 : 0.0 : ECON2_auto_x[2] - ECON1_auto_x[2] : 0.0 : True + 3 : 0.0 : ECON2_auto_y - ECON1_auto_y : 0.0 : True """) @@ -617,14 +617,14 @@ def test_expand_multiple_indexed(self): self.assertEqual(len(list(m.component_data_objects(Constraint))), 9) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) self.assertFalse(m.d.active) - self.assertTrue(m.component('d.expanded').active) + self.assertTrue(m.component('d_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=3, Index=c.expanded_index, Active=True +"""c_expanded : Size=3, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 0.0 : x[1] - a2[1] : 0.0 : True 2 : 0.0 : x[2] - a2[2] : 0.0 : True @@ -632,9 +632,9 @@ def test_expand_multiple_indexed(self): """) os = StringIO() - m.component('d.expanded').pprint(ostream=os) + m.component('d_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""d.expanded : Size=3, Index=d.expanded_index, Active=True +"""d_expanded : Size=3, Index=d_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 0.0 : a1[1] - a2[1] : 0.0 : True 2 : 0.0 : a1[2] - a2[2] : 0.0 : True @@ -684,34 +684,34 @@ def test_expand_implicit_indexed(self): """ECON1 : Size=1, Index=None Key : Name : Size : Variable None : x : 2 : a2 - : y : 1 : ECON1.auto.y + : y : 1 : ECON1_auto_y """) self.assertEqual(len(list(m.component_objects(Constraint))), 5) self.assertEqual(len(list(m.component_data_objects(Constraint))), 9) self.assertTrue(m.nocon.active) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) self.assertFalse(m.d.active) - self.assertTrue(m.component('d.expanded').active) + self.assertTrue(m.component('d_expanded').active) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=3, Index=c.expanded_index, Active=True +"""c_expanded : Size=3, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 0.0 : x[1] - a2[1] : 0.0 : True 2 : 0.0 : x[2] - a2[2] : 0.0 : True - 3 : 0.0 : y - ECON1.auto.y : 0.0 : True + 3 : 0.0 : y - ECON1_auto_y : 0.0 : True """) os = StringIO() - m.component('d.expanded').pprint(ostream=os) + m.component('d_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""d.expanded : Size=3, Index=d.expanded_index, Active=True +"""d_expanded : Size=3, Index=d_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : ECON2.auto.x[1] - x[1] : 0.0 : True - 2 : 0.0 : ECON2.auto.x[2] - x[2] : 0.0 : True + 1 : 0.0 : ECON2_auto_x[1] - x[1] : 0.0 : True + 2 : 0.0 : ECON2_auto_x[2] - x[2] : 0.0 : True 3 : 0.0 : b1 - y : 0.0 : True """) @@ -742,28 +742,28 @@ def test_varlist_aggregator(self): self.assertEqual(len(list(m.component_objects(Constraint))), 5) self.assertEqual(len(list(m.component_data_objects(Constraint))), 7) self.assertFalse(m.c.active) - self.assertTrue(m.component('c.expanded').active) + self.assertTrue(m.component('c_expanded').active) self.assertFalse(m.d.active) - self.assertTrue(m.component('d.expanded').active) + self.assertTrue(m.component('d_expanded').active) self.assertEqual( len(m.flow), 2 ) os = StringIO() - m.component('c.expanded').pprint(ostream=os) + m.component('c_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""c.expanded : Size=2, Index=c.expanded_index, Active=True +"""c_expanded : Size=2, Index=c_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : flow[1] - ECON1.auto.flow : 0.0 : True - 2 : 0.0 : phase - ECON1.auto.phase : 0.0 : True + 1 : 0.0 : flow[1] - ECON1_auto_flow : 0.0 : True + 2 : 0.0 : phase - ECON1_auto_phase : 0.0 : True """) os = StringIO() - m.component('d.expanded').pprint(ostream=os) + m.component('d_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""d.expanded : Size=2, Index=d.expanded_index, Active=True +"""d_expanded : Size=2, Index=d_expanded_index, Active=True Key : Lower : Body : Upper : Active - 1 : 0.0 : ECON2.auto.flow - flow[2] : 0.0 : True - 2 : 0.0 : ECON2.auto.phase - phase : 0.0 : True + 1 : 0.0 : ECON2_auto_flow - flow[2] : 0.0 : True + 2 : 0.0 : ECON2_auto_phase - phase : 0.0 : True """) os = StringIO() @@ -797,9 +797,9 @@ def test_indexed_connector(self): TransformationFactory('core.expand_connectors').apply_to(m) os = StringIO() - m.component('eq.expanded').pprint(ostream=os) + m.component('eq_expanded').pprint(ostream=os) self.assertEqual(os.getvalue(), -"""eq.expanded : Size=1, Index=eq.expanded_index, Active=True +"""eq_expanded : Size=1, Index=eq_expanded_index, Active=True Key : Lower : Body : Upper : Active 1 : 0.0 : x - y : 0.0 : True """) diff --git a/pyomo/core/tests/unit/test_labelers.py b/pyomo/core/tests/unit/test_labelers.py index 08cace7c3aa..2cd2a0ea71a 100644 --- a/pyomo/core/tests/unit/test_labelers.py +++ b/pyomo/core/tests/unit/test_labelers.py @@ -28,8 +28,8 @@ def setUp(self): m.ind = Var(m.s) m.myblock = Block() m.myblock.mystreet = Constraint() - m.add_component("myblock.mystreet", Var()) - self.thecopy = m.__getattribute__("myblock.mystreet") + m.add_component("myblock_mystreet", Var()) + self.thecopy = m.__getattribute__("myblock_mystreet") self.m = m def test_counterlabeler(self): @@ -72,7 +72,7 @@ def test_cnamelabeler(self): self.assertEqual(lbl(self.long1), 'myverylongcomponentname') self.assertEqual(lbl(m.myblock), 'myblock') self.assertEqual(lbl(m.myblock.mystreet), 'myblock.mystreet') - self.assertEqual(lbl(self.thecopy), 'myblock.mystreet') + self.assertEqual(lbl(self.thecopy), 'myblock_mystreet') self.assertEqual(lbl(m.ind[3]), 'ind[3]') self.assertEqual(lbl(m.ind[10]), 'ind[10]') self.assertEqual(lbl(m.ind[1]), 'ind[1]') @@ -114,7 +114,7 @@ def test_namelabeler(self): self.assertEqual(lbl(self.long1), 'myverylongcomponentname') self.assertEqual(lbl(m.myblock), 'myblock') self.assertEqual(lbl(m.myblock.mystreet), 'myblock.mystreet') - self.assertEqual(lbl(self.thecopy), 'myblock.mystreet') + self.assertEqual(lbl(self.thecopy), 'myblock_mystreet') self.assertEqual(lbl(m.ind[3]), 'ind[3]') self.assertEqual(lbl(m.ind[10]), 'ind[10]') self.assertEqual(lbl(m.ind[1]), 'ind[1]')