def test_random_overconstrained(size): # start with random well-constrained problem problem = random_problem_2D(size, 0.0) # add one random contraint for i in range(100): try: add_random_constraint(problem, 0.5) break except: pass if i == 99: raise StandardError, "could not add extra constraint" # test try: drplanner = GeometricSolver(problem) ntop = len(drplanner.dr.top_level()) if ntop > 1: message = "underconstrained" check = False elif ntop == 0: message = "no top level" check = False else: # ntop == 1 top = drplanner.dr.top_level()[0] if not top.overconstrained: message = "well-constrained" check = False else: check = True except Exception, e: message = "error:", e check = False
def test_fix(n): """Test fix constraints""" #diag_select("drplan._search_triangle") print "generate a random 2D problem" problem = random_problem_2D(n) print "create dr planner" drplanner = GeometericSolver(problem) print "number of top clusters:", len(drplanner.dr.top_level()) #print "top clusters:", map(str, drplanner.dr.top_level()) cons = problem.cg.constraints() dists = filter(lambda d: isinstance(d, DistanceConstraint), cons) con = random.choice(dists) print "remove distance", con problem.rem_constraint(con) print "number of top clusters:", len(drplanner.dr.top_level()) #print "top clusters:", map(str, drplanner.dr.top_level()) print "replace with two fixes" v1 = con.variables()[0] v2 = con.variables()[1] f1 = FixConstraint(v1, problem.get_point(v1)) f2 = FixConstraint(v2, problem.get_point(v2)) problem.add_constraint(f1) problem.add_constraint(f2) print "number of top clusters:", len(drplanner.dr.top_level())
def test_random_overconstrained(size): # start with random well-constrained problem problem = random_problem_2D(size, 0.0) # add one random contraint for i in range(100): try: add_random_constraint(problem, 0.5) break except: pass if i == 99: raise StandardError, "could not add extra constraint" # test try: drplanner = GeometricSolver(problem) ntop = len(drplanner.dr.top_level()) if ntop > 1: message = "underconstrained" check = False elif ntop == 0: message = "no top level" check = False else: # ntop == 1 top = drplanner.dr.top_level()[0] if not top.overconstrained: message = "well-constrained" check = False else: check = True except Exception, e: message = "error:",e check = False
def test_non_triangular(n): problem = random_problem_2D(n) print "before:" print problem randomize_angles(problem) print "after:" print problem test(problem)
def test_random_wellconstrained(size): problem = random_problem_2D(size, 0.0) try: drplanner = GeometricSolver(problem) ntop = len(drplanner.dr.top_level()) if ntop > 1: message = "underconstrained" check = False elif ntop == 0: message = "no top level" check = False else: # ntop == 1 top = drplanner.dr.top_level()[0] if top.overconstrained: message = "overconstrained" check = False else: check = True except Exception, e: print "error in problem:", e check = False
def test_random_wellconstrained(size): problem = random_problem_2D(size, 0.0) try: drplanner = GeometricSolver(problem) ntop = len(drplanner.dr.top_level()) if ntop > 1: message = "underconstrained" check = False elif ntop == 0: message = "no top level" check = False else: # ntop == 1 top = drplanner.dr.top_level()[0] if top.overconstrained: message = "overconstrained" check = False else: check = True except Exception, e: print "error in problem:",e check = False