def test_affine_preconditioner(self): X = dot(randn(5, 5), randn(5, 1000)) + randn(5, 1) Y = dot(randn(2, 2), randn(2, 1000)) + dot(randn(2, 5), X) meanIn = randn(5, 1) meanOut = randn(2, 1) preIn = randn(5, 5) preOut = randn(2, 2) predictor = randn(2, 5) pre = AffinePreconditioner( meanIn, meanOut, preIn, preOut, predictor) # test inverse Xp, Yp = pre(X, Y) Xr, Yr = pre.inverse(Xp, Yp) # check that preconditioner does what it's expected to do self.assertEqual(pre.dim_in, X.shape[0]) self.assertEqual(pre.dim_out, Y.shape[0]) self.assertLess(max(abs(Xp - dot(preIn, X - meanIn))), 1e-10) self.assertLess(max(abs(Yp - dot(preOut, Y - meanOut - dot(predictor, Xp)))), 1e-10) # check that inverse works self.assertLess(max(abs(Xr - X)), 1e-10) self.assertLess(max(abs(Yr - Y)), 1e-10) # reference counts should not change Xrc = sys.getrefcount(X) Yrc = sys.getrefcount(Y) for i in range(10): pre(X, Y) self.assertEqual(sys.getrefcount(X), Xrc) self.assertEqual(sys.getrefcount(Y), Yrc)
def test_affine_preconditioner(self): X = dot(randn(5, 5), randn(5, 1000)) + randn(5, 1) Y = dot(randn(2, 2), randn(2, 1000)) + dot(randn(2, 5), X) meanIn = randn(5, 1) meanOut = randn(2, 1) preIn = randn(5, 5) preOut = randn(2, 2) predictor = randn(2, 5) pre = AffinePreconditioner( meanIn, meanOut, preIn, preOut, predictor) # test inverse Xp, Yp = pre(X, Y) Xr, Yr = pre.inverse(Xp, Yp) # check that preconditioner does what it's expected to do self.assertEqual(pre.dim_in, X.shape[0]) self.assertEqual(pre.dim_out, Y.shape[0]) self.assertLess(max(abs(Xp - dot(preIn, X - meanIn))), 1e-10) self.assertLess(max(abs(Yp - dot(preOut, Y - meanOut - dot(predictor, Xp)))), 1e-10) # check that inverse works self.assertLess(max(abs(Xr - X)), 1e-10) self.assertLess(max(abs(Yr - Y)), 1e-10) # reference counts should not change Xrc = sys.getrefcount(X) Yrc = sys.getrefcount(Y) for i in range(10): pre(X, Y) self.assertEqual(sys.getrefcount(X), Xrc) self.assertEqual(sys.getrefcount(Y), Yrc)