diff --git a/.travis.yml b/.travis.yml index cfa0d351..9a738047 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ addons: env: - PYTHON_VERSION=2.7 - - PYTHON_VERSION=3.3 + #- PYTHON_VERSION=3.3 - PYTHON_VERSION=3.4 - PYTHON_VERSION=3.5 @@ -61,7 +61,6 @@ deploy: password: secure: "vMEOlP7DQhFJ7hQAKtKC5hrJXFl5BkUt4nXdosWWiw//Kg8E+PPLg88XPI2gqIosir9wwgtbSBBbbwCxkM6uxRNMpoNR8Ixyv9fmSXp4rLl7bbBY768W7IRXKIBjpuEy2brQjoT+CwDDSzUkckHvuUjJDNRvUv8ab4P/qYO1LG4=" on: - tags: true branch: deploy distributions: $DIST skip_cleanup: true diff --git a/GPy/__version__.py b/GPy/__version__.py index 39e0411d..c68196d1 100644 --- a/GPy/__version__.py +++ b/GPy/__version__.py @@ -1 +1 @@ -__version__ = "1.0.9" +__version__ = "1.2.0" diff --git a/GPy/mappings/__init__.py b/GPy/mappings/__init__.py index 39568c9f..73390b87 100644 --- a/GPy/mappings/__init__.py +++ b/GPy/mappings/__init__.py @@ -7,4 +7,6 @@ from .mlp import MLP from .additive import Additive from .compound import Compound from .constant import Constant +from .identity import Identity +from .piecewise_linear import PiecewiseLinear diff --git a/GPy/models/gp_coregionalized_regression.py b/GPy/models/gp_coregionalized_regression.py index c8ee5f67..66edb8d7 100644 --- a/GPy/models/gp_coregionalized_regression.py +++ b/GPy/models/gp_coregionalized_regression.py @@ -17,7 +17,7 @@ class GPCoregionalizedRegression(GP): :type X_list: list of numpy arrays :param Y_list: list of observed values related to the different noise models :type Y_list: list of numpy arrays - :param kernel: a GPy kernel, defaults to RBF ** Coregionalized + :param kernel: a GPy kernel ** Coregionalized, defaults to RBF ** Coregionalized :type kernel: None | GPy.kernel defaults :likelihoods_list: a list of likelihoods, defaults to list of Gaussian likelihoods :type likelihoods_list: None | a list GPy.likelihoods diff --git a/GPy/models/sparse_gp_coregionalized_regression.py b/GPy/models/sparse_gp_coregionalized_regression.py index 2997993e..88841891 100644 --- a/GPy/models/sparse_gp_coregionalized_regression.py +++ b/GPy/models/sparse_gp_coregionalized_regression.py @@ -19,7 +19,7 @@ class SparseGPCoregionalizedRegression(SparseGP): :type Y_list: list of numpy arrays :param Z_list: list of inducing inputs (optional) :type Z_list: empty list | list of numpy arrays - :param kernel: a GPy kernel, defaults to RBF ** Coregionalized + :param kernel: a GPy kernel ** Coregionalized, defaults to RBF ** Coregionalized :type kernel: None | GPy.kernel defaults :likelihoods_list: a list of likelihoods, defaults to list of Gaussian likelihoods :type likelihoods_list: None | a list GPy.likelihoods diff --git a/GPy/plotting/matplot_dep/variational_plots.py b/GPy/plotting/matplot_dep/variational_plots.py index ca8b1e86..3f20efeb 100644 --- a/GPy/plotting/matplot_dep/variational_plots.py +++ b/GPy/plotting/matplot_dep/variational_plots.py @@ -34,7 +34,7 @@ def plot(parameterized, fignum=None, ax=None, colors=None, figsize=(12, 6)): else: raise ValueError("Need one ax per latent dimension input_dim") bg_lines.append(a.plot(means, c='k', alpha=.3)) - lines.extend(a.plot(x, means.T[i], c=colors.next(), label=r"$\mathbf{{X_{{{}}}}}$".format(i))) + lines.extend(a.plot(x, means.T[i], c=next(colors), label=r"$\mathbf{{X_{{{}}}}}$".format(i))) fills.append(a.fill_between(x, means.T[i] - 2 * np.sqrt(variances.T[i]), means.T[i] + 2 * np.sqrt(variances.T[i]), @@ -86,7 +86,7 @@ def plot_SpikeSlab(parameterized, fignum=None, ax=None, colors=None, side_by_sid # mean and variance plot a = fig.add_subplot(*sub1) a.plot(means, c='k', alpha=.3) - plots.extend(a.plot(x, means.T[i], c=colors.next(), label=r"$\mathbf{{X_{{{}}}}}$".format(i))) + plots.extend(a.plot(x, means.T[i], c=next(colors), label=r"$\mathbf{{X_{{{}}}}}$".format(i))) a.fill_between(x, means.T[i] - 2 * np.sqrt(variances.T[i]), means.T[i] + 2 * np.sqrt(variances.T[i]), diff --git a/GPy/testing/minibatch_tests.py b/GPy/testing/minibatch_tests.py index fbf12939..09bcc1dc 100644 --- a/GPy/testing/minibatch_tests.py +++ b/GPy/testing/minibatch_tests.py @@ -127,28 +127,32 @@ class SparseGPMinibatchTest(unittest.TestCase): def test_sparsegp_init(self): # Test if the different implementations give the exact same likelihood as the full model. # All of the following settings should give the same likelihood and gradients as the full model: - np.random.seed(1234) - Z = self.X[np.random.choice(self.X.shape[0], replace=False, size=10)].copy() - Q = Z.shape[1] - m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=True, stochastic=False) - assert(m.checkgrad()) - m.optimize('adadelta', max_iters=10) - assert(m.checkgrad()) - - m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=True, stochastic=True) - assert(m.checkgrad()) - m.optimize('rprop', max_iters=10) - assert(m.checkgrad()) - - m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=False, stochastic=False) - assert(m.checkgrad()) - m.optimize('rprop', max_iters=10) - assert(m.checkgrad()) - - m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=False, stochastic=True) - assert(m.checkgrad()) - m.optimize('adadelta', max_iters=10) - assert(m.checkgrad()) + try: + np.random.seed(1234) + Z = self.X[np.random.choice(self.X.shape[0], replace=False, size=10)].copy() + Q = Z.shape[1] + m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=True, stochastic=False) + assert(m.checkgrad()) + m.optimize('adadelta', max_iters=10) + assert(m.checkgrad()) + + m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=True, stochastic=True) + assert(m.checkgrad()) + m.optimize('rprop', max_iters=10) + assert(m.checkgrad()) + + m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=False, stochastic=False) + assert(m.checkgrad()) + m.optimize('rprop', max_iters=10) + assert(m.checkgrad()) + + m = GPy.models.sparse_gp_minibatch.SparseGPMiniBatch(self.X, self.Y, Z, GPy.kern.RBF(Q)+GPy.kern.Matern32(Q)+GPy.kern.Bias(Q), GPy.likelihoods.Gaussian(), missing_data=False, stochastic=True) + assert(m.checkgrad()) + m.optimize('adadelta', max_iters=10) + assert(m.checkgrad()) + except ImportError: + from nose import SkipTest + raise SkipTest('climin not installed, skipping stochastic gradients') def test_predict_missing_data(self): m = GPy.models.bayesian_gplvm_minibatch.BayesianGPLVMMiniBatch(self.Y, self.Q, X_variance=False, missing_data=True, stochastic=True, batchsize=self.Y.shape[1]) diff --git a/GPy/util/config.py b/GPy/util/config.py index e47848a8..53675efe 100644 --- a/GPy/util/config.py +++ b/GPy/util/config.py @@ -12,7 +12,7 @@ except ImportError: import configparser config = configparser.ConfigParser() from configparser import NoOptionError - + # This is the default configuration file that always needs to be present. default_file = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'defaults.cfg')) @@ -23,7 +23,7 @@ local_file = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'in # This specifies configurations specific to the user (it is found in the user home directory) home = os.getenv('HOME') or os.getenv('USERPROFILE') -user_file = os.path.join(home,'.config','gpy', 'user.cfg') +user_file = os.path.join(home,'.config','GPy', 'user.cfg') # Read in the given files. config.readfp(open(default_file)) diff --git a/GPy/util/pca.py b/GPy/util/pca.py index edb8bb7d..3bfcacd9 100644 --- a/GPy/util/pca.py +++ b/GPy/util/pca.py @@ -131,7 +131,7 @@ class PCA(object): kwargs.update(dict(s=s)) plots = list() for i, l in enumerate(ulabels): - kwargs.update(dict(color=colors.next(), marker=marker[i % len(marker)])) + kwargs.update(dict(color=next(colors), marker=marker[i % len(marker)])) plots.append(ax.scatter(*X_[labels == l, :].T, label=str(l), **kwargs)) ax.set_xlabel(r"PC$_1$") ax.set_ylabel(r"PC$_2$") diff --git a/README.md b/README.md index 5b556bfd..4df7bbe1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ The Gaussian processes framework in Python. * Travis-CI [unit-tests](https://travis-ci.org/SheffieldML/GPy) * [![licence](https://img.shields.io/badge/licence-BSD-blue.svg)](http://opensource.org/licenses/BSD-3-Clause) -[![develstat](https://travis-ci.org/SheffieldML/GPy.svg?branch=devel)](https://travis-ci.org/SheffieldML/GPy) [![covdevel](http://codecov.io/github/SheffieldML/GPy/coverage.svg?branch=devel)](http://codecov.io/github/SheffieldML/GPy?branch=devel) [![Research software impact](http://depsy.org/api/package/pypi/GPy/badge.svg)](http://depsy.org/package/python/GPy) [![Code Health](https://landscape.io/github/SheffieldML/GPy/devel/landscape.svg?style=flat)](https://landscape.io/github/SheffieldML/GPy/devel) +[![develstat](https://travis-ci.org/SheffieldML/GPy.svg?branch=devel)](https://travis-ci.org/SheffieldML/GPy) [![appveyor](https://ci.appveyor.com/api/projects/status/662o6tha09m2jix3/branch/deploy?svg=true)](https://ci.appveyor.com/project/mzwiessele/gpy/branch/deploy) [![covdevel](http://codecov.io/github/SheffieldML/GPy/coverage.svg?branch=devel)](http://codecov.io/github/SheffieldML/GPy?branch=devel) [![Research software impact](http://depsy.org/api/package/pypi/GPy/badge.svg)](http://depsy.org/package/python/GPy) [![Code Health](https://landscape.io/github/SheffieldML/GPy/devel/landscape.svg?style=flat)](https://landscape.io/github/SheffieldML/GPy/devel) ## Updated Structure diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..50e3d3fc --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,89 @@ +environment: + pip_access: + secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00= + gpy_version: 1.2.0 + matrix: + - PYTHON_VERSION: 2.7 + MINICONDA: C:\Miniconda-x64 + - PYTHON_VERSION: 3.5 + MINICONDA: C:\Miniconda35-x64 + +#configuration: +# - Debug +# - Release + +install: + - "set PATH=%MINICONDA%;%MINICONDA%\\Scripts;%PATH%" + - conda config --set always_yes yes --set changeps1 no + - conda update -q conda + - conda info -a + - "conda create -q -n build-environment python=%PYTHON_VERSION% numpy scipy matplotlib" + - activate build-environment + # We need wheel installed to build wheels + - python -m pip install wheel + # GPy needs paramz + - python -m pip install paramz + - python -m pip install nose-show-skipped + - python -m pip install coverage + - python -m pip install codecov + - python -m pip install twine + - "python setup.py develop" + +build: off + +test_script: + # Put your test command here. + # If you don't need to build C extensions on 64-bit Python 3.3 or 3.4, + # you can remove "build.cmd" from the front of the command, as it's + # only needed to support those cases. + # Note that you must use the environment variable %PYTHON% to refer to + # the interpreter you're using - Appveyor does not do anything special + # to put the Python evrsion you want to use on PATH. + #- "build.cmd %PYTHON%\\python.exe setup.py test" + - "coverage run travis_tests.py" + +after_test: + # This step builds your wheels. + - "python setup.py bdist_wheel bdist_wininst" + - codecov + +artifacts: + # bdist_wheel puts your built wheel in the dist directory + - path: dist\* + + +deploy_script: +- echo [distutils] > %USERPROFILE%\\.pypirc +- echo index-servers = >> %USERPROFILE%\\.pypirc +- echo pypi >> %USERPROFILE%\\.pypirc +- echo test >> %USERPROFILE%\\.pypirc +- echo[ +- echo [pypi] >> %USERPROFILE%\\.pypirc +- echo username:maxz >> %USERPROFILE%\\.pypirc +- echo password:%pip_access% >> %USERPROFILE%\\.pypirc +- echo[ +- echo [test] >> %USERPROFILE%\\.pypirc +- echo repository:https://testpypi.python.org/pypi >> %USERPROFILE%\\.pypirc +- echo username:maxz >> %USERPROFILE%\\.pypirc +- echo password:%pip_access% >> %USERPROFILE%\\.pypirc +- ps: >- + if ($env:APPVEYOR_REPO_BRANCH -eq 'devel') { + twine upload -r test dist/* + } + elseif ($env:APPVEYOR_REPO_BRANCH -eq 'deploy') { + twine upload dist/* + } + else { + echo not deploying on other branches + } + +# deploy: +# - provider: GitHub +# release: GPy-v$(gpy_version) +# description: 'GPy windows install' +# artifact: dist/*.exe # upload wininst to GitHub +# draft: false +# prerelease: false +# on: +# branch: deploy # release from deploy branch only +# appveyor_repo_tag: true # deploy on tag push only \ No newline at end of file diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..a8a1ba08 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,24 @@ +codecov: + branch: devel + +coverage: + precision: 2 + round: down + range: "40...100" + + status: + project: + default: + target: auto + if_no_uploads: error + + patch: + default: + if_no_uploads: error + + changes: true + + +comment: + layout: "header, diff, changes, suggestions" + behavior: default \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 0f00211e..d2f03e2c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,12 +1,11 @@ [bumpversion] -current_version = 1.0.9 +current_version = 1.2.0 tag = False commit = True [bumpversion:file:GPy/__version__.py] -[bdist_wheel] -universal = 1 +[bumpversion:file:appveyor.yml] [upload_docs] upload-dir = doc/build/html diff --git a/setup.py b/setup.py index 18e0c7d8..c8d20add 100644 --- a/setup.py +++ b/setup.py @@ -59,14 +59,7 @@ def read_to_rst(fname): desc = """ -- `GPy homepage `_ -- `Tutorial notebooks `_ -- `User mailing-list `_ -- `Developer documentation `_ -- `Travis-CI unit-tests `_ -- `License `_ - -For full description and installation instructions please refer to the github page. +Please refer to the github homepage for detailed instructions on installation and usage. """ @@ -116,6 +109,7 @@ setup(name = 'GPy', author = read_to_rst('AUTHORS.txt'), author_email = "gpy.authors@gmail.com", description = ("The Gaussian Process Toolbox"), + long_description = desc, license = "BSD 3-clause", keywords = "machine-learning gaussian-processes kernels", url = "http://sheffieldml.github.com/GPy/", @@ -154,8 +148,7 @@ setup(name = 'GPy', include_package_data = True, py_modules = ['GPy.__init__'], test_suite = 'GPy.testing', - long_description=desc, - install_requires=['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.5.2'], + install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.5.2'], extras_require = {'docs':['sphinx'], 'optional':['mpi4py', 'ipython>=4.0.0',