mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-30 14:35:15 +02:00
resolve all the test failures!
This commit is contained in:
parent
3653892d19
commit
6c226a129d
5 changed files with 57 additions and 25 deletions
|
|
@ -224,7 +224,7 @@ class Param(Parameterizable, ObsAr):
|
||||||
def _ties_str(self):
|
def _ties_str(self):
|
||||||
return ['']
|
return ['']
|
||||||
def _ties_for(self, ravi):
|
def _ties_for(self, ravi):
|
||||||
return [['N/A' if self.tie[i]==0 else str(self.tie[i])] for i in xrange(ravi.size)]
|
return [['N/A' if self.tie.flat[i]==0 else str(self.tie[i])] for i in xrange(ravi.size)]
|
||||||
def __repr__(self, *args, **kwargs):
|
def __repr__(self, *args, **kwargs):
|
||||||
name = "\033[1m{x:s}\033[0;0m:\n".format(
|
name = "\033[1m{x:s}\033[0;0m:\n".format(
|
||||||
x=self.hierarchy_name())
|
x=self.hierarchy_name())
|
||||||
|
|
|
||||||
|
|
@ -565,7 +565,8 @@ class Indexable(Nameable, Observable):
|
||||||
if self.has_parent():
|
if self.has_parent():
|
||||||
fixes = np.ones(self.size).astype(bool)
|
fixes = np.ones(self.size).astype(bool)
|
||||||
fixes[self.constraints[__fixed__]] = FIXED
|
fixes[self.constraints[__fixed__]] = FIXED
|
||||||
fixes[np.logical_not(self._highest_parent_.ties._untie_[self._highest_parent_._raveled_index_for(self)])] = FIXED
|
if self._has_ties():
|
||||||
|
fixes[np.logical_not(self._highest_parent_.ties._untie_[self._highest_parent_._raveled_index_for(self)])] = FIXED
|
||||||
return fixes
|
return fixes
|
||||||
else:
|
else:
|
||||||
hf = self._has_fixes()
|
hf = self._has_fixes()
|
||||||
|
|
@ -775,10 +776,7 @@ class OptimizationHandlable(Indexable):
|
||||||
self.param_array.flat[f] = p
|
self.param_array.flat[f] = p
|
||||||
[np.put(self.param_array, ind[f[ind]], c.f(self.param_array.flat[ind[f[ind]]]))
|
[np.put(self.param_array, ind[f[ind]], c.f(self.param_array.flat[ind[f[ind]]]))
|
||||||
for c, ind in self.constraints.iteritems() if c != __fixed__]
|
for c, ind in self.constraints.iteritems() if c != __fixed__]
|
||||||
<<<<<<< HEAD
|
|
||||||
self._highest_parent_.ties.propagate_val()
|
self._highest_parent_.ties.propagate_val()
|
||||||
=======
|
|
||||||
>>>>>>> 48fb60489160de6fb0e84f6559b85b07dd16e274
|
|
||||||
|
|
||||||
self._optimizer_copy_transformed = False
|
self._optimizer_copy_transformed = False
|
||||||
self._trigger_params_changed()
|
self._trigger_params_changed()
|
||||||
|
|
|
||||||
|
|
@ -80,18 +80,13 @@ class Parameterized(Parameterizable):
|
||||||
if not self._has_fixes():
|
if not self._has_fixes():
|
||||||
self._fixes_ = None
|
self._fixes_ = None
|
||||||
self._param_slices_ = []
|
self._param_slices_ = []
|
||||||
#self._connect_parameters()
|
self.link_parameters(*parameters)
|
||||||
<<<<<<< HEAD
|
|
||||||
self.add_parameters(*parameters)
|
|
||||||
|
|
||||||
from ties_and_remappings import Tie
|
from ties_and_remappings import Tie
|
||||||
if not isinstance(self,Tie):
|
if not isinstance(self,Tie):
|
||||||
self.ties = Tie()
|
self.ties = Tie()
|
||||||
self.add_parameter(self.ties, -1)
|
self.link_parameter(self.ties, -1)
|
||||||
self.add_observer(self.ties, self.ties._parameters_changed_notification, priority=-500)
|
self.add_observer(self.ties, self.ties._parameters_changed_notification, priority=-500)
|
||||||
=======
|
|
||||||
self.link_parameters(*parameters)
|
|
||||||
>>>>>>> 48fb60489160de6fb0e84f6559b85b07dd16e274
|
|
||||||
|
|
||||||
def build_pydot(self, G=None):
|
def build_pydot(self, G=None):
|
||||||
import pydot # @UnresolvedImport
|
import pydot # @UnresolvedImport
|
||||||
|
|
@ -230,7 +225,7 @@ class Parameterized(Parameterizable):
|
||||||
def add_parameter(self, *args, **kwargs):
|
def add_parameter(self, *args, **kwargs):
|
||||||
raise DeprecationWarning, "add_parameter was renamed to link_parameter to avoid confusion of setting variables"
|
raise DeprecationWarning, "add_parameter was renamed to link_parameter to avoid confusion of setting variables"
|
||||||
def remove_parameter(self, *args, **kwargs):
|
def remove_parameter(self, *args, **kwargs):
|
||||||
raise DeprecationWarning, "remove_parameter was renamed to link_parameter to avoid confusion of setting variables"
|
raise DeprecationWarning, "remove_parameter was renamed to unlink_parameter to avoid confusion of setting variables"
|
||||||
|
|
||||||
def _connect_parameters(self, ignore_added_names=False):
|
def _connect_parameters(self, ignore_added_names=False):
|
||||||
# connect parameterlist to this parameterized object
|
# connect parameterlist to this parameterized object
|
||||||
|
|
@ -246,6 +241,10 @@ class Parameterized(Parameterizable):
|
||||||
if self.gradient.size != self.size:
|
if self.gradient.size != self.size:
|
||||||
self._gradient_array_ = np.empty(self.size, dtype=np.float64)
|
self._gradient_array_ = np.empty(self.size, dtype=np.float64)
|
||||||
|
|
||||||
|
if not self.has_parent() and not hasattr(self, 'ties'):
|
||||||
|
from ties_and_remappings import Tie
|
||||||
|
Tie.recoverTies(self)
|
||||||
|
|
||||||
old_size = 0
|
old_size = 0
|
||||||
self._param_slices_ = []
|
self._param_slices_ = []
|
||||||
for i, p in enumerate(self.parameters):
|
for i, p in enumerate(self.parameters):
|
||||||
|
|
|
||||||
|
|
@ -70,25 +70,44 @@ class Tie(Parameterized):
|
||||||
self.buf_idx = None
|
self.buf_idx = None
|
||||||
self._untie_ = None
|
self._untie_ = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def recoverTies(p):
|
||||||
|
"""Recover the Tie object from the param objects"""
|
||||||
|
if not p.has_parent():
|
||||||
|
p.ties = Tie()
|
||||||
|
p.link_parameter(p.ties, -1)
|
||||||
|
p.add_observer(p.ties, p.ties._parameters_changed_notification, priority=-500)
|
||||||
|
|
||||||
|
p.update_model(False)
|
||||||
|
labels = p.ties._get_labels([p])
|
||||||
|
labels = labels[labels>0]
|
||||||
|
if len(labels)>0:
|
||||||
|
p._expand_tie_param(len(labels))
|
||||||
|
vals = p.ties._get_sync_val(p, labels)
|
||||||
|
p.tied_param[:] = vals
|
||||||
|
p.tied_param.tie[:] = labels
|
||||||
|
p._update_label_buf()
|
||||||
|
p.update_model(True)
|
||||||
|
|
||||||
def mergeTies(self, p):
|
def mergeTies(self, p):
|
||||||
"""Merge the tie tree with another tie tree"""
|
"""Merge the tie tree with another tie tree"""
|
||||||
assert hasattr(p,'ties') and isinstance(p.ties,Tie), str(type(p))
|
assert hasattr(p,'ties') and isinstance(p.ties,Tie), str(type(p))
|
||||||
self.update_model(False)
|
#self.update_model(False)
|
||||||
if p.ties.tied_param is not None:
|
if p.ties.tied_param is not None:
|
||||||
tie_labels,_ = self._expand_tie_param(p.ties.tied_param.size)
|
tie_labels,_ = self._expand_tie_param(p.ties.tied_param.size)
|
||||||
self.tied_param[-p.ties.tied_param.size:] = p.ties.tied_param
|
self.tied_param[-p.ties.tied_param.size:] = p.ties.tied_param
|
||||||
pairs = zip(self.tied_param.tie,tie_labels)
|
pairs = zip(self.tied_param.tie,tie_labels)
|
||||||
self._replace_labels(p, pairs)
|
self._replace_labels(p, pairs)
|
||||||
p.remove_observer(p.ties)
|
p.remove_observer(p.ties)
|
||||||
p.remove_parameter(p.ties)
|
p.unlink_parameter(p.ties)
|
||||||
del p.ties
|
del p.ties
|
||||||
self._update_label_buf()
|
self._update_label_buf()
|
||||||
self.update_model(True)
|
#self.update_model(True)
|
||||||
|
|
||||||
def splitTies(self, p):
|
def splitTies(self, p):
|
||||||
"""Split the tie subtree with the tie tree"""
|
"""Split the tie subtree from the original tie tree"""
|
||||||
p.ties = Tie()
|
p.ties = Tie()
|
||||||
p.add_parameter(p.ties, -1)
|
p.link_parameter(p.ties, -1)
|
||||||
p.add_observer(p.ties, p.ties._parameters_changed_notification, priority=-500)
|
p.add_observer(p.ties, p.ties._parameters_changed_notification, priority=-500)
|
||||||
if self.tied_param is not None:
|
if self.tied_param is not None:
|
||||||
self.update_model(False)
|
self.update_model(False)
|
||||||
|
|
@ -101,8 +120,24 @@ class Tie(Parameterized):
|
||||||
p.tied_param.tie[:] = self.tied_param.tie[idx]
|
p.tied_param.tie[:] = self.tied_param.tie[idx]
|
||||||
self._remove_unnecessary_ties()
|
self._remove_unnecessary_ties()
|
||||||
self._update_label_buf()
|
self._update_label_buf()
|
||||||
|
p._update_label_buf()
|
||||||
self.update_model(True)
|
self.update_model(True)
|
||||||
|
|
||||||
|
def _get_sync_val(self, p, labels):
|
||||||
|
vals = np.empty((labels.size,))
|
||||||
|
read = np.zeros((labels.size,),dtype=np.uint8)
|
||||||
|
def _get_sync_v(p, labels, vals, read):
|
||||||
|
for i in xrange(labels.size):
|
||||||
|
if read[i]==1:
|
||||||
|
p[p.tie==labels[i]] = vals[i]
|
||||||
|
elif np.any(p.tie==labels[i]):
|
||||||
|
vals[i] = p[p.tie==labels[i]][0]
|
||||||
|
p[p.tie==labels[i]][0] = vals[i]
|
||||||
|
read[i] = 1
|
||||||
|
self._traverse_param(_get_sync_v, (p,labels,vals,read), [])
|
||||||
|
return vals
|
||||||
|
|
||||||
|
|
||||||
def _sync_val_group(self, plist):
|
def _sync_val_group(self, plist):
|
||||||
val = np.hstack([p.param_array.flat for p in plist]).mean()
|
val = np.hstack([p.param_array.flat for p in plist]).mean()
|
||||||
def _set_val(p):
|
def _set_val(p):
|
||||||
|
|
@ -227,27 +262,27 @@ class Tie(Parameterized):
|
||||||
old_size = self.tied_param.size
|
old_size = self.tied_param.size
|
||||||
labellist = np.array(range(start_label,start_label+num),dtype=np.int)
|
labellist = np.array(range(start_label,start_label+num),dtype=np.int)
|
||||||
idxlist = np.array(range(old_size,old_size+num),dtype=np.int)
|
idxlist = np.array(range(old_size,old_size+num),dtype=np.int)
|
||||||
self.remove_parameter(self.tied_param)
|
self.unlink_parameter(self.tied_param)
|
||||||
self.tied_param = Param('tied',new_buf)
|
self.tied_param = Param('tied',new_buf)
|
||||||
self.tied_param.tie[:old_size] = old_tie_
|
self.tied_param.tie[:old_size] = old_tie_
|
||||||
self.tied_param.tie[old_size:] = labellist
|
self.tied_param.tie[old_size:] = labellist
|
||||||
self.add_parameter(self.tied_param)
|
self.link_parameter(self.tied_param)
|
||||||
return labellist, idxlist
|
return labellist, idxlist
|
||||||
|
|
||||||
def _remove_tie_param(self, labels):
|
def _remove_tie_param(self, labels):
|
||||||
"""Remove the tie param corresponding to *labels*"""
|
"""Remove the tie param corresponding to *labels*"""
|
||||||
if len(labels) == self.tied_param.size:
|
if len(labels) == self.tied_param.size:
|
||||||
self.remove_parameter(self.tied_param)
|
self.unlink_parameter(self.tied_param)
|
||||||
self.tied_param = None
|
self.tied_param = None
|
||||||
else:
|
else:
|
||||||
new_buf = np.empty((self.tied_param.size-len(labels),))
|
new_buf = np.empty((self.tied_param.size-len(labels),))
|
||||||
idx = np.logical_not(np.in1d(self.tied_param.tie,labels))
|
idx = np.logical_not(np.in1d(self.tied_param.tie,labels))
|
||||||
new_buf[:] = self.tied_param[idx]
|
new_buf[:] = self.tied_param[idx]
|
||||||
old_tie_ = self.tied_param.tie.copy()
|
old_tie_ = self.tied_param.tie.copy()
|
||||||
self.remove_parameter(self.tied_param)
|
self.unlink_parameter(self.tied_param)
|
||||||
self.tied_param = Param('tied',new_buf)
|
self.tied_param = Param('tied',new_buf)
|
||||||
self.tied_param.tie[:] = old_tie_[idx]
|
self.tied_param.tie[:] = old_tie_[idx]
|
||||||
self.add_parameter(self.tied_param)
|
self.link_parameter(self.tied_param)
|
||||||
|
|
||||||
def _merge_tie_labels(self, labels):
|
def _merge_tie_labels(self, labels):
|
||||||
"""Merge all the labels in the list to the first one"""
|
"""Merge all the labels in the list to the first one"""
|
||||||
|
|
|
||||||
|
|
@ -225,7 +225,7 @@ class CombinationKernel(Kern):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def parts(self):
|
def parts(self):
|
||||||
return self.parameters
|
return [p for p in self.parameters if isinstance(p,Kern)]
|
||||||
|
|
||||||
def get_input_dim_active_dims(self, kernels, extra_dims = None):
|
def get_input_dim_active_dims(self, kernels, extra_dims = None):
|
||||||
#active_dims = reduce(np.union1d, (np.r_[x.active_dims] for x in kernels), np.array([], dtype=int))
|
#active_dims = reduce(np.union1d, (np.r_[x.active_dims] for x in kernels), np.array([], dtype=int))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue