diff --git a/GPy/core/parameterization/array_core.py b/GPy/core/parameterization/array_core.py index 59e3572a..6ece51e9 100644 --- a/GPy/core/parameterization/array_core.py +++ b/GPy/core/parameterization/array_core.py @@ -6,19 +6,6 @@ __updated__ = '2013-12-16' import numpy as np from parameter_core import Observable -class ListArray(np.ndarray): - """ - ndarray which can be stored in lists and checked if it is in. - WARNING: This overrides the functionality of x==y!!! - Use numpy.equal(x,y) for element-wise equality testing. - """ - - def __new__(cls, input_array): - obj = np.asanyarray(input_array).view(cls) - return obj - #def __eq__(self, other): - # return other is self - class ParamList(list): def __contains__(self, other): @@ -29,7 +16,7 @@ class ParamList(list): pass -class ObservableArray(ListArray, Observable): +class ObservableArray(np.ndarray, Observable): """ An ndarray which reports changes to its observers. The observers can add themselves with a callable, which @@ -46,6 +33,7 @@ class ObservableArray(ListArray, Observable): # see InfoArray.__array_finalize__ for comments if obj is None: return self._observers_ = getattr(obj, '_observers_', None) + def __setitem__(self, s, val, update=True): super(ObservableArray, self).__setitem__(s, val) if update: @@ -54,8 +42,10 @@ class ObservableArray(ListArray, Observable): return self.__getitem__(slice(start, stop)) def __setslice__(self, start, stop, val): return self.__setitem__(slice(start, stop), val) + def __copy__(self, *args): return ObservableArray(self.view(np.ndarray).copy()) + def copy(self, *args): return self.__copy__(*args) @@ -69,25 +59,21 @@ class ObservableArray(ListArray, Observable): self._notify_observers() return r - def __irshift__(self, *args, **kwargs): r = np.ndarray.__irshift__(self, *args, **kwargs) self._notify_observers() return r - def __rrshift__(self, *args, **kwargs): r = np.ndarray.__rrshift__(self, *args, **kwargs) self._notify_observers() return r - def __ixor__(self, *args, **kwargs): r = np.ndarray.__ixor__(self, *args, **kwargs) self._notify_observers() return r - def __rxor__(self, *args, **kwargs): r = np.ndarray.__rxor__(self, *args, **kwargs) self._notify_observers() diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index 9e4195e9..0f0ef667 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -46,6 +46,7 @@ class Param(ObservableArray, Constrainable, Gradcheckable): """ __array_priority__ = -1 # Never give back Param _fixes_ = None + _parameters_ = [] def __new__(cls, name, input_array, default_constraint=None): obj = numpy.atleast_1d(super(Param, cls).__new__(cls, input_array=input_array)) obj._current_slice_ = (slice(obj.shape[0]),) @@ -144,9 +145,6 @@ class Param(ObservableArray, Constrainable, Gradcheckable): # from_name = self.name # self.name = new_name # self._direct_parent_._name_changed(self, from_name) - @property - def _parameters_(self): - return [] def _collect_gradient(self, target): target[:] = self.gradient.flat #===========================================================================