def testTrafo(self): solver = Solver() A = trafo([2, 2]) solver.eq(A.getmatrix()[0, 0], A.getmatrix()[1, 1]) # restrict to rotation + scaling + translation solver.eq(A.getmatrix()[0, 1], -A.getmatrix()[1, 0]) solver.eq(A*vector([0, 1]), vector([-1, 2])) solver.eq(A*vector([1, 0]), vector([1, 4])) self.failUnlessEqual(float((A * vector([0, 0]))[0]), 1) self.failUnlessEqual(float((A * vector([0, 0]))[1]), 2) self.failUnlessEqual(float(A.getmatrix()[0, 0]), 0) self.failUnlessEqual(float(A.getmatrix()[0, 1]), -2) self.failUnlessEqual(float(A.getmatrix()[1, 0]), 2) self.failUnlessEqual(float(A.getmatrix()[1, 1]), 0) B = trafo([2, 2]) solver.eq(A*B, identitytrafo(2)) self.failUnlessEqual(float((B * vector([0, 0]))[0]), -1) self.failUnlessEqual(float((B * vector([0, 0]))[1]), 0.5) self.failUnlessEqual(float(B.getmatrix()[0, 0]), 0) self.failUnlessEqual(float(B.getmatrix()[0, 1]), 0.5) self.failUnlessEqual(float(B.getmatrix()[1, 0]), -0.5) self.failUnlessEqual(float(B.getmatrix()[1, 1]), 0)
def testScalars(self): solver = Solver() a = scalar() solver.eq(2 + a, 3) self.failUnlessAlmostEqual(float(a), 1) self.failUnlessRaises(RuntimeError, solver.eq, 2 + a, 3) # the solver is broken after that solver = Solver() a = scalar() b = scalar() solver.eq(2*a, b) solver.eq(2 + a + b, 5) self.failUnlessAlmostEqual(float(a), 1) self.failUnlessAlmostEqual(float(b), 2) a = scalar() b = scalar() solver.eq(a, b) self.failUnlessRaises(Exception, solver.eq, a, b)
def testVector(self): solver = Solver() a = vector(2) solver.eq(vector([1, 2]) + a, vector([3, 3])) self.failUnlessAlmostEqual(float(a.x), 2) self.failUnlessAlmostEqual(float(a.y), 1) b = vector(2) solver.eq(a*b) # => solver.eq(a*b, 0) solver.eq(b.y, 2) self.failUnlessAlmostEqual(float(b.x), -1)
def testMatrix(self): solver = Solver() A = matrix([2, 2]) solver.eq(A*vector([1, -1]), vector([2, 0])) solver.eq(A*vector([1, 1]), vector([0, 2])) self.failUnlessAlmostEqual(float(A[0, 0]), 1) self.failUnlessAlmostEqual(float(A[0, 1]), -1) self.failUnlessAlmostEqual(float(A[1, 0]), 1) self.failUnlessAlmostEqual(float(A[1, 1]), 1) B = matrix([2, 2]) solver.eq(A*B, identitymatrix(2)) self.failUnlessAlmostEqual(float(B[0, 0]), 0.5) self.failUnlessAlmostEqual(float(B[0, 1]), 0.5) self.failUnlessAlmostEqual(float(B[1, 0]), -0.5) self.failUnlessAlmostEqual(float(B[1, 1]), 0.5) self.failUnlessAlmostEqual(float((B * vector([2, 0]))[0]), 1) self.failUnlessAlmostEqual(float((B * vector([2, 0]))[1]), -1) self.failUnlessAlmostEqual(float((B * vector([0, 2]))[0]), 1) self.failUnlessAlmostEqual(float((B * vector([0, 2]))[1]), 1)