def test_chisq(self): x = 1. d = {'x': 1, 'a*x': 2} ls = linsolve.LinearSolver(d, a=1.0, sparse=self.sparse) sol = ls.solve() chisq = ls.chisq(sol) np.testing.assert_equal(chisq, .5) x = 1. d = {'x': 1, '1.0*x': 2} ls = linsolve.LinearSolver(d, sparse=self.sparse) sol = ls.solve() chisq = ls.chisq(sol) np.testing.assert_equal(chisq, .5)
def setUp(self): eqs = ['x+y', 'x-y'] x, y = 1, 2 d, w = {}, {} for eq in eqs: d[eq], w[eq] = eval(eq), 1. self.ls = linsolve.LinearSolver(d, w)
def test_wgt_const_arrays(self): x,y = 1.,2. a,b = 3.*np.ones(4),1. eqs = ['a*x+y','x+b*y'] d,w = {}, {} for eq in eqs: d[eq],w[eq] = eval(eq)*np.ones(4), np.ones(4) ls = linsolve.LinearSolver(d,w,a=a,b=b) sol = ls.solve() np.testing.assert_almost_equal(sol['x'], x*np.ones(4,dtype=np.float)) np.testing.assert_almost_equal(sol['y'], y*np.ones(4,dtype=np.float))
def test_solve_arrays(self): x = np.arange(100,dtype=np.float); x.shape = (10,10) y = np.arange(100,dtype=np.float); y.shape = (10,10) eqs = ['2*x+y','-x+3*y'] d,w = {}, {} for eq in eqs: d[eq],w[eq] = eval(eq), 1. ls = linsolve.LinearSolver(d,w) sol = ls.solve() np.testing.assert_almost_equal(sol['x'], x) np.testing.assert_almost_equal(sol['y'], y)
def test_const_arrays(self): x,y = 1.,2. a = np.array([3.,4,5]) b = np.array([1.,2,3]) eqs = ['a*x+y','x+b*y'] d,w = {}, {} for eq in eqs: d[eq],w[eq] = eval(eq), 1. ls = linsolve.LinearSolver(d,w,a=a,b=b) sol = ls.solve() np.testing.assert_almost_equal(sol['x'], x*np.ones(3,dtype=np.float)) np.testing.assert_almost_equal(sol['y'], y*np.ones(3,dtype=np.float))
def test_eval(self): x, y = 1., 2. a, b = 3. * np.ones(4), 1. eqs = ['a*x+y', 'x+b*y'] d, w = {}, {} for eq in eqs: d[eq], w[eq] = eval(eq) * np.ones(4), np.ones(4) ls = linsolve.LinearSolver(d, w, a=a, b=b, sparse=self.sparse) sol = ls.solve() np.testing.assert_almost_equal(sol['x'], x * np.ones(4, dtype=np.float)) np.testing.assert_almost_equal(sol['y'], y * np.ones(4, dtype=np.float)) result = ls.eval(sol) for eq in d: np.testing.assert_almost_equal(d[eq], result[eq]) result = ls.eval(sol, 'a*x+b*y') np.testing.assert_almost_equal(3 * 1 + 1 * 2, result.values()[0])
def test_dtypes(self): ls = linsolve.LinearSolver({'x_': 1.0 + 1.0j}, sparse=self.sparse) self.assertEqual(ls.dtype, float) ls = linsolve.LinearSolver({'x': 1.0 + 1.0j}, sparse=self.sparse) self.assertEqual(ls.dtype, complex) ls = linsolve.LinearSolver({'x_': np.ones(1, dtype=np.complex64)[0]}, sparse=self.sparse) self.assertEqual(ls.dtype, np.float32) ls = linsolve.LinearSolver({'x': np.ones(1, dtype=np.complex64)[0]}, sparse=self.sparse) self.assertEqual(ls.dtype, np.complex64) ls = linsolve.LinearSolver({'c*x': 1.0}, c=1.0 + 1.0j, sparse=self.sparse) self.assertEqual(ls.dtype, complex) d = {'c*x': np.ones(1, dtype=np.float32)[0]} wgts = {'c*x': np.ones(1, dtype=np.float64)[0]} c = np.ones(1, dtype=np.float32)[0] ls = linsolve.LinearSolver(d, wgts=wgts, c=c, sparse=self.sparse) self.assertEqual(ls.dtype, np.float64)
def test_A_shape(self): consts = {'a': np.arange(10), 'b': np.zeros((1, 10))} ls = linsolve.LinearSolver({'a*x+b*y': 0.}, {'a*x+b*y': 1}, **consts) self.assertEqual(ls._A_shape(), [1, 2, 10, 10])