def verify(t, t_norm, res): v3sp1 = tpm.V3SP(**t) v3sp2 = tpm.V3SP(**t_norm) v3sp = v3sp1.cross(v3sp2) self.assertEqual(v3sp.ctype, tpm.SPHERICAL) self.assertEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, res['r']) self.assertAlmostEqual(v3sp.alpha, res['alpha']) self.assertAlmostEqual(v3sp.delta, res['delta'])
def testV3SAdd(self): """V3SP.__add__ => V3SP + V3SP.""" def verify(t, t_norm, res): v3sp1 = tpm.V3SP(**t) v3sp2 = tpm.V3SP(**t_norm) v3sp = v3sp2 + v3sp1 self.assertEqual(type(v3sp), tpm.V3SP) self.assertEqual(v3sp.ctype, tpm.SPHERICAL) self.assertEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, res['r']) self.assertAlmostEqual(v3sp.alpha, res['alpha']) self.assertAlmostEqual(v3sp.delta, res['delta']) # see pytpm/tests/c_tests/v3sum_test.c t = dict(r=1.0, alpha=2.0, delta=3.0) t_norm = dict(r=10.0, alpha=0.2, delta=-0.234) res = dict(r=10.23335408, alpha=0.10342998, delta=-0.21443228) # t_norm + t verify(t, t_norm, res) t = dict(r=-1.0, alpha=2.0, delta=3.0) t_norm = dict(r=1.0, alpha=-2.0, delta=-0.234) res = dict(r=0.89805895, alpha=3.12239595, delta=-0.42830498) # t_norm + t verify(t, t_norm, res) # TypeError must be rasied if one of the values is not V3SP. self.assertRaises(TypeError, lambda v1: v1 + 1.0, tpm.V3SP(**t))
def testV3SSubtract(self): """V3SP.__sub__ => V3SP - V3SP.""" import math def verify(t, t_norm, res): v3sp1 = tpm.V3SP(**t) v3sp2 = tpm.V3SP(**t_norm) v3sp = v3sp2 - v3sp1 self.assertEqual(type(v3sp), tpm.V3SP) self.assertEqual(v3sp.ctype, tpm.SPHERICAL) self.assertEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, res['r']) self.assertAlmostEqual(v3sp.alpha, res['alpha']) self.assertAlmostEqual(v3sp.delta, res['delta']) # see pytpm/tests/c_tests/v3diff_test.c t = dict(r=1.0, alpha=2.0, delta=3.0) t_norm = dict(r=10.0, alpha=0.2, delta=-0.234) res = dict(r=9.86298456, alpha=0.30111131, delta=-0.25206013) # t_norm + t verify(t, t_norm, res) t = dict(r=-1.0, alpha=2.0, delta=3.0) t_norm = dict(r=1.0, alpha=-2.0, delta=-0.234) res = dict(r=1.78703389, alpha=-1.56677510, delta=-0.05080452) # t_norm + t verify(t, t_norm, res) # TypeError must be rasied if one of the values is not V3SP. self.assertRaises(TypeError, lambda v1: v1 - 1.0, tpm.V3SP(**t))
def testSetGetInitValues(self): """V3SP(**vals) => set fields at init.""" t = dict(r=2.0, alpha=-0.12, delta=2 * 3.14) v3sp = tpm.V3SP(**t) self.assertAlmostEqual(v3sp.r, t['r']) self.assertAlmostEqual(v3sp.alpha, t['alpha']) self.assertAlmostEqual(v3sp.delta, t['delta'])
def verify(t, n): v3sp1 = tpm.V3SP(**t) v3sp = v3sp1 * n self.assertEqual(type(v3sp), tpm.V3SP) self.assertEqual(v3sp.ctype, tpm.SPHERICAL) self.assertEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, t['r'] * n) self.assertAlmostEqual(v3sp.alpha, t['alpha']) self.assertAlmostEqual(v3sp.delta, t['delta'])
def verify(t, t_norm, n=7): v3sp = tpm.V3SP(**t) v3cp = v3sp.s2c() self.assertEqual(type(v3cp), tpm.V3CP) self.assertEqual(v3cp.ctype, tpm.CARTESIAN) self.assertEqual(v3cp.vtype, tpm.POS) self.assertAlmostEqual(v3cp.x, t_norm['x'], n) self.assertAlmostEqual(v3cp.y, t_norm['y'], n) self.assertAlmostEqual(v3cp.z, t_norm['z'], n)
def testV3SMultiply(self): """V3SP.__mul__ => V3SP * x; scale with a scalar.""" def verify(t, n): v3sp1 = tpm.V3SP(**t) v3sp = v3sp1 * n self.assertEqual(type(v3sp), tpm.V3SP) self.assertEqual(v3sp.ctype, tpm.SPHERICAL) self.assertEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, t['r'] * n) self.assertAlmostEqual(v3sp.alpha, t['alpha']) self.assertAlmostEqual(v3sp.delta, t['delta']) t = dict(r=1345678.12345, alpha=-2.345, delta=0.234) verify(t, 2.0) # This TypeError is raised by Cython. Cython doesn't have a # __rmul__ and hence the __mul__ of the right hand V3CP is # called. But then the types of self and n in __mul__ become # incompatible and TypeError is raised. self.assertRaises(TypeError, lambda v1: 3 * v1, tpm.V3SP(**t))
def testCreate(self): """V3CP() => create V3CP class.""" v3sp = tpm.V3SP() self.assertEqual(type(v3sp), tpm.V3SP) # Access default init values. self.assertAlmostEqual(v3sp.ctype, tpm.SPHERICAL) self.assertAlmostEqual(v3sp.vtype, tpm.POS) self.assertAlmostEqual(v3sp.r, 0.0) self.assertAlmostEqual(v3sp.alpha, 0.0) self.assertAlmostEqual(v3sp.delta, 0.0) # ctype and vtype are read only values. def f1(x): x.ctype = tpm.SPHERICAL def f2(x): x.vtype = tpm.VEL self.assertRaises(AttributeError, f1, v3sp) self.assertRaises(AttributeError, f2, v3sp)
def verify(t, t_norm, f): v3sp = tpm.V3SP(**t) s = f(v3sp) self.assertEqual(s, t_norm)
def verify(t, t_norm): v3sp = tpm.V3SP(**t) a = v3sp.ndelta self.assertAlmostEqual(a, t_norm)
def verify(t, t_norm, res): v3sp1 = tpm.V3SP(**t) v3sp2 = tpm.V3SP(**t_norm) d = v3sp1.dot(v3sp2) self.assertAlmostEqual(d, res)
def verify(t, t_norm): v3sp = tpm.V3SP(**t) d = v3sp.mod() self.assertAlmostEqual(d, t_norm)