From e5587cf234684d095516a5881f4d829deceb2cd2 Mon Sep 17 00:00:00 2001 From: Mike Croucher Date: Fri, 13 Mar 2015 14:43:49 +0000 Subject: [PATCH] Used 'six' to support Py3 and Py2 simultaneously --- GPy/core/parameterization/parameterized.py | 10 ++++++---- GPy/kern/_src/kern.py | 11 ++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/GPy/core/parameterization/parameterized.py b/GPy/core/parameterization/parameterized.py index 27ecbc1c..691bf4a7 100644 --- a/GPy/core/parameterization/parameterized.py +++ b/GPy/core/parameterization/parameterized.py @@ -1,7 +1,7 @@ # Copyright (c) 2014, Max Zwiessele, James Hensman # Licensed under the BSD 3-clause license (see LICENSE.txt) - +import six # For metaclass support in Python 2 and 3 simultaneously import numpy; np = numpy import itertools from re import compile, _pattern_type @@ -27,7 +27,8 @@ class ParametersChangedMeta(type): self.parameters_changed() return self -class Parameterized(Parameterizable,metaclass=ParametersChangedMeta): +@six.add_metaclass(ParametersChangedMeta) +class Parameterized(Parameterizable): """ Parameterized class @@ -73,8 +74,9 @@ class Parameterized(Parameterizable,metaclass=ParametersChangedMeta): # Metaclass for parameters changed after init. # This makes sure, that parameters changed will always be called after __init__ # **Never** call parameters_changed() yourself - #This is ignored in Python 3 -- you need to put the meta class in the - __metaclass__ = ParametersChangedMeta + #This is ignored in Python 3 -- you need to put the meta class in the function definition. + #__metaclass__ = ParametersChangedMeta + #The six module is used to support both Python 2 and 3 simultaneously #=========================================================================== def __init__(self, name=None, parameters=[], *a, **kw): super(Parameterized, self).__init__(name=name, *a, **kw) diff --git a/GPy/kern/_src/kern.py b/GPy/kern/_src/kern.py index 2e8ebcb0..e63ddad4 100644 --- a/GPy/kern/_src/kern.py +++ b/GPy/kern/_src/kern.py @@ -8,15 +8,16 @@ from .kernel_slice_operations import KernCallsViaSlicerMeta from ...util.caching import Cache_this from GPy.core.parameterization.observable_array import ObsAr from functools import reduce +import six - - -class Kern(Parameterized,metaclass=KernCallsViaSlicerMeta): +@six.add_metaclass(KernCallsViaSlicerMeta) +class Kern(Parameterized): #=========================================================================== # This adds input slice support. The rather ugly code for slicing can be # found in kernel_slice_operations - # __mataclass__ is ignored in Python 3 - needs to be put in the function definiton - __metaclass__ = KernCallsViaSlicerMeta + # __meataclass__ is ignored in Python 3 - needs to be put in the function definiton + #__metaclass__ = KernCallsViaSlicerMeta + #Here, we use the Python module six to support Py3 and Py2 simultaneously #=========================================================================== _support_GPU=False def __init__(self, input_dim, active_dims, name, useGPU=False, *a, **kw):