diff --git a/.travis.yml b/.travis.yml index 51b9ca2b..63fa1c5e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,9 @@ addons: env: - PYTHON_VERSION=2.7 #- PYTHON_VERSION=3.3 - - PYTHON_VERSION=3.4 + #- PYTHON_VERSION=3.4 - PYTHON_VERSION=3.5 + - PYTHON_VERSION=3.6 before_install: - wget https://github.com/mzwiessele/travis_scripts/raw/master/download_miniconda.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 51dfe03e..6b1a8a65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,97 @@ # Changelog +## v1.7.6 (2017-06-19) + +### Fix + +* Appveyor not uploading to testpypi for now. [mzwiessele] + +### Other + +* Bump version: 1.7.5 → 1.7.6. [mzwiessele] + + +## v1.7.5 (2017-06-19) + +### Fix + +* Splitting forecast tests into 3 to circumvent 10 minute stop of travis. [mzwiessele] + +### Other + +* Bump version: 1.7.4 → 1.7.5. [mzwiessele] + + +## v1.7.4 (2017-06-19) + +### Fix + +* Paramz version for parallel optimization fix. [mzwiessele] + +### Other + +* Bump version: 1.7.3 → 1.7.4. [mzwiessele] + + +## v1.7.3 (2017-06-19) + +### Fix + +* Appveyor build failing. [mzwiessele] + +### Other + +* Bump version: 1.7.2 → 1.7.3. [mzwiessele] + + +## v1.7.2 (2017-06-17) + +### Fix + +* Appveyor build python 3.6. [mzwiessele] + +### Other + +* Bump version: 1.7.1 → 1.7.2. [mzwiessele] + + +## v1.7.1 (2017-06-17) + +### Fix + +* Appveyor build python 3.6. [mzwiessele] + +### Other + +* Bump version: 1.7.0 → 1.7.1. [mzwiessele] + + +## v1.7.0 (2017-06-17) + +### Fix + +* Support for 3.5 and higher now that 3.6 is out. [mzwiessele] + +### Other + +* Bump version: 1.6.3 → 1.7.0. [mzwiessele] + + +## v1.6.3 (2017-06-17) + +### Other + +* Bump version: 1.6.2 → 1.6.3. [mzwiessele] + +* Merge pull request #504 from rmcantin/devel. [Max Zwiessele] + +* Fix python 2-3 compatibility. [Ruben Martinez-Cantin] + +* Merge pull request #511 from dirmeier/devel. [Max Zwiessele] + +* Added LICENSE file to MANIFEST.in. [dirmeier] + + ## v1.6.2 (2017-04-12) ### Fix diff --git a/GPy/__version__.py b/GPy/__version__.py index 51bbb3f2..9f0329de 100644 --- a/GPy/__version__.py +++ b/GPy/__version__.py @@ -1 +1 @@ -__version__ = "1.6.2" +__version__ = "1.7.7" diff --git a/GPy/likelihoods/binomial.py b/GPy/likelihoods/binomial.py index f4c63e4a..5e7df1cd 100644 --- a/GPy/likelihoods/binomial.py +++ b/GPy/likelihoods/binomial.py @@ -124,7 +124,7 @@ class Binomial(Likelihood): """ N = Y_metadata['trials'] np.testing.assert_array_equal(N.shape, y.shape) - + Ny = N-y t1 = np.zeros(y.shape) t2 = np.zeros(y.shape) @@ -132,6 +132,7 @@ class Binomial(Likelihood): t2[Ny>0] = -(Ny[Ny>0])/np.square(1.-inv_link_f[Ny>0]) return t1+t2 + def d3logpdf_dlink3(self, inv_link_f, y, Y_metadata=None): """ Third order derivative log-likelihood function at y given inverse link of f w.r.t inverse link of f diff --git a/GPy/testing/gpy_kernels_state_space_tests.py b/GPy/testing/gpy_kernels_state_space_tests.py index f39eb9d0..c06093dd 100644 --- a/GPy/testing/gpy_kernels_state_space_tests.py +++ b/GPy/testing/gpy_kernels_state_space_tests.py @@ -306,11 +306,7 @@ class StateSpaceKernelsTests(np.testing.TestCase): gp_kernel=gp_kernel, mean_compare_decimal=2, var_compare_decimal=2) - def test_forecast(self,): - """ - Test time-series forecasting. - """ - + def test_forecast_regular(self,): # Generate data -> np.random.seed(339) # seed the random number generator #import pdb; pdb.set_trace() @@ -334,37 +330,102 @@ class StateSpaceKernelsTests(np.testing.TestCase): #import pdb; pdb.set_trace() - def get_new_kernels(): - periodic_kernel = GPy.kern.StdPeriodic(1,active_dims=[0,]) - gp_kernel = GPy.kern.Linear(1, active_dims=[0,]) + GPy.kern.Bias(1, active_dims=[0,]) + periodic_kernel - gp_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) - gp_kernel.std_periodic.period.constrain_bounded(0.15, 100) + periodic_kernel = GPy.kern.StdPeriodic(1,active_dims=[0,]) + gp_kernel = GPy.kern.Linear(1, active_dims=[0,]) + GPy.kern.Bias(1, active_dims=[0,]) + periodic_kernel + gp_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + gp_kernel.std_periodic.period.constrain_bounded(0.15, 100) - periodic_kernel = GPy.kern.sde_StdPeriodic(1,active_dims=[0,]) - ss_kernel = GPy.kern.sde_Linear(1,X,active_dims=[0,]) + \ - GPy.kern.sde_Bias(1, active_dims=[0,]) + periodic_kernel + periodic_kernel = GPy.kern.sde_StdPeriodic(1,active_dims=[0,]) + ss_kernel = GPy.kern.sde_Linear(1,X,active_dims=[0,]) + \ + GPy.kern.sde_Bias(1, active_dims=[0,]) + periodic_kernel - ss_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) - ss_kernel.std_periodic.period.constrain_bounded(0.15, 100) + ss_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + ss_kernel.std_periodic.period.constrain_bounded(0.15, 100) - return ss_kernel, gp_kernel - - ss_kernel, gp_kernel = get_new_kernels() self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'regular', use_cython=False, optimize_max_iters=30, check_gradients=True, predict_X=X_test, gp_kernel=gp_kernel, mean_compare_decimal=2, var_compare_decimal=2) + def test_forecast_svd(self,): + # Generate data -> + np.random.seed(339) # seed the random number generator + #import pdb; pdb.set_trace() + (X,Y) = generate_sine_data(x_points=None, sin_period=5.0, sin_ampl=5.0, noise_var=2.0, + plot = False, points_num=100, x_interval = (0, 40), random=True) + + (X1,Y1) = generate_linear_data(x_points=X, tangent=1.0, add_term=20.0, noise_var=0.0, + plot = False, points_num=100, x_interval = (0, 40), random=True) + + Y = Y + Y1 + + X_train = X[X <= 20] + Y_train = Y[X <= 20] + X_test = X[X > 20] + Y_test = Y[X > 20] + + X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1) + X_train.shape = (X_train.shape[0],1); Y_train.shape = (Y_train.shape[0],1) + X_test.shape = (X_test.shape[0],1); Y_test.shape = (Y_test.shape[0],1) + # Generate data <- + + #import pdb; pdb.set_trace() + + periodic_kernel = GPy.kern.StdPeriodic(1,active_dims=[0,]) + gp_kernel = GPy.kern.Linear(1, active_dims=[0,]) + GPy.kern.Bias(1, active_dims=[0,]) + periodic_kernel + gp_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + gp_kernel.std_periodic.period.constrain_bounded(0.15, 100) + + periodic_kernel = GPy.kern.sde_StdPeriodic(1,active_dims=[0,]) + ss_kernel = GPy.kern.sde_Linear(1,X,active_dims=[0,]) + \ + GPy.kern.sde_Bias(1, active_dims=[0,]) + periodic_kernel + + ss_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + ss_kernel.std_periodic.period.constrain_bounded(0.15, 100) - ss_kernel, gp_kernel = get_new_kernels() self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd', use_cython=False, optimize_max_iters=30, check_gradients=False, predict_X=X_test, gp_kernel=gp_kernel, mean_compare_decimal=2, var_compare_decimal=2) - ss_kernel, gp_kernel = get_new_kernels() + def test_forecast_svd_cython(self,): + # Generate data -> + np.random.seed(339) # seed the random number generator + #import pdb; pdb.set_trace() + (X,Y) = generate_sine_data(x_points=None, sin_period=5.0, sin_ampl=5.0, noise_var=2.0, + plot = False, points_num=100, x_interval = (0, 40), random=True) + + (X1,Y1) = generate_linear_data(x_points=X, tangent=1.0, add_term=20.0, noise_var=0.0, + plot = False, points_num=100, x_interval = (0, 40), random=True) + + Y = Y + Y1 + + X_train = X[X <= 20] + Y_train = Y[X <= 20] + X_test = X[X > 20] + Y_test = Y[X > 20] + + X.shape = (X.shape[0],1); Y.shape = (Y.shape[0],1) + X_train.shape = (X_train.shape[0],1); Y_train.shape = (Y_train.shape[0],1) + X_test.shape = (X_test.shape[0],1); Y_test.shape = (Y_test.shape[0],1) + # Generate data <- + + #import pdb; pdb.set_trace() + + periodic_kernel = GPy.kern.StdPeriodic(1,active_dims=[0,]) + gp_kernel = GPy.kern.Linear(1, active_dims=[0,]) + GPy.kern.Bias(1, active_dims=[0,]) + periodic_kernel + gp_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + gp_kernel.std_periodic.period.constrain_bounded(0.15, 100) + + periodic_kernel = GPy.kern.sde_StdPeriodic(1,active_dims=[0,]) + ss_kernel = GPy.kern.sde_Linear(1,X,active_dims=[0,]) + \ + GPy.kern.sde_Bias(1, active_dims=[0,]) + periodic_kernel + + ss_kernel.std_periodic.lengthscale.constrain_bounded(0.25, 1000) + ss_kernel.std_periodic.period.constrain_bounded(0.15, 100) + self.run_for_model(X_train, Y_train, ss_kernel, kalman_filter_type = 'svd', use_cython=True, optimize_max_iters=30, check_gradients=False, predict_X=X_test, diff --git a/GPy/testing/inference_tests.py b/GPy/testing/inference_tests.py index 74ae8c52..816d5488 100644 --- a/GPy/testing/inference_tests.py +++ b/GPy/testing/inference_tests.py @@ -85,6 +85,7 @@ class InferenceGPEP(unittest.TestCase): inference_method=inf, likelihood=lik) K = self.model.kern.K(X) + post_params, ga_approx, cav_params, log_Z_tilde = self.model.inference_method.expectation_propagation(K, ObsAr(Y), lik, None) mu_tilde = ga_approx.v / ga_approx.tau.astype(float) diff --git a/GPy/util/datasets.py b/GPy/util/datasets.py index 6cad1eed..f8fa8239 100644 --- a/GPy/util/datasets.py +++ b/GPy/util/datasets.py @@ -206,7 +206,10 @@ def authorize_download(dataset_name=None): def download_data(dataset_name=None): """Check with the user that the are happy with terms and conditions for the data set, then download it.""" - import itertools + try: + from itertools import zip_longest + except ImportError: + from itertools import izip_longest as zip_longest dr = data_resources[dataset_name] if not authorize_download(dataset_name): @@ -220,8 +223,8 @@ def download_data(dataset_name=None): if 'suffices' in dr: zip_urls += (dr['suffices'], ) else: zip_urls += ([],) - for url, files, save_names, suffices in itertools.zip_longest(*zip_urls, fillvalue=[]): - for f, save_name, suffix in itertools.zip_longest(files, save_names, suffices, fillvalue=None): + for url, files, save_names, suffices in zip_longest(*zip_urls, fillvalue=[]): + for f, save_name, suffix in zip_longest(files, save_names, suffices, fillvalue=None): download_url(os.path.join(url,f), dataset_name, save_name, suffix=suffix) return True diff --git a/MANIFEST.in b/MANIFEST.in index 8e665256..cf220f31 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -16,6 +16,9 @@ recursive-include GPy *.c recursive-include GPy *.h recursive-include GPy *.pyx +# LICENSE +include LICENSE.txt + # Testing #include GPy/testing/baseline/*.png #include GPy/testing/pickle_test.pickle diff --git a/README.md b/README.md index 5a771e1b..ffbf6a34 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ If that is the case, it is best to clean the repo and reinstall. [](http://www.apple.com/osx/) [](https://en.wikipedia.org/wiki/List_of_Linux_distributions) -Python 2.7, 3.4 and higher +Python 2.7, 3.5 and higher ## Citation diff --git a/appveyor.yml b/appveyor.yml index ba454487..73e13280 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,12 +3,14 @@ environment: secure: 8/ZjXFwtd1S7ixd7PJOpptupKKEDhm2da/q3unabJ00= COVERALLS_REPO_TOKEN: secure: d3Luic/ESkGaWnZrvWZTKrzO+xaVwJWaRCEP0F+K/9DQGPSRZsJ/Du5g3s4XF+tS - gpy_version: 1.6.2 + gpy_version: 1.7.7 matrix: - PYTHON_VERSION: 2.7 MINICONDA: C:\Miniconda-x64 - PYTHON_VERSION: 3.5 MINICONDA: C:\Miniconda35-x64 + - PYTHON_VERSION: 3.6 + MINICONDA: C:\Miniconda36-x64 #configuration: # - Debug @@ -62,21 +64,21 @@ deploy_script: - echo test >> %USERPROFILE%\\.pypirc - echo[ - echo [pypi] >> %USERPROFILE%\\.pypirc -- echo username:maxz >> %USERPROFILE%\\.pypirc -- echo password:%pip_access% >> %USERPROFILE%\\.pypirc +- echo username = maxz >> %USERPROFILE%\\.pypirc +- echo password = %pip_access% >> %USERPROFILE%\\.pypirc - echo[ - echo [test] >> %USERPROFILE%\\.pypirc -- echo repository:https://test.pypi.org/legacy/ >> %USERPROFILE%\\.pypirc -- echo username:maxz >> %USERPROFILE%\\.pypirc -- echo password:%pip_access% >> %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 --skip-existing -r test dist/* + If ($env:APPVEYOR_REPO_BRANCH -eq 'devel') { + echo not deploying on devel # twine upload --skip-existing -r test dist/* } - elseif ($env:APPVEYOR_REPO_BRANCH -eq 'deploy') { + ElseIf ($env:APPVEYOR_REPO_BRANCH -eq 'deploy') { twine upload --skip-existing dist/* } - else { + Else { echo not deploying on other branches } diff --git a/setup.cfg b/setup.cfg index a52521d3..15ead644 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.6.2 +current_version = 1.7.7 tag = True commit = True diff --git a/setup.py b/setup.py index 82bb5fc2..55f81762 100644 --- a/setup.py +++ b/setup.py @@ -150,7 +150,7 @@ setup(name = 'GPy', py_modules = ['GPy.__init__'], test_suite = 'GPy.testing', setup_requires = ['numpy>=1.7'], - install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.6.9'], + install_requires = ['numpy>=1.7', 'scipy>=0.16', 'six', 'paramz>=0.7.4'], extras_require = {'docs':['sphinx'], 'optional':['mpi4py', 'ipython>=4.0.0', @@ -169,8 +169,8 @@ setup(name = 'GPy', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX :: Linux', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', 'Framework :: IPython', 'Intended Audience :: Science/Research', 'Intended Audience :: Developers',