From b97a0e4536b768f1c776917fb045ca9b38f23bab Mon Sep 17 00:00:00 2001 From: Eric Daub <45598892+edaub@users.noreply.github.com> Date: Fri, 18 Feb 2022 14:51:29 +0000 Subject: [PATCH] Fix/mean predictions (#221) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * V0.6.0 (#213) * Modify setup.py to compile cuda code and produce libgpgpu library * Merge devel branch into feature/gpu branch * resolve merge conflicts in GaussianProcess.py (taking all changes from devel) * Move old GaussianProcessGPU implementation (using ctypes) to GaussianProcessGPU_old, and add new (WIP) GaussianProcessGPU class using the pybind11 bindings * only try to compile cuda code if we find nvcc executable * Repo name change (#147) * updated urls and pip installation instructions * updated numpy version needed for travis * increment version number for merge * V0.5.0dev0 (#149) * 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 Co-authored-by: Oliver Strickson * 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 * 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 fi… * fixed error in mean function prediction * fixed issue with pickling of patsy objects, design matrix is now an array and gives a warning if using a patsy object as a mean function * bumped version number for fix Co-authored-by: nbarlowATI Co-authored-by: Oliver Strickson Co-authored-by: Oliver Strickson Co-authored-by: nbarlowATI <33832774+nbarlowATI@users.noreply.github.com> Co-authored-by: Ubuntu --- mogp_emulator/GaussianProcess.py | 6 ++++-- mogp_emulator/MultiOutputGP.py | 10 +++++++++- mogp_emulator/tests/test_GaussianProcess.py | 13 +++++++++++-- setup.py | 4 ++-- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/mogp_emulator/GaussianProcess.py b/mogp_emulator/GaussianProcess.py index 43bee5bf..1769a246 100644 --- a/mogp_emulator/GaussianProcess.py +++ b/mogp_emulator/GaussianProcess.py @@ -503,7 +503,7 @@ def get_design_matrix(self, inputs): dm = np.ones((inputs.shape[0], 1)) else: try: - dm = dmatrix(self._mean, data={"x": inputs.T}) + dm = np.array(dmatrix(self._mean, data={"x": inputs.T})) except PatsyError: raise ValueError("Provided mean function is invalid") if not dm.shape[0] == inputs.shape[0]: @@ -658,6 +658,8 @@ def fit(self, theta): self.theta.mean = calc_mean_params(self.Ainv, self.Kinv_t, self._dm, self.priors.mean) + + self.Kinv_t_mean = self.Kinv.solve(self.targets - np.dot(self._dm, self.theta.mean)) if self.priors.mean.has_weak_priors: n_coeff = self.n - self.n_mean @@ -874,7 +876,7 @@ def predict(self, testing, unc=True, deriv=False, include_nugget=True): mtest = np.dot(dmtest, self.theta.mean) Ktest = self.get_cov_matrix(testing) - mu = mtest + np.dot(Ktest.T, self.Kinv_t) + mu = mtest + np.dot(Ktest.T, self.Kinv_t_mean) var = None if unc: diff --git a/mogp_emulator/MultiOutputGP.py b/mogp_emulator/MultiOutputGP.py index da2cb5fd..cd3deb00 100644 --- a/mogp_emulator/MultiOutputGP.py +++ b/mogp_emulator/MultiOutputGP.py @@ -8,6 +8,7 @@ ) from mogp_emulator.Kernel import KernelBase from mogp_emulator.Priors import GPPriors +from patsy import ModelDesc class MultiOutputGP(object): """Implementation of a multiple-output Gaussian Process Emulator. @@ -70,6 +71,10 @@ def __init__(self, inputs, targets, mean=None, kernel="SquaredExponential", prio assert isinstance(mean, list), "mean must be None, a string, a valid patsy model description, or a list of None/string/mean functions" assert len(mean) == self.n_emulators + + if any([isinstance(m, ModelDesc) for m in mean]): + warnings.warn("Specifying mean functions using a patsy ModelDesc does not support parallel " + + "fitting and prediction with MultiOutputGPs") if isinstance(kernel, str) or issubclass(type(kernel), KernelBase): kernel = self.n_emulators*[kernel] @@ -200,8 +205,11 @@ def predict(self, testing, unc=True, deriv=False, include_nugget=True, predict_method = _gp_predict_default_NaN else: predict_method = self.GPClass.predict + + serial_predict = (platform.system() == "Windows" or + any([isinstance(em._mean, ModelDesc) for em in self.emulators])) - if platform.system() == "Windows": + if serial_predict: predict_vals = [predict_method(gp, testing, unc, deriv, include_nugget) for gp in self.emulators] else: diff --git a/mogp_emulator/tests/test_GaussianProcess.py b/mogp_emulator/tests/test_GaussianProcess.py index c6705e24..02a1e97d 100644 --- a/mogp_emulator/tests/test_GaussianProcess.py +++ b/mogp_emulator/tests/test_GaussianProcess.py @@ -500,8 +500,11 @@ def test_GaussianProcess_fit_logposterior(x, y, mean, nugget, sn): mean_expect = np.linalg.solve(A, np.dot(gp._dm.T, Kinv_t_expect)) + Kinv_t_mean_expect = np.linalg.solve(K, y - np.dot(gp._dm, mean_expect)) + assert_allclose(L_expect, gp.Kinv.L) assert_allclose(Kinv_t_expect, gp.Kinv_t) + assert_allclose(Kinv_t_mean_expect, gp.Kinv_t_mean, atol=1.e-10) assert_allclose(LA_expect, gp.Ainv.L) assert_allclose(mean_expect, gp.theta.mean) assert_allclose(logpost_expect, gp.current_logpost) @@ -807,7 +810,7 @@ def test_GaussianProcess_predict(x, y, dx): K = np.exp(theta[-1])*gp.kernel.kernel_f(x, x, theta[:-1]) Ktest = np.exp(theta[-1])*gp.kernel.kernel_f(x_test, x, theta[:-1]) - mu_expect = np.dot(Ktest, gp.Kinv_t) + mu_expect = np.dot(Ktest, gp.Kinv_t_mean) var_expect = np.exp(theta[-1]) - np.diag(np.dot(Ktest, np.linalg.solve(K, Ktest.T))) assert_allclose(mu, mu_expect) @@ -853,13 +856,19 @@ def test_GaussianProcess_predict(x, y, dx): Ktest = np.exp(theta[-1])*gp.kernel.kernel_f(x_test, x, theta[:-1]) R = dm_test.T - np.dot(gp._dm.T, np.linalg.solve(K, Ktest.T)) - mu_expect = m + np.dot(Ktest, gp.Kinv_t) + mu_expect = m + np.dot(Ktest, gp.Kinv_t_mean) var_expect += np.diag(np.dot(R.T, np.linalg.solve(np.dot(gp._dm.T, np.linalg.solve(K, gp._dm)), R))) assert_allclose(mu, mu_expect) assert_allclose(var, var_expect) + # check that predictions at inputs are close to mean + + mu, var, deriv = gp.predict(x) + + assert_allclose(mu, y) + # nonzero mean priors # gp = GaussianProcess(x, y, mean="x[0]", diff --git a/setup.py b/setup.py index b199e4ec..794eb127 100644 --- a/setup.py +++ b/setup.py @@ -10,8 +10,8 @@ MAJOR = 0 MINOR = 7 MICRO = 0 -PRERELEASE = 0 -ISRELEASED = True +PRERELEASE = 1 +ISRELEASED = False version = "{}.{}.{}".format(MAJOR, MINOR, MICRO) if not ISRELEASED: