def test(problem): """Test solver on a given problem""" #diag_select(".*") print "problem:" print problem print "Solving..." solver = GeometricSolver(problem) print "...done" print "drplan:" print solver.dr print "top-level rigids:", list(solver.dr.top_level()) result = solver.get_result() print "result:" print result print "result is", result.flag, "with", len(result.solutions), "solutions" check = True if len(result.solutions) == 0: check = False diag_select("(GeometricProblem.verify)|(satisfied)") for sol in result.solutions: print "solution:", sol check = check and problem.verify(sol) if check: print "all solutions valid" else: print "INVALID"
def test(self): """Test solver on a given problem""" problem = self.solver # problem = fix3_problem_3d() #diag_select(".*") print("problem:") print(problem) print("Solving...") solver = GeometricSolver(problem) print("...done") print("drplan:") print(solver.dr) print("top-level rigids:", list(solver.dr.top_level())) result = solver.get_result() print("result:") print(result) print("result is", result.flag, "with", len(result.solutions), "solutions") check = True if len(result.solutions) == 0: check = False diag_select("(GeometricProblem.verify)|(satisfied)") for sol in result.solutions: print("solution:", sol) check = check and problem.verify(sol) if check: print("all solutions valid") else: print("INVALID")
def test(problem): """Test solver on a given problem""" #diag_select(".*") print "problem:" print problem print "Solving..." solver = GeometricSolver(problem) print "...done" print "drplan:" print solver.dr print "top-level rigids:",list(solver.dr.top_level()) result = solver.get_result() print "result:" print result print "result is",result.flag, "with", len(result.solutions),"solutions" check = True if len(result.solutions) == 0: check = False diag_select("(GeometricProblem.verify)|(satisfied)") for sol in result.solutions: print "solution:",sol check = check and problem.verify(sol) if check: print "all solutions valid" else: print "INVALID"
def test_line(): diag_select("(GeometricSolver)|(CoincidenceConstraint)") #test(line_problem_2d_0()) #test(line_problem_2d_1()) #test(line_problem_2d_2()) #test(line_problem_2d_3a()) #test(line_problem_2d_3b()) #test(line_problem_2d_4()) #test(line_problem_3d_0()) #test(line_problem_3d_1()) test(line_problem_3d_2())
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 Exception("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 as e: message = "error: %s" % e check = False if check is False: print("--- problem ---") print(problem) print("--- diasgnostic messages ---") diag_select("drplan") drplanner = GeometricSolver(problem) print("--- plan ---") top = drplanner.dr.top_level() print(drplanner.dr) print("--- top level ---") print("clusters: %i" % len(top)) for cluster in drplanner.dr.top_level(): print(cluster) print("--- conclusion ---") print(message) return False else: return True
def find_error(count, size, over_ratio): """Test solver by generating random problems""" random.seed(1) diag_select("xyzzy") for i in range(0, count): if random.random() > over_ratio: if not test_random_wellconstrained(size): print "failed wellconstrained problem #" + str(i) return else: if not test_random_overconstrained(size): print "failed overconstrained problem #" + str(i) return print "all tests passed"
def find_error(count, size, over_ratio): """Test solver by generating random problems""" random.seed(1) diag_select("xyzzy") for i in range(0,count): if random.random() > over_ratio: if not test_random_wellconstrained(size): print "failed wellconstrained problem #"+str(i) return else: if not test_random_overconstrained(size): print "failed overconstrained problem #"+str(i) return print "all tests passed"
def test_mergehogs(): diag_select(".") problem = GeometricProblem(dimension=2) problem.add_point('x',vector([0.0, 0.0])) problem.add_point('a',vector([1.0, 0.0])) problem.add_point('b',vector([0.0, 1.0])) problem.add_point('c',vector([-1.0, 0.0])) problem.add_point('d',vector([0.0, -1.0])) problem.add_constraint(AngleConstraint('a','x','b', 30.0/180*math.pi)) problem.add_constraint(AngleConstraint('b','x','c', 30.0/180*math.pi)) problem.add_constraint(AngleConstraint('c','x','d', 30.0/180*math.pi)) solver = GeometricSolver(problem) print solver.dr for hog in solver.dr.hedgehogs(): conf = list(solver.mg.get(hog))[0] print hog print conf print problem.verify(conf.map)
def test_mergehogs(): diag_select(".") problem = GeometricProblem(dimension=2) problem.add_point('x', vector([0.0, 0.0])) problem.add_point('a', vector([1.0, 0.0])) problem.add_point('b', vector([0.0, 1.0])) problem.add_point('c', vector([-1.0, 0.0])) problem.add_point('d', vector([0.0, -1.0])) problem.add_constraint(AngleConstraint('a', 'x', 'b', 30.0 / 180 * math.pi)) problem.add_constraint(AngleConstraint('b', 'x', 'c', 30.0 / 180 * math.pi)) problem.add_constraint(AngleConstraint('c', 'x', 'd', 30.0 / 180 * math.pi)) solver = GeometricSolver(problem) print solver.dr for hog in solver.dr.hedgehogs(): conf = list(solver.mg.get(hog))[0] print hog print conf print problem.verify(conf.map)
def test_ada_3d(): problem = ada_3d_problem() diag_select("nothing") print "problem:" print problem solver = GeometricSolver(problem) print "drplan:" print solver.dr print "number of top-level rigids:",len(solver.dr.top_level()) result = solver.get_result() print "result:" print result print "result is",result.flag, "with", len(result.solutions),"solutions" check = True if len(result.solutions) == 0: check = False diag_select(".*") for sol in result.solutions: print "solution:",sol check = check and problem.verify(sol) diag_select("nothing") if check: print "all solutions valid" else: print "INVALID"
def test_ada_3d(): problem = ada_3d_problem() diag_select("nothing") print("problem:") print(problem) solver = GeometricSolver(problem) print("drplan:") print(solver.dr) print("number of top-level rigids: %i" % len(solver.dr.top_level())) result = solver.get_result() print("result:") print(result) print("result is %s with %i solutions" % (result.flag, len(result.solutions))) check = True if len(result.solutions) == 0: check = False diag_select(".*") for sol in result.solutions: print("solution: %s" % sol) check = check and problem.verify(sol) diag_select("nothing") if check: print("all solutions valid") else: print("INVALID")
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 as e: print("error in problem: %s" % e) check = False if check is False: print("--- problem ---") print(problem) print("--- diasgnostic messages ---") diag_select("drplan") drplanner = GeometricSolver(problem) top = drplanner.dr.top_level() print("--- plan ---") print(drplanner.dr) print("--- top level ---") print("clusters: %i" % len(top)) for cluster in drplanner.dr.top_level(): print(cluster) print("--- conclusion ---") print(message) return False else: return True
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 #end try if check == False: print "--- problem ---" print problem print "--- diasgnostic messages ---" diag_select("drplan") drplanner = GeometricSolver(problem) print "--- plan ---" top = drplanner.dr.top_level() print drplanner.dr print "--- top level ---" print len(top), "clusters:" for cluster in drplanner.dr.top_level(): print cluster print "--- conclusion ---" print message return False else: return True
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 #end try if check == False: print "--- problem ---" print problem print "--- diasgnostic messages ---" diag_select("drplan") drplanner = GeometricSolver(problem) print "--- plan ---" top = drplanner.dr.top_level() print drplanner.dr print "--- top level ---" print len(top),"clusters:" for cluster in drplanner.dr.top_level(): print cluster print "--- conclusion ---" print message return False else: return True