# Source code for glimix_core.cov._eye

from numpy import exp, eye, log
from optimix import Function, Scalar

from .._util import format_function

[docs]class EyeCov(Function):
"""
Identity covariance function, K = s·I.

The parameter s is the scale of the matrix.

Example
-------

.. doctest::

>>> from glimix_core.cov import EyeCov
>>>
>>> cov = EyeCov(2)
>>> cov.scale = 2.5
>>> print(cov.value())
[[2.5 0. ]
[0.  2.5]]
>>> print(g['logscale'])
[[2.5 0. ]
[0.  2.5]]
>>> cov.name = "I"
>>> print(cov)
EyeCov(dim=2): I
scale: 2.5

Parameters
----------
dim : int
Matrix dimension, d.
"""

def __init__(self, dim):
"""
Constructor.

Parameters
----------
dim : int
Matrix dimension, d.
"""
self._dim = dim
self._I = eye(dim)
self._logscale = Scalar(0.0)
Function.__init__(self, "EyeCov", logscale=self._logscale)
self._logscale.bounds = (-20.0, +10)

@property
def scale(self):
"""
Scale parameter.
"""
return exp(self._logscale)

@scale.setter
def scale(self, scale):
from numpy_sugar import epsilon

scale = max(scale, epsilon.tiny)
self._logscale.value = log(scale)

@property
def dim(self):
"""
Dimension of the matrix, d.

It corresponds to the number of rows and to the number of columns.
"""
return self._I.shape[0]

[docs]    def value(self):
"""
Covariance matrix.

Returns
-------
K : ndarray
s⋅I, for scale s and a d×d identity matrix I.
"""
return self.scale * self._I