mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-04-30 23:36:23 +02:00
renamed array_core to observable array
This commit is contained in:
parent
c71ee8949c
commit
ef501e4529
5 changed files with 142 additions and 5 deletions
137
GPy/core/parameterization/observable_array.py
Normal file
137
GPy/core/parameterization/observable_array.py
Normal file
|
|
@ -0,0 +1,137 @@
|
||||||
|
# Copyright (c) 2012, GPy authors (see AUTHORS.txt).
|
||||||
|
# Licensed under the BSD 3-clause license (see LICENSE.txt)
|
||||||
|
|
||||||
|
__updated__ = '2014-03-31'
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
from parameter_core import Observable, Pickleable
|
||||||
|
|
||||||
|
class ObsAr(np.ndarray, Pickleable, Observable):
|
||||||
|
"""
|
||||||
|
An ndarray which reports changes to its observers.
|
||||||
|
The observers can add themselves with a callable, which
|
||||||
|
will be called every time this array changes. The callable
|
||||||
|
takes exactly one argument, which is this array itself.
|
||||||
|
"""
|
||||||
|
__array_priority__ = -1 # Never give back ObsAr
|
||||||
|
def __new__(cls, input_array, *a, **kw):
|
||||||
|
if not isinstance(input_array, ObsAr):
|
||||||
|
obj = np.atleast_1d(np.require(input_array, dtype=np.float64, requirements=['W', 'C'])).view(cls)
|
||||||
|
else: obj = input_array
|
||||||
|
#cls.__name__ = "ObsAr" # because of fixed printing of `array` in np printing
|
||||||
|
super(ObsAr, obj).__init__(*a, **kw)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def __array_finalize__(self, obj):
|
||||||
|
# see InfoArray.__array_finalize__ for comments
|
||||||
|
if obj is None: return
|
||||||
|
self._observer_callables_ = getattr(obj, '_observer_callables_', None)
|
||||||
|
|
||||||
|
def __array_wrap__(self, out_arr, context=None):
|
||||||
|
return out_arr.view(np.ndarray)
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
memo = {}
|
||||||
|
memo[id(self)] = self
|
||||||
|
return self.__deepcopy__(memo)
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
s = self.__new__(self.__class__, input_array=self.view(np.ndarray).copy())
|
||||||
|
memo[id(self)] = s
|
||||||
|
import copy
|
||||||
|
s.__dict__.update(copy.deepcopy(self.__dict__, memo))
|
||||||
|
return s
|
||||||
|
|
||||||
|
def __reduce__(self):
|
||||||
|
func, args, state = super(ObsAr, self).__reduce__()
|
||||||
|
return func, args, (state, Pickleable.__getstate__(self))
|
||||||
|
|
||||||
|
def __setstate__(self, state):
|
||||||
|
np.ndarray.__setstate__(self, state[0])
|
||||||
|
Pickleable.__setstate__(self, state[1])
|
||||||
|
|
||||||
|
def __setitem__(self, s, val):
|
||||||
|
super(ObsAr, self).__setitem__(s, val)
|
||||||
|
self.notify_observers()
|
||||||
|
|
||||||
|
def __getslice__(self, start, stop):
|
||||||
|
return self.__getitem__(slice(start, stop))
|
||||||
|
|
||||||
|
def __setslice__(self, start, stop, val):
|
||||||
|
return self.__setitem__(slice(start, stop), val)
|
||||||
|
|
||||||
|
def __ilshift__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__ilshift__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
def __irshift__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__irshift__(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 __ipow__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__ipow__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __ifloordiv__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__ifloordiv__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __isub__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__isub__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __ior__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__ior__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __itruediv__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__itruediv__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __idiv__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__idiv__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __iand__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__iand__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __imod__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__imod__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __iadd__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__iadd__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
|
def __imul__(self, *args, **kwargs):
|
||||||
|
r = np.ndarray.__imul__(self, *args, **kwargs)
|
||||||
|
self.notify_observers()
|
||||||
|
return r
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
import itertools
|
import itertools
|
||||||
import numpy
|
import numpy
|
||||||
from parameter_core import OptimizationHandlable, adjust_name_for_printing
|
from parameter_core import OptimizationHandlable, adjust_name_for_printing
|
||||||
from array_core import ObsAr
|
from observable_array import ObsAr
|
||||||
|
|
||||||
###### printing
|
###### printing
|
||||||
__constraints_name__ = "Constraint"
|
__constraints_name__ = "Constraint"
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,5 @@ from poisson import Poisson
|
||||||
from student_t import StudentT
|
from student_t import StudentT
|
||||||
from likelihood import Likelihood
|
from likelihood import Likelihood
|
||||||
from mixed_noise import MixedNoise
|
from mixed_noise import MixedNoise
|
||||||
from symbolic import Symbolic
|
#from symbolic import Symbolic
|
||||||
from negative_binomial import Negative_binomial
|
#from negative_binomial import Negative_binomial
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import unittest
|
||||||
import GPy
|
import GPy
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from GPy.core.parameterization.parameter_core import HierarchyError
|
from GPy.core.parameterization.parameter_core import HierarchyError
|
||||||
from GPy.core.parameterization.array_core import ObsAr
|
from GPy.core.parameterization.observable_array import ObsAr
|
||||||
|
|
||||||
class ArrayCoreTest(unittest.TestCase):
|
class ArrayCoreTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from GPy.core.parameterization.index_operations import ParameterIndexOperations,
|
||||||
ParameterIndexOperationsView
|
ParameterIndexOperationsView
|
||||||
import tempfile
|
import tempfile
|
||||||
from GPy.core.parameterization.param import Param
|
from GPy.core.parameterization.param import Param
|
||||||
from GPy.core.parameterization.array_core import ObsAr
|
from GPy.core.parameterization.observable_array import ObsAr
|
||||||
from GPy.core.parameterization.priors import Gaussian
|
from GPy.core.parameterization.priors import Gaussian
|
||||||
from GPy.kern._src.rbf import RBF
|
from GPy.kern._src.rbf import RBF
|
||||||
from GPy.kern._src.linear import Linear
|
from GPy.kern._src.linear import Linear
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue