From 3e93579e3dc9e6370b27f029e6e086d2e9750444 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Fri, 14 Mar 2014 12:32:08 +0000 Subject: [PATCH] prior domain check --- GPy/core/parameterization/param.py | 2 +- GPy/core/parameterization/parameter_core.py | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index b5507dec..2ede8436 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -226,7 +226,7 @@ class Param(OptimizationHandlable, ObservableArray): # Constrainable #=========================================================================== def _ensure_fixes(self): - if not self._has_fixes(): self._fixes_ = numpy.ones(self._realsize_, dtype=bool) + self._fixes_ = numpy.ones(self._realsize_, dtype=bool) #=========================================================================== # Convenience diff --git a/GPy/core/parameterization/parameter_core.py b/GPy/core/parameterization/parameter_core.py index 6dd0b389..f58143bd 100644 --- a/GPy/core/parameterization/parameter_core.py +++ b/GPy/core/parameterization/parameter_core.py @@ -411,6 +411,15 @@ class Constrainable(Nameable, Indexable): repriorized = self.unset_priors() self._add_to_index_operations(self.priors, repriorized, prior, warning) + from domains import _REAL, _POSITIVE, _NEGATIVE + if prior.domain is _POSITIVE: + self.constrain_positive(warning) + elif prior.domain is _NEGATIVE: + self.constrain_negative(warning) + elif prior.domain is _REAL: + rav_i = self._raveled_index() + assert all(all(c.domain is _REAL for c in con) for con in self.constraints.properties_for(rav_i)) + def unset_priors(self, *priors): """ Un-set all priors given from this parameter handle. @@ -421,14 +430,14 @@ class Constrainable(Nameable, Indexable): def log_prior(self): """evaluate the prior""" if self.priors.size > 0: - x = self._get_params() - return reduce(lambda a, b: a + b, [p.lnpdf(x[ind]).sum() for p, ind in self.priors.iteritems()], 0) + x = self._param_array_ + return reduce(lambda a, b: a + b, (p.lnpdf(x[ind]).sum() for p, ind in self.priors.iteritems()), 0) return 0. def _log_prior_gradients(self): """evaluate the gradients of the priors""" if self.priors.size > 0: - x = self._get_params() + x = self._param_array_ ret = np.zeros(x.size) [np.put(ret, ind, p.lnpdf_grad(x[ind])) for p, ind in self.priors.iteritems()] return ret