def test_conj_solve(self): x,y = np.exp(1.), np.exp(2.+1j) d,w = {'x*y_':x*y.conjugate(), 'x':x}, {} for k in d: w[k] = 1. ls = linsolve.LogProductSolver(d,w) sol = ls.solve() for k in sol: self.assertAlmostEqual(sol[k], eval(k))
def test_solve(self): x,y,z = np.exp(1.), np.exp(2.), np.exp(3.) keys = ['x*y*z', 'x*y', 'y*z'] d,w = {}, {} for k in keys: d[k],w[k] = eval(k), 1. ls = linsolve.LogProductSolver(d,w) sol = ls.solve() for k in sol: self.assertAlmostEqual(sol[k], eval(k))
def test_init(self): x,y,z = np.exp(1.), np.exp(2.), np.exp(3.) keys = ['x*y*z', 'x*y', 'y*z'] d,w = {}, {} for k in keys: d[k],w[k] = eval(k), 1. ls = linsolve.LogProductSolver(d,w) for k in ls.ls_phs.data: np.testing.assert_equal(ls.ls_phs.data[k], 0) x,y,z = 1.,2.,3. for k in ls.ls_amp.data: np.testing.assert_equal(eval(k), ls.ls_amp.data[k])
def test_conj(self): x,y = 1+1j, 2+2j d,w = {}, {} d['x*y_'] = x * y.conjugate() d['x_*y'] = x.conjugate() * y d['x*y'] = x * y d['x_*y_'] = x.conjugate() * y.conjugate() for k in d: w[k] = 1. ls = linsolve.LogProductSolver(d,w) self.assertEqual(len(ls.ls_amp.data), 4) for k in ls.ls_amp.data: self.assertEqual(eval(k), 3+3j) # make sure they are all x+y self.assertTrue(k.replace('1','-1') in ls.ls_phs.data)
def test_no_abs_phs_solve(self): x,y,z = 1.+1j, 2.+2j, 3.+3j d,w = {'x*y_':x*y.conjugate(), 'x*z_':x*z.conjugate(), 'y*z_':y*z.conjugate()}, {} for k in d.keys(): w[k] = 1. ls = linsolve.LogProductSolver(d,w) sol = ls.solve() x,y,z = sol['x'], sol['y'], sol['z'] self.assertAlmostEqual(np.angle(x*y.conjugate()), 0.) self.assertAlmostEqual(np.angle(x*z.conjugate()), 0.) self.assertAlmostEqual(np.angle(y*z.conjugate()), 0.) # check projection of degenerate mode self.assertAlmostEqual(np.angle(x), 0.) self.assertAlmostEqual(np.angle(y), 0.) self.assertAlmostEqual(np.angle(z), 0.)