diff --git a/GPy/core/parameterization/array_core.py b/GPy/core/parameterization/array_core.py index e5b2ac07..a338ceed 100644 --- a/GPy/core/parameterization/array_core.py +++ b/GPy/core/parameterization/array_core.py @@ -4,7 +4,7 @@ __updated__ = '2013-12-16' import numpy as np -from parameter_core import Observable, Parameterizable +from parameter_core import Observable class ParamList(list): """ diff --git a/GPy/core/parameterization/parameter_core.py b/GPy/core/parameterization/parameter_core.py index 94567761..6afa94cb 100644 --- a/GPy/core/parameterization/parameter_core.py +++ b/GPy/core/parameterization/parameter_core.py @@ -19,12 +19,13 @@ class Observable(object): self._observer_callables_[observer].append(callble) def remove_observer(self, observer, callble=None): - if callble is None: - del self._observer_callables_[observer] - else: - self._observer_callables_[observer].remove(callble) - if len(self._observer_callables_[observer]) == 0: - self.remove_observer(observer) + if observer in self._observer_callables_: + if callble is None: + del self._observer_callables_[observer] + elif callble in self._observer_callables_[observer]: + self._observer_callables_[observer].remove(callble) + if len(self._observer_callables_[observer]) == 0: + self.remove_observer(observer) def _notify_observers(self): [[callble(self) for callble in callables] diff --git a/GPy/util/caching.py b/GPy/util/caching.py index 47a44d58..8e60cf26 100644 --- a/GPy/util/caching.py +++ b/GPy/util/caching.py @@ -19,8 +19,9 @@ class Cacher(object): for a in ca: if (not any(a is ai for ai in cached_args)) and a is not None: cached_args.append(a) - if not all([isinstance(arg, Observable) for arg in cached_args]): + print cached_args + import ipdb;ipdb.set_trace() return self.operation(*args) if cached_args in self.cached_inputs: @@ -46,6 +47,7 @@ class Cacher(object): self.inputs_changed = [any([a is arg for a in args]) or old_ic for args, old_ic in zip(self.cached_inputs, self.inputs_changed)] def reset(self, obj): + [[a.remove_observer(self, self.on_cache_changed) for a in args] for args in self.cached_inputs] [[a.remove_observer(self, self.reset) for a in args] for args in self.cached_inputs] self.cached_inputs = [] self.cached_outputs = []