2014-02-13 16:44:45 +00:00
|
|
|
'''
|
|
|
|
|
Created on Feb 13, 2014
|
|
|
|
|
|
|
|
|
|
@author: maxzwiessele
|
|
|
|
|
'''
|
|
|
|
|
import unittest
|
|
|
|
|
import GPy
|
|
|
|
|
import numpy as np
|
2014-02-28 16:18:47 +00:00
|
|
|
from GPy.core.parameterization.parameter_core import HierarchyError
|
2014-04-01 10:22:20 +01:00
|
|
|
from GPy.core.parameterization.observable_array import ObsAr
|
2014-06-30 09:20:56 -07:00
|
|
|
from GPy.core.parameterization.transformations import NegativeLogexp
|
2014-02-13 16:44:45 +00:00
|
|
|
|
2014-03-14 11:31:16 +00:00
|
|
|
class ArrayCoreTest(unittest.TestCase):
|
|
|
|
|
def setUp(self):
|
|
|
|
|
self.X = np.random.normal(1,1, size=(100,10))
|
2014-03-17 17:10:06 +00:00
|
|
|
self.obsX = ObsAr(self.X)
|
2014-03-14 11:31:16 +00:00
|
|
|
|
|
|
|
|
def test_init(self):
|
2014-03-17 17:10:06 +00:00
|
|
|
X = ObsAr(self.X)
|
|
|
|
|
X2 = ObsAr(X)
|
2014-03-14 11:31:16 +00:00
|
|
|
self.assertIs(X, X2, "no new Observable array, when Observable is given")
|
|
|
|
|
|
|
|
|
|
def test_slice(self):
|
|
|
|
|
t1 = self.X[2:78]
|
|
|
|
|
t2 = self.obsX[2:78]
|
|
|
|
|
self.assertListEqual(t1.tolist(), t2.tolist(), "Slicing should be the exact same, as in ndarray")
|
|
|
|
|
|
|
|
|
|
class ParameterizedTest(unittest.TestCase):
|
2014-02-13 16:44:45 +00:00
|
|
|
|
|
|
|
|
def setUp(self):
|
2014-05-12 14:40:34 +01:00
|
|
|
self.rbf = GPy.kern.RBF(20)
|
2014-02-21 17:53:44 +00:00
|
|
|
self.white = GPy.kern.White(1)
|
2014-02-13 16:44:45 +00:00
|
|
|
from GPy.core.parameterization import Param
|
|
|
|
|
from GPy.core.parameterization.transformations import Logistic
|
2014-05-12 14:40:34 +01:00
|
|
|
self.param = Param('param', np.random.uniform(0,1,(25,2)), Logistic(0, 1))
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
self.test1 = GPy.core.Parameterized("test model")
|
2014-03-31 14:12:03 +01:00
|
|
|
self.test1.param = self.param
|
2014-03-18 16:30:46 +00:00
|
|
|
self.test1.kern = self.rbf+self.white
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.link_parameter(self.test1.kern)
|
|
|
|
|
self.test1.link_parameter(self.param, 0)
|
2014-06-30 09:20:56 -07:00
|
|
|
# print self.test1:
|
|
|
|
|
#=============================================================================
|
|
|
|
|
# test_model. | Value | Constraint | Prior | Tied to
|
|
|
|
|
# param | (25L, 2L) | {0.0,1.0} | |
|
|
|
|
|
# add.rbf.variance | 1.0 | 0.0,1.0 +ve | |
|
|
|
|
|
# add.rbf.lengthscale | 1.0 | 0.0,1.0 +ve | |
|
|
|
|
|
# add.white.variance | 1.0 | 0.0,1.0 +ve | |
|
|
|
|
|
#=============================================================================
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-03-04 17:32:46 +00:00
|
|
|
x = np.linspace(-2,6,4)[:,None]
|
|
|
|
|
y = np.sin(x)
|
|
|
|
|
self.testmodel = GPy.models.GPRegression(x,y)
|
2014-06-30 09:20:56 -07:00
|
|
|
# print self.testmodel:
|
|
|
|
|
#=============================================================================
|
|
|
|
|
# GP_regression. | Value | Constraint | Prior | Tied to
|
|
|
|
|
# rbf.variance | 1.0 | +ve | |
|
|
|
|
|
# rbf.lengthscale | 1.0 | +ve | |
|
|
|
|
|
# Gaussian_noise.variance | 1.0 | +ve | |
|
|
|
|
|
#=============================================================================
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
def test_add_parameter(self):
|
|
|
|
|
self.assertEquals(self.rbf._parent_index_, 0)
|
|
|
|
|
self.assertEquals(self.white._parent_index_, 1)
|
2014-03-18 16:30:46 +00:00
|
|
|
self.assertEquals(self.param._parent_index_, 0)
|
2014-02-13 16:44:45 +00:00
|
|
|
pass
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
def test_fixes(self):
|
|
|
|
|
self.white.fix(warning=False)
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.unlink_parameter(self.param)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertTrue(self.test1._has_fixes())
|
|
|
|
|
from GPy.core.parameterization.transformations import FIXED, UNFIXED
|
|
|
|
|
self.assertListEqual(self.test1._fixes_.tolist(),[UNFIXED,UNFIXED,FIXED])
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.kern.link_parameter(self.white, 0)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertListEqual(self.test1._fixes_.tolist(),[FIXED,UNFIXED,UNFIXED])
|
2014-03-18 16:30:46 +00:00
|
|
|
self.test1.kern.rbf.fix()
|
|
|
|
|
self.assertListEqual(self.test1._fixes_.tolist(),[FIXED]*3)
|
2014-03-31 14:12:03 +01:00
|
|
|
self.test1.fix()
|
|
|
|
|
self.assertTrue(self.test1.is_fixed)
|
|
|
|
|
self.assertListEqual(self.test1._fixes_.tolist(),[FIXED]*self.test1.size)
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
def test_remove_parameter(self):
|
2014-02-21 17:53:44 +00:00
|
|
|
from GPy.core.parameterization.transformations import FIXED, UNFIXED, __fixed__, Logexp
|
2014-02-13 16:44:45 +00:00
|
|
|
self.white.fix()
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.kern.unlink_parameter(self.white)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertIs(self.test1._fixes_,None)
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertListEqual(self.white._fixes_.tolist(), [FIXED])
|
2014-02-21 17:53:44 +00:00
|
|
|
self.assertEquals(self.white.constraints._offset, 0)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.rbf.constraints._param_index_ops)
|
2014-03-14 11:45:28 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.param.constraints._param_index_ops)
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.link_parameter(self.white, 0)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.white.constraints._param_index_ops)
|
|
|
|
|
self.assertIs(self.test1.constraints, self.rbf.constraints._param_index_ops)
|
2014-03-14 11:45:28 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.param.constraints._param_index_ops)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertListEqual(self.test1.constraints[__fixed__].tolist(), [0])
|
|
|
|
|
self.assertIs(self.white._fixes_,None)
|
|
|
|
|
self.assertListEqual(self.test1._fixes_.tolist(),[FIXED] + [UNFIXED] * 52)
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.unlink_parameter(self.white)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertIs(self.test1._fixes_,None)
|
|
|
|
|
self.assertListEqual(self.white._fixes_.tolist(), [FIXED])
|
|
|
|
|
self.assertIs(self.test1.constraints, self.rbf.constraints._param_index_ops)
|
2014-02-21 17:53:44 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.param.constraints._param_index_ops)
|
2014-03-18 16:30:46 +00:00
|
|
|
self.assertListEqual(self.test1.constraints[Logexp()].tolist(), range(self.param.size, self.param.size+self.rbf.size))
|
|
|
|
|
|
|
|
|
|
def test_remove_parameter_param_array_grad_array(self):
|
2014-03-31 12:45:09 +01:00
|
|
|
val = self.test1.kern.param_array.copy()
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.kern.unlink_parameter(self.white)
|
2014-03-31 12:45:09 +01:00
|
|
|
self.assertListEqual(self.test1.kern.param_array.tolist(), val[:2].tolist())
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
def test_add_parameter_already_in_hirarchy(self):
|
2014-09-08 08:57:28 +01:00
|
|
|
self.assertRaises(HierarchyError, self.test1.link_parameter, self.white.parameters[0])
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
def test_default_constraints(self):
|
2014-02-21 17:53:44 +00:00
|
|
|
self.assertIs(self.rbf.variance.constraints._param_index_ops, self.rbf.constraints._param_index_ops)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertIs(self.test1.constraints, self.rbf.constraints._param_index_ops)
|
|
|
|
|
self.assertListEqual(self.rbf.constraints.indices()[0].tolist(), range(2))
|
|
|
|
|
from GPy.core.parameterization.transformations import Logexp
|
2014-03-18 16:30:46 +00:00
|
|
|
kern = self.test1.kern
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.unlink_parameter(kern)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertListEqual(kern.constraints[Logexp()].tolist(), range(3))
|
|
|
|
|
|
|
|
|
|
def test_constraints(self):
|
|
|
|
|
self.rbf.constrain(GPy.transformations.Square(), False)
|
2014-03-18 16:30:46 +00:00
|
|
|
self.assertListEqual(self.test1.constraints[GPy.transformations.Square()].tolist(), range(self.param.size, self.param.size+self.rbf.size))
|
|
|
|
|
self.assertListEqual(self.test1.constraints[GPy.transformations.Logexp()].tolist(), [self.param.size+self.rbf.size])
|
2014-03-13 12:28:56 +00:00
|
|
|
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.kern.unlink_parameter(self.rbf)
|
2014-02-13 16:44:45 +00:00
|
|
|
self.assertListEqual(self.test1.constraints[GPy.transformations.Square()].tolist(), [])
|
|
|
|
|
|
|
|
|
|
def test_constraints_views(self):
|
2014-03-18 16:30:46 +00:00
|
|
|
self.assertEqual(self.white.constraints._offset, self.param.size+self.rbf.size)
|
|
|
|
|
self.assertEqual(self.rbf.constraints._offset, self.param.size)
|
|
|
|
|
self.assertEqual(self.param.constraints._offset, 0)
|
2014-02-13 16:44:45 +00:00
|
|
|
|
2014-03-04 17:32:46 +00:00
|
|
|
def test_fixing_randomize(self):
|
2014-03-17 16:55:21 +00:00
|
|
|
self.white.fix(warning=True)
|
2014-03-18 16:30:46 +00:00
|
|
|
val = float(self.white.variance)
|
2014-03-04 17:32:46 +00:00
|
|
|
self.test1.randomize()
|
|
|
|
|
self.assertEqual(val, self.white.variance)
|
|
|
|
|
|
2014-03-20 17:51:43 +00:00
|
|
|
def test_randomize(self):
|
|
|
|
|
ps = self.test1.param.view(np.ndarray).copy()
|
2014-09-11 17:29:47 +01:00
|
|
|
self.test1.param[2:5].fix()
|
2014-03-20 17:51:43 +00:00
|
|
|
self.test1.param.randomize()
|
2014-09-11 17:29:47 +01:00
|
|
|
self.assertFalse(np.all(ps==self.test1.param),str(ps)+str(self.test1.param))
|
2014-03-20 17:51:43 +00:00
|
|
|
|
2014-03-18 16:30:46 +00:00
|
|
|
def test_fixing_randomize_parameter_handling(self):
|
|
|
|
|
self.rbf.fix(warning=True)
|
|
|
|
|
val = float(self.rbf.variance)
|
2014-09-05 12:40:20 +01:00
|
|
|
self.test1.kern.randomize()
|
|
|
|
|
self.assertEqual(val, self.rbf.variance)
|
|
|
|
|
|
2014-09-11 17:29:47 +01:00
|
|
|
# def test_updates(self):
|
|
|
|
|
# # WHAT DO YOU WANT TO TEST HERE?
|
|
|
|
|
# self.test1.update_model(False)
|
|
|
|
|
# val = float(self.rbf.variance)
|
|
|
|
|
# self.test1.kern.randomize()
|
|
|
|
|
# self.assertEqual(val, self.rbf.variance,str(self.test1))
|
2014-03-18 16:30:46 +00:00
|
|
|
|
2014-03-04 17:32:46 +00:00
|
|
|
def test_fixing_optimize(self):
|
|
|
|
|
self.testmodel.kern.lengthscale.fix()
|
|
|
|
|
val = float(self.testmodel.kern.lengthscale)
|
|
|
|
|
self.testmodel.randomize()
|
|
|
|
|
self.assertEqual(val, self.testmodel.kern.lengthscale)
|
|
|
|
|
|
2014-06-30 09:20:56 -07:00
|
|
|
def test_add_parameter_in_hierarchy(self):
|
|
|
|
|
from GPy.core import Param
|
2014-09-08 08:57:28 +01:00
|
|
|
self.test1.kern.rbf.link_parameter(Param("NEW", np.random.rand(2), NegativeLogexp()), 1)
|
2014-06-30 09:20:56 -07:00
|
|
|
self.assertListEqual(self.test1.constraints[NegativeLogexp()].tolist(), range(self.param.size+1, self.param.size+1 + 2))
|
|
|
|
|
self.assertListEqual(self.test1.constraints[GPy.transformations.Logistic(0,1)].tolist(), range(self.param.size))
|
|
|
|
|
self.assertListEqual(self.test1.constraints[GPy.transformations.Logexp(0,1)].tolist(), np.r_[50, 53:55].tolist())
|
|
|
|
|
|
2014-04-16 11:46:47 +01:00
|
|
|
def test_regular_expression_misc(self):
|
|
|
|
|
self.testmodel.kern.lengthscale.fix()
|
|
|
|
|
val = float(self.testmodel.kern.lengthscale)
|
|
|
|
|
self.testmodel.randomize()
|
|
|
|
|
self.assertEqual(val, self.testmodel.kern.lengthscale)
|
|
|
|
|
|
|
|
|
|
variances = self.testmodel['.*var'].values()
|
|
|
|
|
self.testmodel['.*var'].fix()
|
|
|
|
|
self.testmodel.randomize()
|
|
|
|
|
np.testing.assert_equal(variances, self.testmodel['.*var'].values())
|
|
|
|
|
|
2014-04-17 15:01:43 +01:00
|
|
|
def test_fix_unfix(self):
|
|
|
|
|
fixed = self.testmodel.kern.lengthscale.fix()
|
|
|
|
|
self.assertListEqual(fixed.tolist(), [0])
|
|
|
|
|
unfixed = self.testmodel.kern.lengthscale.unfix()
|
|
|
|
|
self.testmodel.kern.lengthscale.constrain_positive()
|
|
|
|
|
self.assertListEqual(unfixed.tolist(), [0])
|
|
|
|
|
|
|
|
|
|
fixed = self.testmodel.kern.fix()
|
|
|
|
|
self.assertListEqual(fixed.tolist(), [0,1])
|
|
|
|
|
unfixed = self.testmodel.kern.unfix()
|
|
|
|
|
self.assertListEqual(unfixed.tolist(), [0,1])
|
|
|
|
|
|
2014-03-17 16:55:21 +00:00
|
|
|
def test_printing(self):
|
|
|
|
|
print self.test1
|
|
|
|
|
print self.param
|
|
|
|
|
print self.test1['']
|
|
|
|
|
|
2014-02-13 16:44:45 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
|
#import sys;sys.argv = ['', 'Test.test_add_parameter']
|
2014-06-30 09:20:56 -07:00
|
|
|
unittest.main()
|