def test_weights_ut_1d(self): # UT weights in 1D model = BayesSardModel(1, self.ker_par_1d, point_str='ut', point_par=self.pt_par_ut) alpha = np.array([[0, 1, 2]]) w, wc, wcc, emv, ivar = model.bq_weights(self.ker_par_1d, alpha) # UT weights in 1D reproduced? self.assertTrue(np.allclose(w, UnscentedTransform.weights(1)[0])) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min())) # UT weights in 1D, different kappa and alpha model = BayesSardModel(1, self.ker_par_1d, point_str='ut', point_par={ 'kappa': 2, 'alpha': 1 }) alpha = np.array([[0, 1, 2]]) w, wc, wcc, emv, ivar = model.bq_weights(self.ker_par_1d, alpha) # UT weights in 1D reproduced? self.assertTrue( np.allclose(w, UnscentedTransform.weights(1, kappa=2, alpha=1)[0])) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))
def test_weights_ut_5d(self): model = BayesSardModel(5, np.array([[1.0, 25, 25, 25, 25, 25]]), point_str='ut') alpha = np.hstack((np.zeros( (5, 1)), np.eye(5), 2 * np.eye(5))).astype(np.int) par = np.array([[1.0, 25, 25, 25, 25, 25]]) w, wc, wcc, emv, ivar = model.bq_weights(par, alpha) # self.assertTrue(np.allclose(w, UnscentedTransform.weights(5, beta=0)[0])) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))
def test_weights_ut_2d(self): # UT weights in 2D par = np.array([[1.0, 1.0, 1]]) alpha = np.array([[0, 1, 0, 2, 0], [0, 0, 1, 0, 2]]) model = BayesSardModel(2, par, point_str='ut', point_par=self.pt_par_ut) w, wc, wcc, emv, ivar = model.bq_weights(par, alpha) # UT weights reproduced in 2D? self.assertTrue(np.allclose(w, UnscentedTransform.weights(2)[0])) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))
def test_weights_gh5_1d(self): # GH-5 weights in 1D model = BayesSardModel(1, self.ker_par_1d, point_str='gh', point_par={'degree': 5}) alpha = np.array([[0, 1, 2, 3, 4]]) w, wc, wcc, emv, ivar = model.bq_weights(self.ker_par_1d, alpha) # GH-5 weights in 1D reproduced? self.assertTrue( np.allclose(w, GaussHermiteTransform.weights(1, degree=5))) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))
def test_weights_gh3_2d(self): # GH-3 weights in 2D # there are 6 multivariate polynomials in 2D, UT has only 5 points in 2D model = BayesSardModel(2, self.ker_par_2d, point_str='gh', point_par={'degree': 3}) alpha = np.array([[0, 1, 0, 1, 2, 0, 1, 2, 2], [0, 0, 1, 1, 0, 2, 2, 1, 2]]) par = np.array([[1.0, 1, 1]]) w, wc, wcc, emv, ivar = model.bq_weights(par, alpha) self.assertTrue(np.allclose(w, GaussHermiteTransform.weights(2, 3))) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))
def test_weights_sr_1d(self): # SR weights == UT weights for kappa=0 and alpha=1 model = BayesSardModel(1, self.ker_par_1d, point_str='ut', point_par={ 'kappa': 0, 'alpha': 1 }) alpha = np.array([[0, 1, 2]]) w, wc, wcc, emv, ivar = model.bq_weights(self.ker_par_1d, alpha) # UT weights in 1D reproduced? self.assertTrue(np.allclose(w[1:], SphericalRadialTransform.weights(1))) self.assertGreaterEqual(emv, 0) self.assertGreaterEqual(ivar, 0) # test positive definiteness try: la.cholesky(wc) except la.LinAlgError: self.fail("Weights not positive definite. Min eigval: {}".format( la.eigvalsh(wc).min()))