From 28487a9551ae9205f7c6ad973777407a9e26e74d Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 11:47:25 +0100 Subject: [PATCH 1/8] fix: uniform prior can be positive and negative, depending on lower and upper bound --- GPy/core/parameterization/priors.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/GPy/core/parameterization/priors.py b/GPy/core/parameterization/priors.py index 71b9833e..eb83f83d 100644 --- a/GPy/core/parameterization/priors.py +++ b/GPy/core/parameterization/priors.py @@ -5,7 +5,7 @@ import numpy as np from scipy.special import gammaln, digamma from ...util.linalg import pdinv -from paramz.domains import _REAL, _POSITIVE +from paramz.domains import _REAL, _POSITIVE, _NEGATIVE import warnings import weakref @@ -92,7 +92,6 @@ class Gaussian(Prior): # self.constant = -0.5 * np.log(2 * np.pi * self.sigma2) class Uniform(Prior): - domain = _REAL _instances = [] def __new__(cls, lower=0, upper=1): # Singleton: @@ -108,6 +107,13 @@ class Uniform(Prior): def __init__(self, lower, upper): self.lower = float(lower) self.upper = float(upper) + assert self.lower < self.upper, "Lower needs to be strictly smaller than upper." + if self.lower >= 0: + self.domain = _POSITIVE + elif self.upper <= 0: + self.domain = _NEGATIVE + else: + self.domain = _REAL def __str__(self): return "[{:.2g}, {:.2g}]".format(self.lower, self.upper) From c7e3eedd30f6a96c52afd30eb2523d45c2162aac Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 14:36:23 +0100 Subject: [PATCH 2/8] fix: uniform prior tests --- GPy/testing/prior_tests.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/GPy/testing/prior_tests.py b/GPy/testing/prior_tests.py index 23822a5a..377ae504 100644 --- a/GPy/testing/prior_tests.py +++ b/GPy/testing/prior_tests.py @@ -83,6 +83,35 @@ class PriorTests(unittest.TestCase): # should raise an assertionerror. self.assertRaises(AssertionError, m.rbf.set_prior, gaussian) + def test_uniform(self): + xmin, xmax = 1, 2.5*np.pi + b, C, SNR = 1, 0, 0.1 + X = np.linspace(xmin, xmax, 500) + y = b*X + C + 1*np.sin(X) + y += 0.05*np.random.randn(len(X)) + X, y = X[:, None], y[:, None] + m = GPy.models.SparseGPRegression(X, y) + uniform = GPy.priors.Uniform(0, 2) + m.rbf.set_prior(uniform) + m.randomize() + self.assertTrue(m.checkgrad()) + + m.Z.set_prior(uniform) + m.randomize() + self.assertTrue(m.checkgrad()) + + m.Z.unconstrain() + uniform = GPy.priors.Uniform(-1, 10) + m.Z.set_prior(uniform) + m.randomize() + self.assertTrue(m.checkgrad()) + + m.Z.constrain_negative() + uniform = GPy.priors.Uniform(-1, 0) + m.Z.set_prior(uniform) + m.randomize() + self.assertTrue(m.checkgrad()) + def test_set_gaussian_for_reals(self): xmin, xmax = 1, 2.5*np.pi b, C, SNR = 1, 0, 0.1 From 00f9ca1650549fbf5f7a5a06d6da4a779a4b8e62 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 14:38:02 +0100 Subject: [PATCH 3/8] =?UTF-8?q?Bump=20version:=201.8.1=20=E2=86=92=201.8.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GPy/__version__.py | 2 +- appveyor.yml | 2 +- setup.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GPy/__version__.py b/GPy/__version__.py index 2d986fc5..320141d8 100644 --- a/GPy/__version__.py +++ b/GPy/__version__.py @@ -1 +1 @@ -__version__ = "1.8.1" +__version__ = "1.8.2" diff --git a/appveyor.yml b/appveyor.yml index 89890a3f..3afecdb6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,7 @@ environment: secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00= COVERALLS_REPO_TOKEN: secure: d3Luic/ESkGaWnZrvWZTKrzO+xaVwJWaRCEP0F+K/9DQGPSRZsJ/Du5g3s4XF+tS - gpy_version: 1.8.1 + gpy_version: 1.8.2 matrix: - PYTHON_VERSION: 2.7 MINICONDA: C:\Miniconda-x64 diff --git a/setup.cfg b/setup.cfg index 3104039d..5a2db78b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.8.1 +current_version = 1.8.2 tag = True commit = True From b5048bcfad500563d1401509b66154a34023a44d Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 14:38:53 +0100 Subject: [PATCH 4/8] fix: pkg: CHANGELOG --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebd978a5..e74b8a14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## v1.8.2 (2017-10-02) + +### Fix + +* Uniform prior tests. [mzwiessele] + +* Uniform prior can be positive and negative, depending on lower and upper bound. [mzwiessele] + +### Other + +* Bump version: 1.8.1 → 1.8.2. [mzwiessele] + + ## v1.8.1 (2017-10-02) ### Fix From 5a0dc2242689deeec01b0e812558370f70c9a545 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 16:03:17 +0100 Subject: [PATCH 5/8] fix: use paramz 0.8.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c3a75024..7d3a5355 100644 --- a/setup.py +++ b/setup.py @@ -150,7 +150,7 @@ setup(name = 'GPy', py_modules = ['GPy.__init__'], test_suite = 'GPy.testing', setup_requires = ['numpy>=1.7'], - install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.8.3'], + install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.8.5'], extras_require = {'docs':['sphinx'], 'optional':['mpi4py', 'ipython>=4.0.0', From 8826ebeb8d398e0980329c51b549e37a1620dfc0 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 16:04:44 +0100 Subject: [PATCH 6/8] fix: uniform prior instantiation --- GPy/core/parameterization/priors.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/GPy/core/parameterization/priors.py b/GPy/core/parameterization/priors.py index eb83f83d..3d69f39e 100644 --- a/GPy/core/parameterization/priors.py +++ b/GPy/core/parameterization/priors.py @@ -100,7 +100,11 @@ class Uniform(Prior): for instance in cls._instances: if instance().lower == lower and instance().upper == upper: return instance() - o = super(Prior, cls).__new__(cls, lower, upper) + newfunc = super(Prior, cls).__new__ + if newfunc is object.__new__: + o = newfunc(cls) + else: + o = newfunc(cls, lower, upper) cls._instances.append(weakref.ref(o)) return cls._instances[-1]() From 0ddae6103b82176f7af8960443e9c7d49ee2f497 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 16:04:53 +0100 Subject: [PATCH 7/8] =?UTF-8?q?Bump=20version:=201.8.2=20=E2=86=92=201.8.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GPy/__version__.py | 2 +- appveyor.yml | 2 +- setup.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GPy/__version__.py b/GPy/__version__.py index 320141d8..a44132de 100644 --- a/GPy/__version__.py +++ b/GPy/__version__.py @@ -1 +1 @@ -__version__ = "1.8.2" +__version__ = "1.8.3" diff --git a/appveyor.yml b/appveyor.yml index 3afecdb6..da9b0c95 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,7 @@ environment: secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00= COVERALLS_REPO_TOKEN: secure: d3Luic/ESkGaWnZrvWZTKrzO+xaVwJWaRCEP0F+K/9DQGPSRZsJ/Du5g3s4XF+tS - gpy_version: 1.8.2 + gpy_version: 1.8.3 matrix: - PYTHON_VERSION: 2.7 MINICONDA: C:\Miniconda-x64 diff --git a/setup.cfg b/setup.cfg index 5a2db78b..2cf9e856 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.8.2 +current_version = 1.8.3 tag = True commit = True From 734059694222963886607acea36aa3c1c92dae40 Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 2 Oct 2017 16:05:13 +0100 Subject: [PATCH 8/8] fix: pkg: CHANGELOG --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e74b8a14..88d728b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## v1.8.3 (2017-10-02) + +### Fix + +* Uniform prior instantiation. [mzwiessele] + +* Use paramz 0.8.5. [mzwiessele] + +### Other + +* Bump version: 1.8.2 → 1.8.3. [mzwiessele] + + ## v1.8.2 (2017-10-02) ### Fix