diff --git a/GPy/kern/_src/coregionalize.py b/GPy/kern/_src/coregionalize.py index dcafeb88..3fcf1c98 100644 --- a/GPy/kern/_src/coregionalize.py +++ b/GPy/kern/_src/coregionalize.py @@ -62,7 +62,7 @@ class Coregionalize(Kern): return self._K_weave(X, X2) except: print "\n Weave compilation failed. Falling back to (slower) numpy implementation\n" - config.set('weave', 'working', False) + config.set('weave', 'working', 'False') return self._K_numpy(X, X2) else: return self._K_numpy(X, X2) @@ -121,13 +121,13 @@ class Coregionalize(Kern): #attempt to use weave for a nasty double indexing loop: fall back to numpy if config.getboolean('weave', 'working'): try: - dL_dK_small = self._gradient_reduce_weave(dL_dK, index1, index2) + dL_dK_small = self._gradient_reduce_weave(dL_dK, index, index2) except: print "\n Weave compilation failed. Falling back to (slower) numpy implementation\n" - config.set('weave', 'working', False) - dL_dK_small = self._gradient_reduce_weave(dL_dK, index1, index2) + config.set('weave', 'working', 'False') + dL_dK_small = self._gradient_reduce_weave(dL_dK, index, index2) else: - dL_dK_small = self._gradient_reduce_weave(dL_dK, index1, index2) + dL_dK_small = self._gradient_reduce_weave(dL_dK, index, index2) @@ -150,19 +150,16 @@ class Coregionalize(Kern): N, num_inducing, output_dim = index.size, index2.size, self.output_dim weave.inline(code, ['N', 'num_inducing', 'output_dim', 'dL_dK', 'dL_dK_small', 'index', 'index2']) return dL_dK_small -1 + def _gradient_reduce_numpy(self, dL_dK, index, index2): index, index2 = index[:,0], index2[:,0] - for i in range(k.output_dim): dL_dK_small = np.zeros_like(self.B) + for i in range(k.output_dim): tmp1 = dL_dK[index==i] for j in range(k.output_dim): dL_dK_small[j,i] = tmp1[:,index2==j].sum() return dL_dK_small - - - def update_gradients_diag(self, dL_dKdiag, X): index = np.asarray(X, dtype=np.int).flatten() dL_dKdiag_small = np.array([dL_dKdiag[index==i].sum() for i in xrange(self.output_dim)]) diff --git a/GPy/testing/kernel_tests.py b/GPy/testing/kernel_tests.py index cde024f6..dcfb9de4 100644 --- a/GPy/testing/kernel_tests.py +++ b/GPy/testing/kernel_tests.py @@ -360,43 +360,44 @@ class Coregionalize_weave_test(unittest.TestCase): """ Make sure that the coregionalize kernel work with and without weave enabled """ - k = GPy.kern.coregionalize(1, output_dim=12) - N1, N2 = 100, 200 - X = np.random.randint(0,12,(N1,1)) - X2 = np.random.randint(0,12,(N2,1)) + def setUp(self): + self.k = GPy.kern.Coregionalize(1, output_dim=12) + self.N1, self.N2 = 100, 200 + self.X = np.random.randint(0,12,(self.N1,1)) + self.X2 = np.random.randint(0,12,(self.N2,1)) - #symmetric case - dL_dK = np.random.randn(N1, N1) - GPy.util.config.config.set('weave', 'working', True) - K_weave = k.K(X) - k.update_gradients_full(dL_dK, X) - grads_weave = k.gradient.copy() + def test_sym(self): + dL_dK = np.random.randn(self.N1, self.N1) + GPy.util.config.config.set('weave', 'working', 'True') + K_weave = self.k.K(self.X) + self.k.update_gradients_full(dL_dK, self.X) + grads_weave = self.k.gradient.copy() - GPy.util.config.config.set('weave', 'working', False) - K_numpy = k.K(X) - k.update_gradients_full(dL_dK, X) - grads_numpy = k.gradient.copy() + GPy.util.config.config.set('weave', 'working', 'False') + K_numpy = self.k.K(self.X) + self.k.update_gradients_full(dL_dK, self.X) + grads_numpy = self.k.gradient.copy() - self.assertTrue(np.allclose(K_numpy, K_weave)) - self.assertTrue(np.allclose(grads_numpy, grads_weave)) + self.assertTrue(np.allclose(K_numpy, K_weave)) + self.assertTrue(np.allclose(grads_numpy, grads_weave)) - #non-symmetric case - dL_dK = np.random.randn(N1, N2) - GPy.util.config.config.set('weave', 'working', True) - K_weave = k.K(X, X2) - k.update_gradients_full(dL_dK, X, X2) - grads_weave = k.gradient.copy() + def test_nonsym(self): + dL_dK = np.random.randn(self.N1, self.N2) + GPy.util.config.config.set('weave', 'working', 'True') + K_weave = self.k.K(self.X, self.X2) + self.k.update_gradients_full(dL_dK, self.X, self.X2) + grads_weave = self.k.gradient.copy() - GPy.util.config.config.set('weave', 'working', False) - K_numpy = k.K(X, X2) - k.update_gradients_full(dL_dK, X, X2) - grads_numpy = k.gradient.copy() + GPy.util.config.config.set('weave', 'working', 'False') + K_numpy = self.k.K(self.X, self.X2) + self.k.update_gradients_full(dL_dK, self.X, self.X2) + grads_numpy = self.k.gradient.copy() - self.assertTrue(np.allclose(K_numpy, K_weave)) - self.assertTrue(np.allclose(grads_numpy, grads_weave)) + self.assertTrue(np.allclose(K_numpy, K_weave)) + self.assertTrue(np.allclose(grads_numpy, grads_weave)) #reset the weave state for any other tests - GPy.util.config.config.set('weave', 'working', False) + GPy.util.config.config.set('weave', 'working', 'False')