Skip to content

Commit

Permalink
Fix pm.DensityDist bug and incorporate latest upstream changes (#42)
Browse files Browse the repository at this point in the history
* Update GP NBs to use standard notebook style (pymc-devs#3978)

* update gp-latent nb to use arviz

* rerun, run black

* rerun after fixes from comments

* rerun black

* rewrite radon notebook using ArviZ and xarray (pymc-devs#3963)

* rewrite radon notebook using ArviZ and xarray

Roughly half notebook has been updated

* add comments on xarray usage

* rewrite 2n half of notebook

* minor fix

* rerun notebook and minor changes

* rerun notebook on pymc3.9.2 and ArviZ 0.9.0

* remove unused import

* add change to release notes

* SMC: refactor, speed-up and run multiple chains in parallel for diagnostics (pymc-devs#3981)

* first attempt to vectorize smc kernel

* add ess, remove multiprocessing

* run multiple chains

* remove unused imports

* add more info to report

* minor fix

* test log

* fix type_num error

* remove unused imports update BF notebook

* update notebook with diagnostics

* update notebooks

* update notebook

* update notebook

* Honor discard_tuned_samples during KeyboardInterrupt (pymc-devs#3785)

* Honor discard_tuned_samples during KeyboardInterrupt

* Do not compute convergence checks without samples

* Add time values as sampler stats for NUTS (pymc-devs#3986)

* Add time values as sampler stats for NUTS

* Use float time counters for nuts stats

* Add timing sampler stats to release notes

* Improve doc of time related sampler stats

Co-authored-by: Alexandre ANDORRA <andorra.alexandre@gmail.com>

Co-authored-by: Alexandre ANDORRA <andorra.alexandre@gmail.com>

* Drop support for py3.6 (pymc-devs#3992)

* Drop support for py3.6

* Update RELEASE-NOTES.md

Co-authored-by: Colin <ColCarroll@users.noreply.github.com>

Co-authored-by: Colin <ColCarroll@users.noreply.github.com>

* Fix Mixture distribution mode computation and logp dimensions

Closes pymc-devs#3994.

* Add more info to divergence warnings (pymc-devs#3990)

* Add more info to divergence warnings

* Add dataclasses as requirement for py3.6

* Fix tests for extra divergence info

* Remove py3.6 requirements

* follow-up of py36 drop (pymc-devs#3998)

* Revert "Drop support for py3.6 (pymc-devs#3992)"

This reverts commit 1bf867e.

* Update README.rst

* Update setup.py

* Update requirements.txt

* Update requirements.txt

Co-authored-by: Adrian Seyboldt <aseyboldt@users.noreply.github.com>

* Show pickling issues in notebook on windows (pymc-devs#3991)

* Merge close remote connection

* Manually pickle step method in multiprocess sampling

* Fix tests for extra divergence info

* Add test for remote process crash

* Better formatting in test_parallel_sampling

Co-authored-by: Junpeng Lao <junpenglao@gmail.com>

* Use mp_ctx forkserver on MacOS

* Add test for pickle with dill

Co-authored-by: Junpeng Lao <junpenglao@gmail.com>

* Fix keep_size for arviz structures. (pymc-devs#4006)

* Fix posterior pred. sampling keep_size w/ arviz input.

Previously posterior predictive sampling functions did not properly
handle the `keep_size` keyword argument when getting an xarray Dataset
as parameter.

Also extended these functions to accept InferenceData object as input.

* Reformatting.

* Check type errors.

Make errors consistent across sample_posterior_predictive and fast_sample_posterior_predictive, and add 2 tests.

* Add changelog entry.

Co-authored-by: Robert P. Goldman <rpgoldman@sift.net>

* SMC-ABC add distance, refactor and update notebook (pymc-devs#3996)

* update notebook

* move dist functions out of simulator class

* fix docstring

* add warning and test for automatic selection of sort sum_stat when using wassertein and energy distances

* update release notes

* fix typo

* add sim_data test

* update and add tests

* update and add tests

* add docs for interpretation of length scales in periodic kernel (pymc-devs#3989)

* fix the expression of periodic kernel

* revert change and add doc

* FIXUP: add suggested doc string

* FIXUP: revertchanges in .gitignore

* Fix Matplotlib type error for tests (pymc-devs#4023)

* Fix for issue 4022.

Check for support for `warn` argument in `matplotlib.use()` call. Drop it if it causes an error.

* Alternative fix.

* Switch from pm.DensityDist to pm.Potential to describe the likelihood in MLDA notebooks and script examples. This is done because of the bug described in arviz-devs/arviz#1279. The commit also changes a few parameters in the MLDA .py example to match the ones in the equivalent notebook.

* Remove Dirichlet distribution type restrictions (pymc-devs#4000)

* Remove Dirichlet distribution type restrictions

Closes pymc-devs#3999.

* Add missing Dirichlet shape parameters to tests

* Remove Dirichlet positive concentration parameter constructor tests

This test can't be performed in the constructor if we're allowing Theano-type
distribution parameters.

* Add a hack to statically infer Dirichlet argument shapes

Co-authored-by: Brandon T. Willard <brandonwillard@users.noreply.github.com>

Co-authored-by: Bill Engels <w.j.engels@gmail.com>
Co-authored-by: Oriol Abril-Pla <oriol.abril.pla@gmail.com>
Co-authored-by: Osvaldo Martin <aloctavodia@gmail.com>
Co-authored-by: Adrian Seyboldt <aseyboldt@users.noreply.github.com>
Co-authored-by: Alexandre ANDORRA <andorra.alexandre@gmail.com>
Co-authored-by: Colin <ColCarroll@users.noreply.github.com>
Co-authored-by: Brandon T. Willard <brandonwillard@users.noreply.github.com>
Co-authored-by: Junpeng Lao <junpenglao@gmail.com>
Co-authored-by: rpgoldman <rpgoldman@goldman-tribe.org>
Co-authored-by: Robert P. Goldman <rpgoldman@sift.net>
Co-authored-by: Tirth Patel <tirthasheshpatel@gmail.com>
Co-authored-by: Brandon T. Willard <971601+brandonwillard@users.noreply.github.com>
  • Loading branch information
13 people authored Jul 22, 2020
1 parent db022a5 commit 798b89f
Show file tree
Hide file tree
Showing 39 changed files with 8,651 additions and 2,524 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,4 @@ benchmarks/results/
pytestdebug.log
.dir-locals.el
.pycheckers

15 changes: 13 additions & 2 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
# Release Notes

## PyMC3 3.9.x (on deck)
*waiting for contributions*

### Maintenance
- Fix an error on Windows and Mac where error message from unpickling models did not show up in the notebook, or where sampling froze when a worker process crashed (see [#3991](https://github.com/pymc-devs/pymc3/pull/3991)).

### Documentation
- Notebook on [multilevel modeling](https://docs.pymc.io/notebooks/multilevel_modeling.html) has been rewritten to showcase ArviZ and xarray usage for inference result analysis (see [#3963](https://github.com/pymc-devs/pymc3/pull/3963))

### New features
- Introduce optional arguments to `pm.sample`: `mp_ctx` to control how the processes for parallel sampling are started, and `pickle_backend` to specify which library is used to pickle models in parallel sampling when the multiprocessing cnotext is not of type `fork`. (see [#3991](https://github.com/pymc-devs/pymc3/pull/3991))
- Add sampler stats `process_time_diff`, `perf_counter_diff` and `perf_counter_start`, that record wall and CPU times for each NUTS and HMC sample (see [ #3986](https://github.com/pymc-devs/pymc3/pull/3986)).
- Extend `keep_size` argument handling for `sample_posterior_predictive` and `fast_sample_posterior_predictive`, to work on arviz InferenceData and xarray Dataset input values. (see [PR #4006](https://github.com/pymc-devs/pymc3/pull/4006) and [Issue #4004](https://github.com/pymc-devs/pymc3/issues/4004).
- SMC-ABC: add the wasserstein and energy distance functions. Refactor API, the distance, sum_stats and epsilon arguments are now passed `pm.Simulator` instead of `pm.sample_smc`. Add random method to `pm.Simulator`. Add option to save the simulated data. Improves LaTeX representation [#3996](https://github.com/pymc-devs/pymc3/pull/3996)

## PyMC3 3.9.2 (24 June 2020)
### Maintenance
- Warning added in GP module when `input_dim` is lower than the number of columns in `X` to compute the covariance function (see [#3974](https://github.com/pymc-devs/pymc3/pull/3974)).
- Pass the `tune` argument from `sample` when using `advi+adapt_diag_grad` (see issue [#3965](https://github.com/pymc-devs/pymc3/issues/3965), fixed by [#3979](https://github.com/pymc-devs/pymc3/pull/3979)).
- Add simple test case for new coords and dims feature in `pm.Model` (see [#3977](https://github.com/pymc-devs/pymc3/pull/3977)).
- Add simple test case for new coords and dims feature in `pm.Model` (see [#3977](https://github.com/pymc-devs/pymc3/pull/3977)).
- Require ArviZ >= 0.9.0 (see [#3977](https://github.com/pymc-devs/pymc3/pull/3977)).

_NB: The `docs/*` folder is still removed from the tarball due to an upload size limit on PyPi._
Expand Down
173 changes: 112 additions & 61 deletions docs/source/notebooks/Bayes_factor.ipynb

Large diffs are not rendered by default.

535 changes: 357 additions & 178 deletions docs/source/notebooks/GP-Latent.ipynb

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions docs/source/notebooks/MLDA_benchmarks_tuning.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -231,9 +231,9 @@
" # convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" # use a Potential for the likelihood\n",
" ll = logl[j]\n",
" pm.DensityDist('likelihood', lambda v: ll(v), observed={'v': theta})\n",
" pm.Potential('likelihood', ll(theta))\n",
"\n",
" coarse_models.append(cmodel)\n",
" \n",
Expand All @@ -248,8 +248,8 @@
" # Convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" pm.DensityDist('likelihood', lambda v: logl[-1](v), observed={'v': theta})\n",
" ## use a Potential for the likelihood\n",
" pm.Potential('likelihood', logl[-1](theta))\n",
" \n",
" return model, coarse_models, true_parameters"
]
Expand Down Expand Up @@ -2716,7 +2716,7 @@
"source": [
"Generally, the optimal subsampling rate depends on the complexity of the fine posterior. The more complex the posterior, the more samples are needed to generate a decent proposal. The reason is that the MLDA sampler is based on the assumption that the coarse proposal samples (i.e. the samples sent from the coarse chain to the fine one) are independent from each other. In order to generate independent samples, it is necessary to run the coarse chain for an adequate number of iterations to get rid of autocorrelation. The more complex the posterior the more iterations are needed and thus a larger subsampling rate.\n",
"\n",
"Note that in cases where you have more than one coarse model/level, MLDA allows you to choose a different subsampling rate for each coarse level (as a list of integers when you instantiate the stepper)."
"Note that in cases where you have more than one coarse model/level, MLDA allows you to choose a different subsampling rate for each coarse level (as a list of integers when you instantiate the stepper)."
]
}
],
Expand Down
8 changes: 4 additions & 4 deletions docs/source/notebooks/MLDA_multilevel_groundwater_flow.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -352,9 +352,9 @@
" # convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" # use a Potential for the likelihood\n",
" ll = logl[j]\n",
" pm.DensityDist('likelihood', lambda v: ll(v), observed={'v': theta})\n",
" pm.Potential('likelihood', ll(theta))\n",
"\n",
" coarse_models.append(model)\n"
]
Expand Down Expand Up @@ -599,8 +599,8 @@
" # Convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" pm.DensityDist('likelihood', lambda v: logl[-1](v), observed={'v': theta})\n",
" # use a Potential for the likelihood\n",
" pm.Potential('likelihood', logl[-1](theta))\n",
"\n",
" # Initialise an MLDA step method object, passing the subsampling rate and\n",
" # coarse models list\n",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,9 +352,9 @@
" # convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" # use a Potential for the likelihood\n",
" ll = logl[j]\n",
" pm.DensityDist('likelihood', lambda v: ll(v), observed={'v': theta})\n",
" pm.Potential('likelihood', ll(theta))\n",
"\n",
" coarse_models.append(model)\n"
]
Expand Down Expand Up @@ -557,8 +557,8 @@
" # Convert m and c to a tensor vector\n",
" theta = tt.as_tensor_variable(parameters)\n",
"\n",
" # use a DensityDist (use a lamdba function to \"call\" the Op)\n",
" pm.DensityDist('likelihood', lambda v: logl[-1](v), observed={'v': theta})\n",
" # use a Potential for the likelihood\n",
" pm.Potential('likelihood', logl[-1](theta))\n",
"\n",
" # Initialise an MLDA step method object, passing the subsampling rate and\n",
" # coarse models list\n",
Expand Down
339 changes: 138 additions & 201 deletions docs/source/notebooks/SMC-ABC_Lotka-Volterra_example.ipynb

Large diffs are not rendered by default.

Loading

0 comments on commit 798b89f

Please sign in to comment.