Skip to content

Commit

Permalink
Fix/update demos (#238)
Browse files Browse the repository at this point in the history
* v0.7.0 (#232)

* rename cov_gpu to kernel, and refactor with class structure

* preparatory work for adding Matern52 kernel

* add C++ test for Matern kernel

* first implementation of Matern52 kernel

* minor corrections to docstrings

* implement deriv wrt x for Matern52 kernel

* add deriv wrt theta for Matern52 kernel

* refactor - put typedefs into types.hpp and more utility functions into utils

* add kernel functions to replicate python functionality via pybind11

* rename cov_gpu to kernel

* fix kernel check in GPU test

* add pybind11 interface for Matern52Kernel

* revert to using Python kernels for gp.kernel interface in GaussianProcessGPU (and document this)

* only import kernel_type from LibGPGPU if gpu is available (fix Travis test)

* first implementation of const mean function

* first implementation of const mean function

* implement const mean function for predict

* add logpost_deriv for mean function

* add fixed mean and polynomial mean to C++

* add fixed mean and polynomial mean to C++

* add fixed mean and polynomial mean to C++

* refactor logic around meanfunc in GaussianProcessGPU and add function to parse formula and create python-wrapped C++ object

* add test for C++ implementation of mean function

* pass BaseMeanFunc from python to C++, so get rid of no-longer-needed meanfunc_type

* add more useful exception messages

* use mat52_ prefix for Matern52 kernel rather than just mat_

* change import in test_GPUMeanFunction to not give errors if HPU unavailable

* rename gpu_basic to test_gpu_basic

* rename gpu_kernel to test_gpu_kernel

* rename gpu_test_utils to test_gpu_utils

* rename gpu_cholesky to test_gpu_cholesky

* add basic test for nlopt minimization

* rename gpu_meanfunc.cu to test_meanfunc.cu

* start implementing GP_MAP fitting in C++

* C++ test for DenseGP_GPU

* modify logic about when to refit in logpost getter

* cache current theta in C++ class

* further steps towards C++ implementation of fit_GP_MAP

* almost-working C++ fitting with nlopt

* use dlib optimizer for fitting

* use dlib optimizer for fitting

* refactor, store nugget value in C++ rather than python

* refactor, store nugget value in C++ rather than python

* use C++ fitting for GPU implementation

* use raw strings for regex, and add property for current_logpost

* set nugget type in C++ class when instantiating python GaussianProcessGPU class

* tweak fitting tests for GPU implementation

* add function to find dlib in setup.py

* basic implementation of parameters object with tests

* updated parameters object to allow data to be none

* make ZeroMeanFunc the default for DenseGP_GPU

* modified GP class to use GPParams class, plust additional unit tests and fixes

* fixed up parameter changes in SequentialDesign

* fixed MOGP class and fitting routines plus tests for new params class

* tweaked transformations to be correct and added docstrings

* added params class to API docs

* fixed up setup.py to correct error due to setuptools change (#189)

* reset version number in setup.py for starting work on next release (#190)

* Fix merge conflicts from devel-to-master PR (#187)

* Merge updated devel branch into master (#12)

* Fixed tsunami benchmarks to use numpy for loading data and added more detailed readme file

* added files for sphinx documentation and made some docstring corrections for autodoc compatability

* fixed minor formatting issues in readme headings

* added files needed for Travis CI

* fixed tests to be slightly more tolerant with numerical comparisons

* removed python 3.7 from Travis and decreased tolerance on minimization algorithms in GP unit tests

* additional increase in tolerance for GP unit tests for minimization

* added version number in setup.py file that is automatically found in package and docs

* need to install package in travis to get version number to load

* implemented fix to correctly compute kernel derivatives with respect to inputs

* added unit tests for input derivatives of kernel

* added docstrings for new kernel functions

* incremented version number for bug fix

* reformatted kernel tests to shorten lines and a few other things

* V0.2.0rc (#64)

* Add dimension reduction functionality (python impl. of gKDR)

* Tweaks to dimension reduction test

* Add documentation for DimensionReduction

* Add/fix some tests for DimensionReduction

* Fix test (DimensionReduction)

* Docstring -> raw string to fix invalid escape sequence warning

* Add sanity checks for parameters passed to DimensionReduction

* Fix assertion in DimensionReduction constructor

* Fix assertion in DimensionReduction constructor

* Test: optimize structural dimension

* First attempt at tuning the structural dimension (kdr)

* Make GaussianProcess objects callable (for prediction)

* Add 'train_model' interface to GaussianProcess

* DimensionReduction tweak to example

* Introduce X_scale/Y_scale parameters in gKDR kernel (DimensionReduction)

* Fix whitespace

* DimensionReduction: use specialized Hermitian eigensolver

* Tune parameters (structural dimension and kernel lengthscales) within gKDR

- rename tune_structural_dimension -> tune_parameters
- documentation
- improved optimization routine

* Improved tests for parameter tuning (gKDR)

* Tweak to test (DimensionReduction)

* Whitespace cleanup

* Correct naming of variable (DimensionReduction)

* Factor out internal loss function from gKDR.tune_parameters

* Use a smaller test example to reduce test runtime

* MCMC (#33)

* added separate functions to calculated squared exponential kernel

* added matern 5/2 covariance function

* put kernel computations into a separate function and removed conjugate gradient based unit test that always gave problems

* moved kernel functions and tests to separate files

* added function to compute gradient of the squared exponential kernel

* changed GP class to use derivative function

* added derivatives for matern 5/2 kernel

* quick and dirty modification to GP in order to use kernel functions

* cleaned up distance calculation to use standardized euclidean distance

* modified fast GP in MICE code to use kernel interface

* made correction to meaning of nugget parameter for MICE candidate GP to be relative to current variance

* fixed minor issues in MICE design to allow for zero samples and ensuring that parameter values are correctly set

* updated MICE benchmark details

* cosmetic tweaks to MICE benchmark

* full hessian implementation in kernel functions

* refactored kernel functions into objects

* implemented Hessian computation into GP class

* Documented base kernel class

* Documented derived kernel classes

* added documentation pages for kernels

* corrected documentation to include newly implemented classes and fixed some old bugs

* renamed run_init_design to be consistent with other methods that use *_initial_design

* made minor change in MICEFastGP documentation

* broke up prediction methods into single and multiple parameter sets, plus some other changes needed to accomodate them

* added routine to compute local covariance matrix from hessian

* implemented approximate normal hyperparameter sampling

* added utility functions for MCMC sampling

* fully implemented basic MCMC sampler

* working MCMC implementation with full set of tests

* fixed a few bugs in GP and MCMC implmentation

* fixed bug in variance prediction where roundoff error can cause negative variance

* added docstrings for MCMC routines

* added documentation for MCMC-related methods and code additions

* created benchmark for MCMC sampling and added documentation pages for it

* added information on MCMC benchmark to readme

* added additional pages to documentation for MCMC sampling

* removed renamed mcmc benchmark file

* fixed MCMC docstring in GP class

* Fix whitespace in Makefile

* Forward kwargs (gKDR._compute_loss); correct number of cross-validation folds

* Add benchmark for gKDR

* Wrap long lines in docstrings

* Versioning (#38)

* added code needed for versioning to devel branch

* forgot to modify setup.py file

* corrected line accidentally deleted from __init__.py

* added prerelease number to devel branch to track commits on devel

* corrected comments in conf.py to reflect full release numbering

* added simple demos for GP and MICE (#46)

* added simple demos for GP and MICE

* incremented prerelease number for merge

* History Matching (#39)

* initial commit of history matching class and benchmark with minor tweaks

* broke benchmark and sanity checks into two files for history matching

* reindented code to use 4 spaces

* added unit tests and some bug fixes for HistoryMatching

* added tests for implausability plus some other checks and bug fixes in HistoryMatching

* fixed misspelling of implausibility

* changed file name for benchmark in makefile

* fixed documentation in HistoryMatching class to be consistent with others

* improved documentation, cleaned up code, added a few unit tests for HistoryMatching

* fixed some docstring formatting and base rst file for HistoryMatching

* full implementation of history matching with unit tests and documentation

* simplified model discrepancy based on discussion with Danny

* fixes to history matching file and tests

* fixed some comparisons with None in SequentialDesign

* broke up long test for Hessian into parts

* incremented prerelease for history match merge

* Feature/mucmtoolkit (#54)

* added toolkit with converted pages and images

* incremented version number

* Feature/mucmtoolkit (#55)

* fixed bug in documentation to display methods

* version number change for corrected PR

* merge input derivative bugfix into devel (#61)

* Fix/cachefactmat (#62)

* corrected GP class to cache factorized matrix rather than inverse plus cleaned up a few unneeded internal variables

* incremented prerelease version number

* missed a line that should have been deleted

* added test to confirm that variance predictions are stable

* fixed solve routines to use cho_solve in scipy

* Fix/toolkitcorr (#63)

* toolkit proofreading and corrections

* continuing updates of toolkit pages

* edits to toolkit pages

* finished corrections up through meta section

* updated toolkit threads section

* updates to proc section of toolkit

* incremented prerelease version number

* modified version for release v0.2.0

* Adjust the paper references in DimensionReduction.py

* Update paper reference in documentation

* V0.3.0rc (#125)

* Add dimension reduction functionality (python impl. of gKDR)

* Tweaks to dimension reduction test

* Add documentation for DimensionReduction

* Add/fix some tests for DimensionReduction

* Fix test (DimensionReduction)

* Docstring -> raw string to fix invalid escape sequence warning

* Add sanity checks for parameters passed to DimensionReduction

* Fix assertion in DimensionReduction constructor

* Fix assertion in DimensionReduction constructor

* Test: optimize structural dimension

* First attempt at tuning the structural dimension (kdr)

* Make GaussianProcess objects callable (for prediction)

* Add 'train_model' interface to GaussianProcess

* DimensionReduction tweak to example

* Introduce X_scale/Y_scale parameters in gKDR kernel (DimensionReduction)

* Fix whitespace

* DimensionReduction: use specialized Hermitian eigensolver

* Tune parameters (structural dimension and kernel lengthscales) within gKDR

- rename tune_structural_dimension -> tune_parameters
- documentation
- improved optimization routine

* Improved tests for parameter tuning (gKDR)

* Tweak to test (DimensionReduction)

* Whitespace cleanup

* Correct naming of variable (DimensionReduction)

* Factor out internal loss function from gKDR.tune_parameters

* Use a smaller test example to reduce test runtime

* MCMC (#33)

* added separate functions to calculated squared exponential kernel

* added matern 5/2 covariance function

* put kernel computations into a separate function and removed conjugate gradient based unit test that always gave problems

* moved kernel functions and tests to separate files

* added function to compute gradient of the squared exponential kernel

* changed GP class to use derivative function

* added derivatives for matern 5/2 kernel

* quick and dirty modification to GP in order to use kernel functions

* cleaned up distance calculation to use standardized euclidean distance

* modified fast GP in MICE code to use kernel interface

* made correction to meaning of nugget parameter for MICE candidate GP to be relative to current variance

* fixed minor issues in MICE design to allow for zero samples and ensuring that parameter values are correctly set

* updated MICE benchmark details

* cosmetic tweaks to MICE benchmark

* full hessian implementation in kernel functions

* refactored kernel functions into objects

* implemented Hessian computation into GP class

* Documented base kernel class

* Documented derived kernel classes

* added documentation pages for kernels

* corrected documentation to include newly implemented classes and fixed some old bugs

* renamed run_init_design to be consistent with other methods that use *_initial_design

* made minor change in MICEFastGP documentation

* broke up prediction methods into single and multiple parameter sets, plus some other changes needed to accomodate them

* added routine to compute local covariance matrix from hessian

* implemented approximate normal hyperparameter sampling

* added utility functions for MCMC sampling

* fully implemented basic MCMC sampler

* working MCMC implementation with full set of tests

* fixed a few bugs in GP and MCMC implmentation

* fixed bug in variance prediction where roundoff error can cause negative variance

* added docstrings for MCMC routines

* added documentation for MCMC-related methods and code additions

* created benchmark for MCMC sampling and added documentation pages for it

* added information on MCMC benchmark to readme

* added additional pages to documentation for MCMC sampling

* removed renamed mcmc benchmark file

* fixed MCMC docstring in GP class

* Fix whitespace in Makefile

* Forward kwargs (gKDR._compute_loss); correct number of cross-validation folds

* Add benchmark for gKDR

* Wrap long lines in docstrings

* Versioning (#38)

* added code needed for versioning to devel branch

* forgot to modify setup.py file

* corrected line accidentally deleted from __init__.py

* added prerelease number to devel branch to track commits on devel

* corrected comments in conf.py to reflect full release numbering

* added simple demos for GP and MICE (#46)

* added simple demos for GP and MICE

* incremented prerelease number for merge

* History Matching (#39)

* initial commit of history matching class and benchmark with minor tweaks

* broke benchmark and sanity checks into two files for history matching

* reindented code to use 4 spaces

* added unit tests and some bug fixes for HistoryMatching

* added tests for implausability plus some other checks and bug fixes in HistoryMatching

* fixed misspelling of implausibility

* changed file name for benchmark in makefile

* fixed documentation in HistoryMatching class to be consistent with others

* improved documentation, cleaned up code, added a few unit tests for HistoryMatching

* fixed some docstring formatting and base rst file for HistoryMatching

* full implementation of history matching with unit tests and documentation

* simplified model discrepancy based on discussion with Danny

* fixes to history matching file and tests

* fixed some comparisons with None in SequentialDesign

* broke up long test for Hessian into parts

* incremented prerelease for history match merge

* Feature/mucmtoolkit (#54)

* added toolkit with converted pages and images

* incremented version number

* Feature/mucmtoolkit (#55)

* fixed bug in documentation to display methods

* version number change for corrected PR

* merge input derivative bugfix into devel (#61)

* Fix/cachefactmat (#62)

* corrected GP class to cache factorized matrix rather than inverse plus cleaned up a few unneeded internal variables

* incremented prerelease version number

* missed a line that should have been deleted

* added test to confirm that variance predictions are stable

* fixed solve routines to use cho_solve in scipy

* Fix/toolkitcorr (#63)

* toolkit proofreading and corrections

* continuing updates of toolkit pages

* edits to toolkit pages

* finished corrections up through meta section

* updated toolkit threads section

* updates to proc section of toolkit

* incremented prerelease version number

* reset version to 0.3.0dev0 be consistent with master update (#70)

* Feature/meanfunc (#74)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* updated pre-release version for merge to devel

* Feature/formula (#77)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* implemented tests for tokenizing, parsing, and evaluating functions

* full set of unit tests for formulas and additional method in mean function to create from a formula

* changed base name and created functional interface for formula plus string methods

* added docstrings and renamed some functions

* added documentation for formulas and modified the mean function page a bit

* added patsy to install for testing and updated python version to 3.7

* updated version number for merge into devel

* Feature/GPrefactor (#81)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* implemented tests for tokenizing, parsing, and evaluating functions

* full set of unit tests for formulas and additional method in mean function to create from a formula

* changed base name and created functional interface for formula plus string methods

* added docstrings and renamed some functions

* added documentation for formulas and modified the mean function page a bit

* added patsy to install for testing and updated python version to 3.7

* replaced GP class with new version and unit tests

* refactored some GP methods to use property decorator

* initial implementation of MLE fitting function

* fixed dimension reduction tests to use new GP interface

* fixed history matching to work with new GP interface

* fixed mice code to handle new GP interface

* remove multi output GP as planned part of refactor

* wrote unit test for MLE fitting function

* added code to GP class to allow for priors

* put bare bones MOGP class back into repository

* changed code to use log posterior and wrote fitting routine in parallel for MOGP

* initial implementation of normal and inverse gamma priors

* added gamma distribution to priors and put in second derivatives

* fixed scale parameter in gamma distribution to be consistent with scipy definition

* fixed other tests and classes to use new MAP function and added unit test for single GP MAP routine

* correctly passed uncertainty/derivative flags to multiouput predict method

* added some bare bones tests for MultiOutputGP

* added tests for prior classes

* added unit tests and put in extra checks on nugget prior

* put more tests on priors into GP class

* fixed mean function in MOGP to accept strings

* added test for multiplt output fitting

* made some functions in formula module private

* added brief docstrings for Priors and added priors to documentation

* cleaned up some GP documentation

* improved docstring and made nugget parameter more configurable for MOGP

* improvde fitting documentation

* put better math in prior docstrings

* fixed bug in prior inputs to MOGP

* fixed docstring issue needing raw string

* wrote R example using GP fitting and prediction

* updated prerelease version number for merge

* Fix/powermeanderiv (#83)

* fixed bugs in computation of PowerMean derivatives plus unit tests to verify

* incremented version number for merge into devel

* added code of conduct to project documentation (#86)

* added code of conduct to project documentation

* updated prerelease number for merge into devel

* Feature/requirements (#92)

* added additional requirements files for optional packages, testing packages, and documentation

* incremented version number

* Fix/absoluteimports (#98)

* fconverted to absolute imports for clarity and to fix issue with docs building

* added missing init file in linalg package

* corrected travis file to use requirements files

* incremented version number for merge

* Fix/pdfdocs (#99)

* fixed latex typos in threads section of toolkit

* corrected tex rendering in proc section of toolkit

* fixed tex formatting in examples section of toolkit

* fixed latex formatting in disc section of toolkit

* modified docs pages to fix latex build in alt section of toolkit

* incremented version number for merge into devel

* forcing pytest version in travis file to fix conflicting dependency

* moved pytest requirement to requirements file

* Feature/refactor readme (#106)

* added contributing guidelines and fixed typo in code of conduct

* refactored index page on docs, moved implementation docs to separate directory to avoid clutter

* added demo pages to documentation

* moved benchmarks to a separate benchmark directory from the unit tests

* added symlinks from benchmarks to test directory in case those are used somewhere

* added some additional link targets to facilitate links between pages

* fixed some doc errors in benchmarks

* refactored readme and intro doc pages

* removed lfs storage file .gitattributes

* fixed link issue in README

* reworked intro sections and added workflow figure

* added blurb on pip installation to installation docs page

* incremented version number for merge

* Fix/windows mogp (#107)

* default to single process when running on windows

* made multi output tests only use a single processor for consistency

* incremented version number

* Feature/tutorial (#116)

* added tutorial code and projectile simulator code to demos

* finished implementing tutorial code

* wrote tutorial up through validation section

* slight edits to docs organization and index page

* finished writing tutorial and added image showing output

* fixed a few typos and made a few corrections to tutorial

* increment version number for merge

* clarified requirement for scipy version 1.4 in tutorial

* Fix/gp interface (#117)

* fixed issue with empty list in GP init function and added support for string version of kernels

* updated docstrings in GP class to match new options

* incremented versin number for merge

* updated GP docstrings to fix some issues

* fixed prior and kernel initiation in MOGP class

* fixed up docstring with Oliver's suggestion

* Fix/predictnugget (#120)

* included predictions in nugget with a corresponding unit test

* incremented version number for merge

* modified MOGP class to include nugget flag

* MultiOutputGP Optimization start points (#121)

* modified fitting routine to accept different start points for each emulator

* increment version number

* minor tweak to fitting function wrapper

* trying to fix occasional runtime errors in mogp fitting tests

* Fix/demo updates (#124)

* rewrote GP demo to use new interface and use priors to improve emulator

* moved convenience function for printing into projectile

* modified tutorial to use printing function

* modified MICE demo to match new interface

* modified benchmarks to use new interface

* tidied a few things in MICE demo

* removed link to nonexistent file

* updated setup.py for merge

* updated version number for update to master

* fix/test fitting (#127)

* fixed minor issue in mogp fitting tests where tests did not fail correctly

* updated version number for merge to devel

* Fix markdown link to Contributor Covenant

* Fix gpu and fpga label links

Co-authored-by: Oliver Strickson <ostrickson@turing.ac.uk>
Co-authored-by: Oliver Strickson <ots22@users.noreply.github.com>

* Fix/kerneldist (#130)

* bugfix to catch situation where kernel distance returns NaN

* following confirmed bug fix, incremented version number for master update

* V0.4.0 (#148)

* Add dimension reduction functionality (python impl. of gKDR)

* Tweaks to dimension reduction test

* Add documentation for DimensionReduction

* Add/fix some tests for DimensionReduction

* Fix test (DimensionReduction)

* Docstring -> raw string to fix invalid escape sequence warning

* Add sanity checks for parameters passed to DimensionReduction

* Fix assertion in DimensionReduction constructor

* Fix assertion in DimensionReduction constructor

* Test: optimize structural dimension

* First attempt at tuning the structural dimension (kdr)

* Make GaussianProcess objects callable (for prediction)

* Add 'train_model' interface to GaussianProcess

* DimensionReduction tweak to example

* Introduce X_scale/Y_scale parameters in gKDR kernel (DimensionReduction)

* Fix whitespace

* DimensionReduction: use specialized Hermitian eigensolver

* Tune parameters (structural dimension and kernel lengthscales) within gKDR

- rename tune_structural_dimension -> tune_parameters
- documentation
- improved optimization routine

* Improved tests for parameter tuning (gKDR)

* Tweak to test (DimensionReduction)

* Whitespace cleanup

* Correct naming of variable (DimensionReduction)

* Factor out internal loss function from gKDR.tune_parameters

* Use a smaller test example to reduce test runtime

* MCMC (#33)

* added separate functions to calculated squared exponential kernel

* added matern 5/2 covariance function

* put kernel computations into a separate function and removed conjugate gradient based unit test that always gave problems

* moved kernel functions and tests to separate files

* added function to compute gradient of the squared exponential kernel

* changed GP class to use derivative function

* added derivatives for matern 5/2 kernel

* quick and dirty modification to GP in order to use kernel functions

* cleaned up distance calculation to use standardized euclidean distance

* modified fast GP in MICE code to use kernel interface

* made correction to meaning of nugget parameter for MICE candidate GP to be relative to current variance

* fixed minor issues in MICE design to allow for zero samples and ensuring that parameter values are correctly set

* updated MICE benchmark details

* cosmetic tweaks to MICE benchmark

* full hessian implementation in kernel functions

* refactored kernel functions into objects

* implemented Hessian computation into GP class

* Documented base kernel class

* Documented derived kernel classes

* added documentation pages for kernels

* corrected documentation to include newly implemented classes and fixed some old bugs

* renamed run_init_design to be consistent with other methods that use *_initial_design

* made minor change in MICEFastGP documentation

* broke up prediction methods into single and multiple parameter sets, plus some other changes needed to accomodate them

* added routine to compute local covariance matrix from hessian

* implemented approximate normal hyperparameter sampling

* added utility functions for MCMC sampling

* fully implemented basic MCMC sampler

* working MCMC implementation with full set of tests

* fixed a few bugs in GP and MCMC implmentation

* fixed bug in variance prediction where roundoff error can cause negative variance

* added docstrings for MCMC routines

* added documentation for MCMC-related methods and code additions

* created benchmark for MCMC sampling and added documentation pages for it

* added information on MCMC benchmark to readme

* added additional pages to documentation for MCMC sampling

* removed renamed mcmc benchmark file

* fixed MCMC docstring in GP class

* Fix whitespace in Makefile

* Forward kwargs (gKDR._compute_loss); correct number of cross-validation folds

* Add benchmark for gKDR

* Wrap long lines in docstrings

* Versioning (#38)

* added code needed for versioning to devel branch

* forgot to modify setup.py file

* corrected line accidentally deleted from __init__.py

* added prerelease number to devel branch to track commits on devel

* corrected comments in conf.py to reflect full release numbering

* added simple demos for GP and MICE (#46)

* added simple demos for GP and MICE

* incremented prerelease number for merge

* History Matching (#39)

* initial commit of history matching class and benchmark with minor tweaks

* broke benchmark and sanity checks into two files for history matching

* reindented code to use 4 spaces

* added unit tests and some bug fixes for HistoryMatching

* added tests for implausability plus some other checks and bug fixes in HistoryMatching

* fixed misspelling of implausibility

* changed file name for benchmark in makefile

* fixed documentation in HistoryMatching class to be consistent with others

* improved documentation, cleaned up code, added a few unit tests for HistoryMatching

* fixed some docstring formatting and base rst file for HistoryMatching

* full implementation of history matching with unit tests and documentation

* simplified model discrepancy based on discussion with Danny

* fixes to history matching file and tests

* fixed some comparisons with None in SequentialDesign

* broke up long test for Hessian into parts

* incremented prerelease for history match merge

* Feature/mucmtoolkit (#54)

* added toolkit with converted pages and images

* incremented version number

* Feature/mucmtoolkit (#55)

* fixed bug in documentation to display methods

* version number change for corrected PR

* merge input derivative bugfix into devel (#61)

* Fix/cachefactmat (#62)

* corrected GP class to cache factorized matrix rather than inverse plus cleaned up a few unneeded internal variables

* incremented prerelease version number

* missed a line that should have been deleted

* added test to confirm that variance predictions are stable

* fixed solve routines to use cho_solve in scipy

* Fix/toolkitcorr (#63)

* toolkit proofreading and corrections

* continuing updates of toolkit pages

* edits to toolkit pages

* finished corrections up through meta section

* updated toolkit threads section

* updates to proc section of toolkit

* incremented prerelease version number

* reset version to 0.3.0dev0 be consistent with master update (#70)

* Feature/meanfunc (#74)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* updated pre-release version for merge to devel

* Feature/formula (#77)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* implemented tests for tokenizing, parsing, and evaluating functions

* full set of unit tests for formulas and additional method in mean function to create from a formula

* changed base name and created functional interface for formula plus string methods

* added docstrings and renamed some functions

* added documentation for formulas and modified the mean function page a bit

* added patsy to install for testing and updated python version to 3.7

* updated version number for merge into devel

* Feature/GPrefactor (#81)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* implemented tests for tokenizing, parsing, and evaluating functions

* full set of unit tests for formulas and additional method in mean function to create from a formula

* changed base name and created functional interface for formula plus string methods

* added docstrings and renamed some functions

* added documentation for formulas and modified the mean function page a bit

* added patsy to install for testing and updated python version to 3.7

* replaced GP class with new version and unit tests

* refactored some GP methods to use property decorator

* initial implementation of MLE fitting function

* fixed dimension reduction tests to use new GP interface

* fixed history matching to work with new GP interface

* fixed mice code to handle new GP interface

* remove multi output GP as planned part of refactor

* wrote unit test for MLE fitting function

* added code to GP class to allow for priors

* put bare bones MOGP class back into repository

* changed code to use log posterior and wrote fitting routine in parallel for MOGP

* initial implementation of normal and inverse gamma priors

* added gamma distribution to priors and put in second derivatives

* fixed scale parameter in gamma distribution to be consistent with scipy definition

* fixed other tests and classes to use new MAP function and added unit test for single GP MAP routine

* correctly passed uncertainty/derivative flags to multiouput predict method

* added some bare bones tests for MultiOutputGP

* added tests for prior classes

* added unit tests and put in extra checks on nugget prior

* put more tests on priors into GP class

* fixed mean function in MOGP to accept strings

* added test for multiplt output fitting

* made some functions in formula module private

* added brief docstrings for Priors and added priors to documentation

* cleaned up some GP documentation

* improved docstring and made nugget parameter more configurable for MOGP

* improvde fitting documentation

* put better math in prior docstrings

* fixed bug in prior inputs to MOGP

* fixed docstring issue needing raw string

* wrote R example using GP fitting and prediction

* updated prerelease version number for merge

* Fix/powermeanderiv (#83)

* fixed bugs in computation of PowerMean derivatives plus unit tests to verify

* incremented version number for merge into devel

* added code of conduct to project documentation (#86)

* added code of conduct to project documentation

* updated prerelease number for merge into devel

* Feature/requirements (#92)

* added additional requirements files for optional packages, testing packages, and documentation

* incremented version number

* Fix/absoluteimports (#98)

* fconverted to absolute imports for clarity and to fix issue with docs building

* added missing init file in linalg package

* corrected travis file to use requirements files

* incremented version number for merge

* Fix/pdfdocs (#99)

* fixed latex typos in threads section of toolkit

* corrected tex rendering in proc section of toolkit

* fixed tex formatting in examples section of toolkit

* fixed latex formatting in disc section of toolkit

* modified docs pages to fix latex build in alt section of toolkit

* incremented version number for merge into devel

* forcing pytest version in travis file to fix conflicting dependency

* moved pytest requirement to requirements file

* Feature/refactor readme (#106)

* added contributing guidelines and fixed typo in code of conduct

* refactored index page on docs, moved implementation docs to separate directory to avoid clutter

* added demo pages to documentation

* moved benchmarks to a separate benchmark directory from the unit tests

* added symlinks from benchmarks to test directory in case those are used somewhere

* added some additional link targets to facilitate links between pages

* fixed some doc errors in benchmarks

* refactored readme and intro doc pages

* removed lfs storage file .gitattributes

* fixed link issue in README

* reworked intro sections and added workflow figure

* added blurb on pip installation to installation docs page

* incremented version number for merge

* Fix/windows mogp (#107)

* default to single process when running on windows

* made multi output tests only use a single processor for consistency

* incremented version number

* Feature/tutorial (#116)

* added tutorial code and projectile simulator code to demos

* finished implementing tutorial code

* wrote tutorial up through validation section

* slight edits to docs organization and index page

* finished writing tutorial and added image showing output

* fixed a few typos and made a few corrections to tutorial

* increment version number for merge

* clarified requirement for scipy version 1.4 in tutorial

* Fix/gp interface (#117)

* fixed issue with empty list in GP init function and added support for string version of kernels

* updated docstrings in GP class to match new options

* incremented versin number for merge

* updated GP docstrings to fix some issues

* fixed prior and kernel initiation in MOGP class

* fixed up docstring with Oliver's suggestion

* Fix/predictnugget (#120)

* included predictions in nugget with a corresponding unit test

* incremented version number for merge

* modified MOGP class to include nugget flag

* MultiOutputGP Optimization start points (#121)

* modified fitting routine to accept different start points for each emulator

* increment version number

* minor tweak to fitting function wrapper

* trying to fix occasional runtime errors in mogp fitting tests

* Fix/demo updates (#124)

* rewrote GP demo to use new interface and use priors to improve emulator

* moved convenience function for printing into projectile

* modified tutorial to use printing function

* modified MICE demo to match new interface

* modified benchmarks to use new interface

* tidied a few things in MICE demo

* removed link to nonexistent file

* updated setup.py for merge

* fix/test fitting (#127)

* fixed minor issue in mogp fitting tests where tests did not fail correctly

* updated version number for merge to devel

* reset version number to start work on next release (#129)

* Fix/kerneldist (#131)

* Merge updated devel branch into master (#12)

* Fixed tsunami benchmarks to use numpy for loading data and added more detailed readme file

* added files for sphinx documentation and made some docstring corrections for autodoc compatability

* fixed minor formatting issues in readme headings

* added files needed for Travis CI

* fixed tests to be slightly more tolerant with numerical comparisons

* removed python 3.7 from Travis and decreased tolerance on minimization algorithms in GP unit tests

* additional increase in tolerance for GP unit tests for minimization

* added version number in setup.py file that is automatically found in package and docs

* need to install package in travis to get version number to load

* implemented fix to correctly compute kernel derivatives with respect to inputs

* added unit tests for input derivatives of kernel

* added docstrings for new kernel functions

* incremented version number for bug fix

* reformatted kernel tests to shorten lines and a few other things

* V0.2.0rc (#64)

* Add dimension reduction functionality (python impl. of gKDR)

* Tweaks to dimension reduction test

* Add documentation for DimensionReduction

* Add/fix some tests for DimensionReduction

* Fix test (DimensionReduction)

* Docstring -> raw string to fix invalid escape sequence warning

* Add sanity checks for parameters passed to DimensionReduction

* Fix assertion in DimensionReduction constructor

* Fix assertion in DimensionReduction constructor

* Test: optimize structural dimension

* First attempt at tuning the structural dimension (kdr)

* Make GaussianProcess objects callable (for prediction)

* Add 'train_model' interface to GaussianProcess

* DimensionReduction tweak to example

* Introduce X_scale/Y_scale parameters in gKDR kernel (DimensionReduction)

* Fix whitespace

* DimensionReduction: use specialized Hermitian eigensolver

* Tune parameters (structural dimension and kernel lengthscales) within gKDR

- rename tune_structural_dimension -> tune_parameters
- documentation
- improved optimization routine

* Improved tests for parameter tuning (gKDR)

* Tweak to test (DimensionReduction)

* Whitespace cleanup

* Correct naming of variable (DimensionReduction)

* Factor out internal loss function from gKDR.tune_parameters

* Use a smaller test example to reduce test runtime

* MCMC (#33)

* added separate functions to calculated squared exponential kernel

* added matern 5/2 covariance function

* put kernel computations into a separate function and removed conjugate gradient based unit test that always gave problems

* moved kernel functions and tests to separate files

* added function to compute gradient of the squared exponential kernel

* changed GP class to use derivative function

* added derivatives for matern 5/2 kernel

* quick and dirty modification to GP in order to use kernel functions

* cleaned up distance calculation to use standardized euclidean distance

* modified fast GP in MICE code to use kernel interface

* made correction to meaning of nugget parameter for MICE candidate GP to be relative to current variance

* fixed minor issues in MICE design to allow for zero samples and ensuring that parameter values are correctly set

* updated MICE benchmark details

* cosmetic tweaks to MICE benchmark

* full hessian implementation in kernel functions

* refactored kernel functions into objects

* implemented Hessian computation into GP class

* Documented base kernel class

* Documented derived kernel classes

* added documentation pages for kernels

* corrected documentation to include newly implemented classes and fixed some old bugs

* renamed run_init_design to be consistent with other methods that use *_initial_design

* made minor change in MICEFastGP documentation

* broke up prediction methods into single and multiple parameter sets, plus some other changes needed to accomodate them

* added routine to compute local covariance matrix from hessian

* implemented approximate normal hyperparameter sampling

* added utility functions for MCMC sampling

* fully implemented basic MCMC sampler

* working MCMC implementation with full set of tests

* fixed a few bugs in GP and MCMC implmentation

* fixed bug in variance prediction where roundoff error can cause negative variance

* added docstrings for MCMC routines

* added documentation for MCMC-related methods and code additions

* created benchmark for MCMC sampling and added documentation pages for it

* added information on MCMC benchmark to readme

* added additional pages to documentation for MCMC sampling

* removed renamed mcmc benchmark file

* fixed MCMC docstring in GP class

* Fix whitespace in Makefile

* Forward kwargs (gKDR._compute_loss); correct number of cross-validation folds

* Add benchmark for gKDR

* Wrap long lines in docstrings

* Versioning (#38)

* added code needed for versioning to devel branch

* forgot to modify setup.py file

* corrected line accidentally deleted from __init__.py

* added prerelease number to devel branch to track commits on devel

* corrected comments in conf.py to reflect full release numbering

* added simple demos for GP and MICE (#46)

* added simple demos for GP and MICE

* incremented prerelease number for merge

* History Matching (#39)

* initial commit of history matching class and benchmark with minor tweaks

* broke benchmark and sanity checks into two files for history matching

* reindented code to use 4 spaces

* added unit tests and some bug fixes for HistoryMatching

* added tests for implausability plus some other checks and bug fixes in HistoryMatching

* fixed misspelling of implausibility

* changed file name for benchmark in makefile

* fixed documentation in HistoryMatching class to be consistent with others

* improved documentation, cleaned up code, added a few unit tests for HistoryMatching

* fixed some docstring formatting and base rst file for HistoryMatching

* full implementation of history matching with unit tests and documentation

* simplified model discrepancy based on discussion with Danny

* fixes to history matching file and tests

* fixed some comparisons with None in SequentialDesign

* broke up long test for Hessian into parts

* incremented prerelease for history match merge

* Feature/mucmtoolkit (#54)

* added toolkit with converted pages and images

* incremented version number

* Feature/mucmtoolkit (#55)

* fixed bug in documentation to display methods

* version number change for corrected PR

* merge input derivative bugfix into devel (#61)

* Fix/cachefactmat (#62)

* corrected GP class to cache factorized matrix rather than inverse plus cleaned up a few unneeded internal variables

* incremented prerelease version number

* missed a line that should have been deleted

* added test to confirm that variance predictions are stable

* fixed solve routines to use cho_solve in scipy

* Fix/toolkitcorr (#63)

* toolkit proofreading and corrections

* continuing updates of toolkit pages

* edits to toolkit pages

* finished corrections up through meta section

* updated toolkit threads section

* updates to proc section of toolkit

* incremented prerelease version number

* modified version for release v0.2.0

* Adjust the paper references in DimensionReduction.py

* Update paper reference in documentation

* V0.3.0rc (#125)

* Add dimension reduction functionality (python impl. of gKDR)

* Tweaks to dimension reduction test

* Add documentation for DimensionReduction

* Add/fix some tests for DimensionReduction

* Fix test (DimensionReduction)

* Docstring -> raw string to fix invalid escape sequence warning

* Add sanity checks for parameters passed to DimensionReduction

* Fix assertion in DimensionReduction constructor

* Fix assertion in DimensionReduction constructor

* Test: optimize structural dimension

* First attempt at tuning the structural dimension (kdr)

* Make GaussianProcess objects callable (for prediction)

* Add 'train_model' interface to GaussianProcess

* DimensionReduction tweak to example

* Introduce X_scale/Y_scale parameters in gKDR kernel (DimensionReduction)

* Fix whitespace

* DimensionReduction: use specialized Hermitian eigensolver

* Tune parameters (structural dimension and kernel lengthscales) within gKDR

- rename tune_structural_dimension -> tune_parameters
- documentation
- improved optimization routine

* Improved tests for parameter tuning (gKDR)

* Tweak to test (DimensionReduction)

* Whitespace cleanup

* Correct naming of variable (DimensionReduction)

* Factor out internal loss function from gKDR.tune_parameters

* Use a smaller test example to reduce test runtime

* MCMC (#33)

* added separate functions to calculated squared exponential kernel

* added matern 5/2 covariance function

* put kernel computations into a separate function and removed conjugate gradient based unit test that always gave problems

* moved kernel functions and tests to separate files

* added function to compute gradient of the squared exponential kernel

* changed GP class to use derivative function

* added derivatives for matern 5/2 kernel

* quick and dirty modification to GP in order to use kernel functions

* cleaned up distance calculation to use standardized euclidean distance

* modified fast GP in MICE code to use kernel interface

* made correction to meaning of nugget parameter for MICE candidate GP to be relative to current variance

* fixed minor issues in MICE design to allow for zero samples and ensuring that parameter values are correctly set

* updated MICE benchmark details

* cosmetic tweaks to MICE benchmark

* full hessian implementation in kernel functions

* refactored kernel functions into objects

* implemented Hessian computation into GP class

* Documented base kernel class

* Documented derived kernel classes

* added documentation pages for kernels

* corrected documentation to include newly implemented classes and fixed some old bugs

* renamed run_init_design to be consistent with other methods that use *_initial_design

* made minor change in MICEFastGP documentation

* broke up prediction methods into single and multiple parameter sets, plus some other changes needed to accomodate them

* added routine to compute local covariance matrix from hessian

* implemented approximate normal hyperparameter sampling

* added utility functions for MCMC sampling

* fully implemented basic MCMC sampler

* working MCMC implementation with full set of tests

* fixed a few bugs in GP and MCMC implmentation

* fixed bug in variance prediction where roundoff error can cause negative variance

* added docstrings for MCMC routines

* added documentation for MCMC-related methods and code additions

* created benchmark for MCMC sampling and added documentation pages for it

* added information on MCMC benchmark to readme

* added additional pages to documentation for MCMC sampling

* removed renamed mcmc benchmark file

* fixed MCMC docstring in GP class

* Fix whitespace in Makefile

* Forward kwargs (gKDR._compute_loss); correct number of cross-validation folds

* Add benchmark for gKDR

* Wrap long lines in docstrings

* Versioning (#38)

* added code needed for versioning to devel branch

* forgot to modify setup.py file

* corrected line accidentally deleted from __init__.py

* added prerelease number to devel branch to track commits on devel

* corrected comments in conf.py to reflect full release numbering

* added simple demos for GP and MICE (#46)

* added simple demos for GP and MICE

* incremented prerelease number for merge

* History Matching (#39)

* initial commit of history matching class and benchmark with minor tweaks

* broke benchmark and sanity checks into two files for history matching

* reindented code to use 4 spaces

* added unit tests and some bug fixes for HistoryMatching

* added tests for implausability plus some other checks and bug fixes in HistoryMatching

* fixed misspelling of implausibility

* changed file name for benchmark in makefile

* fixed documentation in HistoryMatching class to be consistent with others

* improved documentation, cleaned up code, added a few unit tests for HistoryMatching

* fixed some docstring formatting and base rst file for HistoryMatching

* full implementation of history matching with unit tests and documentation

* simplified model discrepancy based on discussion with Danny

* fixes to history matching file and tests

* fixed some comparisons with None in SequentialDesign

* broke up long test for Hessian into parts

* incremented prerelease for history match merge

* Feature/mucmtoolkit (#54)

* added toolkit with converted pages and images

* incremented version number

* Feature/mucmtoolkit (#55)

* fixed bug in documentation to display methods

* version number change for corrected PR

* merge input derivative bugfix into devel (#61)

* Fix/cachefactmat (#62)

* corrected GP class to cache factorized matrix rather than inverse plus cleaned up a few unneeded internal variables

* incremented prerelease version number

* missed a line that should have been deleted

* added test to confirm that variance predictions are stable

* fixed solve routines to use cho_solve in scipy

* Fix/toolkitcorr (#63)

* toolkit proofreading and corrections

* continuing updates of toolkit pages

* edits to toolkit pages

* finished corrections up through meta section

* updated toolkit threads section

* updates to proc section of toolkit

* incremented prerelease version number

* reset version to 0.3.0dev0 be consistent with master update (#70)

* Feature/meanfunc (#74)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* updated pre-release version for merge to devel

* Feature/formula (#77)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* implemented tests for tokenizing, parsing, and evaluating functions

* full set of unit tests for formulas and additional method in mean function to create from a formula

* changed base name and created functional interface for formula plus string methods

* added docstrings and renamed some functions

* added documentation for formulas and modified the mean function page a bit

* added patsy to install for testing and updated python version to 3.7

* updated version number for merge into devel

* Feature/GPrefactor (#81)

* initial working implementation of mean function with tests

* implemented polynomial mean function

* added finite difference tests to mean function unit tests

* made finite difference spacing a fixture

* changed fixed mean to use a function rather than lambda for derivative

* implemented mean function (note only unit tests assume zero mean, will write new ones during refactor of interface)

* fixed bugs in mean function implementation

* implemented additional mean function capabilities and wrote tests

* added docstrings to base mean function class

* documented mean sum class

* documented mean product class

* documented mean composite class

* documented fixed mean class

* added documentation and a few other checks to the fixed mean function implementations

* added documentation for coefficient class

* added documentation for polynomial mean class

* added module docstring and test for indexing error in composite mean

* added documentation page for mean function

* implemented power mean function

* fixed bugs in mean power and wrote unit tests

* basic working formula parser on linear terms

* wrote tokenizer function

* modified tokenizer to correct exponentiation and wrote expression parser

* removed unneeded function

* appear to have working formula parser

* fixed issue with square bracket parsing

* added class method and moved some things around

* added some unit tests for formula parsing

* imp…
  • Loading branch information
6 people authored Jul 18, 2022
1 parent d464268 commit 1245081
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 93 deletions.
10 changes: 7 additions & 3 deletions mogp_emulator/GaussianProcess.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from mogp_emulator.linalg import logdet_deriv, calc_A_deriv

try:
from patsy import dmatrix, PatsyError
from patsy import dmatrix, dmatrices, PatsyError
except ImportError:
raise ImportError("patsy is now a required dependency of mogp-emulator")
import warnings
Expand Down Expand Up @@ -502,9 +502,13 @@ def get_design_matrix(self, inputs):
dm = np.ones((inputs.shape[0], 1))
else:
try:
dm = np.array(dmatrix(self._mean, data={"x": inputs.T}))
dm = dmatrix(self._mean, data={"x": inputs.T})
except PatsyError:
raise ValueError("Provided mean function is invalid")
try:
y, dm = dmatrices(self._mean, data={"x": inputs.T, "y": np.zeros(inputs.shape[0])})
except PatsyError:
raise ValueError("Provided mean function is invalid")
dm = np.array(dm)
if not dm.shape[0] == inputs.shape[0]:
raise ValueError("Provided design matrix is of the wrong shape")

Expand Down
29 changes: 16 additions & 13 deletions mogp_emulator/demos/excalibur_workshop_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,17 @@ def plot_solution(field, title, filename, simulation_points, validation_points,
# Next, fit the surrogate GP model using MLE, zero mean, and no priors.
# Print out hyperparameter values as correlation lengths, sigma, and nugget

gp = mogp_emulator.GaussianProcess(simulation_points, simulation_output)
# Note that as of v0.6.0, you have to explicitly choose weak priors (if none are
# provided then the GP tries to fit some for you based on your data)

priors = mogp_emulator.Priors.GPPriors(n_corr=2, nugget_type="adaptive")

gp = mogp_emulator.GaussianProcess(simulation_points, simulation_output, priors=priors)
gp = mogp_emulator.fit_GP_MAP(gp)

print("Zero mean and no priors:")
print("Correlation lengths = {}".format(np.sqrt(np.exp(-gp.theta[:2]))))
print("Sigma = {}".format(np.sqrt(np.exp(gp.theta[2]))))
print("Correlation lengths = {}".format(gp.theta.corr))
print("Covariance scale (sigma^2)= {}".format(gp.theta.cov))
print("Nugget = {}".format(gp.nugget))
print()

Expand Down Expand Up @@ -101,13 +106,11 @@ def plot_solution(field, title, filename, simulation_points, validation_points,
# we expect sigma to be large (as the function is very sensitive to inputs) while we want the
# nugget to be small.

priors = [mogp_emulator.Priors.NormalPrior(0., 10.),
mogp_emulator.Priors.NormalPrior(0., 10.),
mogp_emulator.Priors.NormalPrior(0., 10.),
mogp_emulator.Priors.NormalPrior(0., 1.),
mogp_emulator.Priors.NormalPrior(-10., 1.),
mogp_emulator.Priors.InvGammaPrior(1., 1.),
mogp_emulator.Priors.GammaPrior(1., 1.)]
priors = mogp_emulator.Priors.GPPriors(mean=mogp_emulator.Priors.MeanPriors(mean=np.zeros(3), cov=10.),
corr=[mogp_emulator.Priors.LogNormalPrior(1., 1.),
mogp_emulator.Priors.LogNormalPrior(1., 1.)],
cov=mogp_emulator.Priors.InvGammaPrior(1., 1.),
nugget=mogp_emulator.Priors.GammaPrior(1., 1.))

# Now, construct another GP using the mean function and priors. note that we also specify that we
# want to estimate the nugget based on our prior, rather than adaptively fitting it as we did in
Expand All @@ -118,9 +121,9 @@ def plot_solution(field, title, filename, simulation_points, validation_points,
gp_map = mogp_emulator.fit_GP_MAP(gp_map)

print("With mean and priors:")
print("Mean function parameters = {}".format(gp_map.theta[:3]))
print("Correlation lengths = {}".format(np.sqrt(np.exp(-gp_map.theta[3:5]))))
print("Sigma = {}".format(np.sqrt(np.exp(gp_map.theta[-2]))))
print("Mean function parameters = {}".format(gp_map.theta.mean))
print("Correlation lengths = {}".format(gp_map.theta.corr))
print("Covariance Scale (sigma^2) = {}".format(gp_map.theta.cov))
print("Nugget = {}".format(gp_map.nugget))

# Use the new fit GP to predict the validation points and plot to see if this improved
Expand Down
19 changes: 8 additions & 11 deletions mogp_emulator/demos/gp_demo.R
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ inputdict <- target_list[[3]]
# to integer indices in the inputs matrix. This is done with a dict object as
# illustrated below.

mean_func <- "y ~ x1 + x2 + I(x1*x2)"
mean_func <- "y ~ x[0] + x[1] + I(x[0]*x[1])"

# Priors are specified by giving a list of prior objects (or NULL if you
# wish to use weak prior information). Each distribution has some parameters
Expand All @@ -104,14 +104,12 @@ mean_func <- "y ~ x1 + x2 + I(x1*x2)"
# so lognormal), a sigma^2 covariance parameter (inverse gamma) and a nugget
# (Gamma). If you choose an adaptive or fixed nugget, the nugget prior is ignored.

priors <- list(mogp_priors$NormalPrior(0., 1.),
mogp_priors$NormalPrior(0., 1.),
mogp_priors$NormalPrior(0., 1.),
mogp_priors$NormalPrior(0., 1.),
mogp_priors$NormalPrior(0., 1.),
mogp_priors$NormalPrior(0., 1.),
mogp_priors$InvGammaPrior(2., 1.),
mogp_priors$GammaPrior(1., 0.2))
priors <- mogp_priors$GPPriors(mean=mogp_priors$MeanPriors(mean=c(0., 0., 0., 0.),
cov=c(1., 1., 1., 1.)),
corr=list(mogp_priors$LogNormalPrior(1., 1.),
mogp_priors$LogNormalPrior(1., 1.)),
cov=mogp_priors$InvGammaPrior(2., 1.),
nugget=mogp_priors$GammaPrior(1., 0.2))

# Finally, create the GP instance. If we had multiple outputs, we would
# create a MultiOutputGP class in a similar way, but would have the option
Expand All @@ -122,8 +120,7 @@ priors <- list(mogp_priors$NormalPrior(0., 1.),
gp <- mogp_emulator$GaussianProcess(inputs, targets,
mean=mean_func,
priors=priors,
nugget="fit",
inputdict=inputdict)
nugget="fit")

# gp is fit using the fit_GP_MAP function. It accepts a GaussianProcess or
# MultiOutputGP object and returns the same type of object with the
Expand Down
21 changes: 10 additions & 11 deletions mogp_emulator/demos/gp_demos.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np
import mogp_emulator
from projectile import simulator, print_results
from mogp_emulator.demos.projectile import simulator, print_predictions

# additional GP examples using the projectile demo

Expand Down Expand Up @@ -44,7 +44,7 @@

means, variances, derivs = gp.predict(predict_points)

print_results(predict_points, means)
print_predictions(predict_points, means, variances)

###################################################################################

Expand All @@ -60,7 +60,7 @@

pred_res = gp_matern.predict(predict_points)

print_results(predict_points, pred_res.mean)
print_predictions(predict_points, pred_res.mean, pred_res.unc)

###################################################################################

Expand All @@ -80,13 +80,12 @@
# Inverse Gamma distribution on covariance (favors large values)
# Gamma distribution on nugget (favors negative values)

priors = [mogp_emulator.Priors.NormalPrior(0., 10),
mogp_emulator.Priors.NormalPrior(0., 10.),
mogp_emulator.Priors.NormalPrior(0., 10.),
mogp_emulator.Priors.NormalPrior(0., 1.),
mogp_emulator.Priors.NormalPrior(-10., 1.),
mogp_emulator.Priors.InvGammaPrior(1., 1.),
mogp_emulator.Priors.GammaPrior(1., 1.)]
priors = mogp_emulator.Priors.GPPriors(mean=mogp_emulator.Priors.MeanPriors(mean=np.zeros(3),
cov=np.array([1., 1., 1.])),
corr=[ mogp_emulator.Priors.LogNormalPrior(1., 1.),
mogp_emulator.Priors.LogNormalPrior(1., 1.) ],
cov=mogp_emulator.Priors.InvGammaPrior(1., 1.),
nugget=mogp_emulator.Priors.GammaPrior(1., 1.))

# create GP, passing list of priors and a string representing the mean function
# tell it to estimate the nugget as well
Expand All @@ -101,4 +100,4 @@

pred_means = gp_map(predict_points)

print_results(predict_points, pred_means)
print_predictions(predict_points, pred_means, [""]*n_preds)
8 changes: 4 additions & 4 deletions mogp_emulator/demos/gp_kernel_demos.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import numpy as np
import mogp_emulator
from mogp_emulator.Kernel import UniformSqExp
from projectile import print_results
from mogp_emulator.demos.projectile import print_predictions

# additional GP examples using different Kernels

Expand Down Expand Up @@ -56,7 +56,7 @@ def f(x):

means, variances, derivs = gp.predict(predict_points)

print_results(predict_points, means)
print_predictions(predict_points, means, variances)

###################################################################################

Expand All @@ -78,7 +78,7 @@ def f(x):

means, variances, derivs = gp_matern.predict(predict_points)

print_results(predict_points, means)
print_predictions(predict_points, means, variances)

###################################################################################

Expand Down Expand Up @@ -106,4 +106,4 @@ def f(x):

means, variances, derivs = gp_uniform.predict(predict_points)

print_results(predict_points, means)
print_predictions(predict_points, means, variances)
16 changes: 9 additions & 7 deletions mogp_emulator/demos/multioutput_tutorial.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import numpy as np
from projectile import simulator_multioutput, print_results
from mogp_emulator.demos.projectile import simulator_multioutput, print_errors
import mogp_emulator
import mogp_emulator.validation

try:
import matplotlib.pyplot as plt
Expand Down Expand Up @@ -45,18 +46,19 @@
print("Nugget (distance)= {}".format(np.sqrt(gp.emulators[0].theta.nugget)))
print("Nugget (velocity)= {}".format(np.sqrt(gp.emulators[1].theta.nugget)))

# Validate emulator by comparing to true simulated value
# To compare with the emulator, use the predict method to get mean and variance
# values for the emulator predictions and see how many are within 2 standard
# deviations
# Validate emulators by comparing to true simulated values

n_valid = 10
validation_points = lhd.sample(n_valid)
validation_output = np.array([simulator_multioutput(p) for p in validation_points]).T

predictions = gp.predict(validation_points)
mean, var, _ = gp.predict(validation_points)

print_results(validation_points, predictions.mean)
errors = mogp_emulator.validation.standard_errors(gp, validation_points, validation_output)

for errval, v in zip(errors, var):
e, idx = errval
print_errors(validation_points[idx], e[idx], v[idx])

# Finally, perform history matching. Sample densely from the experimental design and
# determine which points are consistent with the data using the GP predictions
Expand Down
23 changes: 15 additions & 8 deletions mogp_emulator/demos/projectile.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,25 @@ def simulator_multioutput(x):
return (results.y_events[0][0][2],
np.sqrt(results.y_events[0][0][0]**2 + results.y_events[0][0][1]**2))

# function for printing out results
# functions for printing out results

def print_results(inputs, errors, var):
"convenience function for printing out results and computing mean square error"
def print_results(inputs, arg, var):
"convenience function for printing out generic results"

print("Target Point Standard Error Predictive Variance")
print("---------------------------------------------------------------------------------")

error = 0.
for pp, m, v in zip(inputs, arg, var):
print("{} {} {}".format(pp, m, v))

def print_predictions(inputs, pred, var):
"convenience function for printing predictions"

print("Target Point Predicted Mean Predictive Variance")
print_results(inputs, pred, var)

for pp, e, v in zip(inputs, errors, var):
trueval = simulator(pp)
print("{} {} {}".format(pp, e, v))
def print_errors(inputs, errors, var):
"convenience function for printing out results and computing mean square error"

print("Target Point Standard Error Predictive Variance")
print_results(inputs, errors, var)
print("Mean squared error: {}".format(np.sum(errors**2)/len(errors)))
2 changes: 1 addition & 1 deletion mogp_emulator/demos/tutorial.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import numpy as np
from projectile import simulator, print_results
from mogp_emulator.demos.projectile import simulator, print_results
import mogp_emulator
import mogp_emulator.validation

Expand Down
Loading

0 comments on commit 1245081

Please sign in to comment.