diff --git a/GPy/core/parameterization/lists_and_dicts.py b/GPy/core/parameterization/lists_and_dicts.py index 13547c94..64bdb077 100644 --- a/GPy/core/parameterization/lists_and_dicts.py +++ b/GPy/core/parameterization/lists_and_dicts.py @@ -57,6 +57,7 @@ class ObservablesList(object): def __repr__(self): return self._poc.__repr__() + def add(self, priority, observable, callble): if observable is not None: diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index 19e48d84..91bf3561 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -57,9 +57,9 @@ class Param(OptimizationHandlable, ObsAr): def build_pydot(self,G): import pydot - node = pydot.Node(id(self), shape='record', label=self.name) + node = pydot.Node(id(self), shape='trapezium', label=self.name)#, fontcolor='white', color='white') G.add_node(node) - for o in self.observers.keys(): + for _, o, _ in self.observers: label = o.name if hasattr(o, 'name') else str(o) observed_node = pydot.Node(id(o), label=label) G.add_node(observed_node) diff --git a/GPy/core/parameterization/parameter_core.py b/GPy/core/parameterization/parameter_core.py index 5113b8d9..ba85be03 100644 --- a/GPy/core/parameterization/parameter_core.py +++ b/GPy/core/parameterization/parameter_core.py @@ -599,14 +599,13 @@ class OptimizationHandlable(Constrainable): return p def _set_params_transformed(self, p): - if p is self.param_array: - p = p.copy() - if self.has_parent() and self.constraints[__fixed__].size != 0: - fixes = np.ones(self.size).astype(bool) - fixes[self.constraints[__fixed__]] = FIXED - self.param_array.flat[fixes] = p - elif self._has_fixes(): self.param_array.flat[self._fixes_] = p - else: self.param_array.flat = p + if not(p is self.param_array): + if self.has_parent() and self.constraints[__fixed__].size != 0: + fixes = np.ones(self.size).astype(bool) + fixes[self.constraints[__fixed__]] = FIXED + self.param_array.flat[fixes] = p + elif self._has_fixes(): self.param_array.flat[self._fixes_] = p + else: self.param_array.flat = p self.untransform() self._trigger_params_changed() @@ -621,7 +620,7 @@ class OptimizationHandlable(Constrainable): def num_params(self): """ Return the number of parameters of this parameter_handle. - Param objects will allways return 0. + Param objects will always return 0. """ raise NotImplemented, "Abstract, please implement in respective classes" @@ -742,14 +741,15 @@ class Parameterizable(OptimizationHandlable): self.__visited = True for c in self._parameters_: c.traverse(visit, *args, **kwargs) + self.__visited = False def traverse_parents(self, visit, *args, **kwargs): """ Traverse the hierarchy upwards, visiting all parents and their children. See "visitor pattern" in literature. This is implemented in pre-order fashion. - + Example: - + parents = [] self.traverse_parents(parents.append) print parents diff --git a/GPy/core/parameterization/parameterized.py b/GPy/core/parameterization/parameterized.py index 738f0485..67694a1b 100644 --- a/GPy/core/parameterization/parameterized.py +++ b/GPy/core/parameterization/parameterized.py @@ -82,15 +82,15 @@ class Parameterized(Parameterizable): import pydot # @UnresolvedImport iamroot = False if G is None: - G = pydot.Dot(graph_type='digraph') + G = pydot.Dot(graph_type='digraph', bgcolor=None) iamroot=True - node = pydot.Node(id(self), shape='record', label=self.name) + node = pydot.Node(id(self), shape='box', label=self.name)#, color='white') G.add_node(node) for child in self._parameters_: child_node = child.build_pydot(G) - G.add_edge(pydot.Edge(node, child_node)) + G.add_edge(pydot.Edge(node, child_node))#, color='white')) - for o in self.observers.keys(): + for _, o, _ in self.observers: label = o.name if hasattr(o, 'name') else str(o) observed_node = pydot.Node(id(o), label=label) G.add_node(observed_node)