# Path: pygp/utils/models.py
# class Parameterized(object):
#     """
#     Interface for objects that are parameterized by some set of
#     hyperparameters.
#     """
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def _params(self):
#         """
#         Define the set of parameters for the model. This should return a list
#         of tuples of the form `(name, size, islog)`. If only a 2-tuple is given
#         then islog will be assumed to be `True`.
#         """
#         raise NotImplementedError
# 
#     @abstractmethod
#     def get_hyper(self):
#         """Return a vector of model hyperparameters."""
#         raise NotImplementedError
# 
#     @abstractmethod
#     def set_hyper(self, hyper):
#         """Set the model hyperparameters to the given vector."""
#         raise NotImplementedError
# 
#     def copy(self, hyper=None):
#         """
#         Copy the model. If `hyper` is given use this vector to immediately set
#         the copied model's hyperparameters.
#         """
#         model = copy.deepcopy(self)
#         if hyper is not None:
#             model.set_hyper(hyper)
#         return model


from abc import abstractmethod
from ..utils.models import Parameterized
"""
Definition of the kernel interface.
"""

# future imports
from __future__ import division
from __future__ import absolute_import
from __future__ import print_function

# global imports

# local imports

# exported symbols
__all__ = ['Kernel']


### BASE KERNEL INTERFACE #####################################################


# Path: pygp/utils/models.py
# class Parameterized(object):
#     """
#     Interface for objects that are parameterized by some set of
#     hyperparameters.
#     """
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def _params(self):
#         """
#         Define the set of parameters for the model. This should return a list
#         of tuples of the form `(name, size, islog)`. If only a 2-tuple is given
#         then islog will be assumed to be `True`.
#         """
#         raise NotImplementedError
# 
#     @abstractmethod
#     def get_hyper(self):
#         """Return a vector of model hyperparameters."""
#         raise NotImplementedError
# 
#     @abstractmethod
#     def set_hyper(self, hyper):
#         """Set the model hyperparameters to the given vector."""
#         raise NotImplementedError
# 
#     def copy(self, hyper=None):
#         """
#         Copy the model. If `hyper` is given use this vector to immediately set
#         the copied model's hyperparameters.
#         """
#         model = copy.deepcopy(self)
#         if hyper is not None:
#             model.set_hyper(hyper)
#         return model


# Path: pygp/kernels/_base.py
from abc import abstractmethod
from ..utils.models import Parameterized

"""
Definition of the kernel interface.
"""

# future imports
from __future__ import division
from __future__ import absolute_import
from __future__ import print_function

# global imports

# local imports

# exported symbols
__all__ = ['Kernel']


### BASE KERNEL INTERFACE #####################################################


class Kernel(Parameterized):