def _update_method_graph(self): while self.unenforced_constraints: constraint = self._remove_strongest_constraint() self.redetermined_variables.clear() if not Mvine(self.marker).build(constraint, self.redetermined_variables): continue self._propagate_walk_strength(self.redetermined_variables.union([constraint])) self._collect_unenforced(constraint.strength, False) self.exec_roots.append(constraint) self.exec_roots.extend([var_constraint \ for var in self.redetermined_variables \ for var_constraint in var.constraints \ if var.determined_by is None and \ var_constraint.is_enforced()])
class MVineTests(TestCase): def setUp(self): self.marker = marker self.mvine = Mvine(self.marker) self.constraint_system = ConstraintSystem() def test_build_mvine(self): v1, v2, v3 = self.constraint_system.create_variables(["v1", "v2", "v3"], [3, 4, 5]) method1 = Method( [v1, v2], [v3], lambda v1, v2: (v1 + v2) / 2) method2 = Method( [v3, v2], [v1], lambda v3, v2: 2 * v3 - v2) method3 = Method([v3, v1], [v2], lambda v3, v1: 2 * v3 - v1) cn = Constraint( lambda v1, v2, v3: True, Strength.STRONG, [v1, v2, v3], [method1, method2, method3]) self.assertIsNone(v1.determined_by) self.assertIsNone(v2.determined_by) self.assertIsNone(v3.determined_by) self.assertEqual(3, v1.get_value()) self.assertEqual(4, v2.get_value()) self.assertEqual(5, v3.get_value()) redetermined_varariables = set() self.assertTrue(self.mvine.build(cn, redetermined_varariables)) self.assertEqual(set([v3]), redetermined_varariables) self.assertIsNone(v1.determined_by) self.assertIsNone(v2.determined_by) self.assertEqual(cn, v3.determined_by) self.assertIsNotNone(cn.mark)
def setUp(self): self.marker = marker self.mvine = Mvine(self.marker) self.cs = ConstraintSystem()
def setUp(self): self.marker = marker self.mvine = Mvine(self.marker) self.constraint_system = ConstraintSystem()