Example #1
0
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"
Example #2
0
 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")
Example #3
0
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"
Example #4
0
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())
Example #5
0
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
Example #6
0
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"
Example #7
0
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"
Example #8
0
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)
Example #9
0
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)
Example #10
0
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"
Example #11
0
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")
Example #12
0
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
Example #13
0
        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

Example #14
0
        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