The objective of this release is to stabilize Pyro's interface and thereby make it safer to build high level components on top of Pyro.
Stability statement
- Behavior of documented APIs will remain stable across minor releases, except for bug fixes and features marked EXPERIMENTAL or DEPRECATED.
- Serialization formats will remain stable across patch releases, but may change across minor releases (e.g. if you save a model in 1.0.0, it will be safe to load it in 1.0.1, but not in 1.1.0).
- Undocumented APIs, features marked EXPERIMENTAL or DEPRECATED, and anything in`pyro.contrib` may change at any time (though we aim for stability).
- All deprecated features throw a `FutureWarning` and specify possible work-arounds. Features marked as deprecated will not be maintained, and are likely to be removed in a future release.
- If you want more stability for a particular feature, [contribute](https://github.com/pyro-ppl/pyro/blob/dev/CONTRIBUTING.md) a unit test.
New features
- [pyro.infer.Predictive](http://docs.pyro.ai/en/1.0.0/inference_algos.html#pyro.infer.predictive.Predictive) is a new utility for serving models, supporting jit tracing and serialization.
- [pyro.distributions.transforms](http://docs.pyro.ai/en/1.0.0/distributions.html#transforms) has many new transforms, and includes helper functions to easily create a variety of normalizing flows. The transforms library has also been reorganized.
- [pyro.contrib.timeseries](http://docs.pyro.ai/en/1.0.0/contrib.timeseries.html) is an experimental new module with fast Gaussian Process inference for univariate and multivariate time series and state space models.
- [pyro.nn.PyroModule](http://docs.pyro.ai/en/1.0.0/nn.html#module-pyro.nn.module) is an experimental new interface that adds Pyro effects to an `nn.Module`. `PyroModule` is already used internally by `AutoGuide`, `EasyGuide` `pyro.contrib.gp`, `pyro.contrib.timeseries`, and elsewhere.
- [FoldedDistribution]() is a new distribution factory, essentially equivalent to `TransformedDistribution(-, AbsTransform())` but providing a `.log_prob()` method.
- A new tutorial illustrates the usage of [pyro.contrib.oed](http://docs.pyro.ai/en/1.0.0/contrib.oed.html) in the context of adaptive election polling.
Breaking changes
- Autoguides have slightly changed interfaces:
- `AutoGuide` and `EasyGuide` are now `nn.Module`s and can be serialized separately from the param store. This enables serving via [torch.jit.trace_module](https://pytorch.org/docs/1.0.0/jit.html#torch.jit.trace_module).
- The `Auto*Normal` family of autoguides now have `init_scale` arguments, and `init_loc_fn` has better support. Autoguides no longer support initialization by writing directly to the param store.
- Many transforms have been renamed to enforce a consistent interface, such as the renaming of `InverseAutoregressiveFlow` to `AffineAutoregressive`.
- `pyro.generic` has been moved to a separate project [pyroapi](https://github.com/pyro-ppl/pyro-api).
- [poutine.do](http://docs.pyro.ai/en/1.0.0/poutine.html#pyro.poutine.do) has slightly changed semantics to follow Single World Intervention Graph semantics.
- `pyro.contrib.glmm` has been moved to `pyro.contrib.oed.glmm` and will eventually be replaced by [BRMP](https://github.com/pyro-ppl/brmp).
- Existing `DeprecationWarning`s have been promoted to `FutureWarning`s.
Deprecated features
- `pyro.random_module`: The `pyro.random_module` primitive has been deprecated in favor of [PyroModule](http://docs.pyro.ai/en/1.0.0/nn.html#pyro.nn.module.PyroModule) which can be used to create Bayesian modules from `torch.nn.Module` instances.
- `SVI.run`: The `SVI.run` method is deprecated and users are encouraged to use the [.step](http://docs.pyro.ai/en/1.0.0/inference_algos.html#pyro.infer.svi.SVI.step) method directly to run inference. For drawing samples from the posterior distribution, we recommend using the [Predictive](http://docs.pyro.ai/en/1.0.0/inference_algos.html#module-pyro.infer.predictive.Predictive) utility class, or directly by using the `trace` and `replay` effect handlers.
- `TracePredictive`: The `TracePredictive` class is deprecated in favor of [Predictive](http://docs.pyro.ai/en/1.0.0/inference_algos.html#module-pyro.infer.predictive.Predictive), that can be used to gather samples from the posterior and predictive distributions in SVI and MCMC.
- `mcmc.predictive`: This utility function has been absorbed into the more general [Predictive](http://docs.pyro.ai/en/1.0.0/inference_algos.html#module-pyro.infer.predictive.Predictive) class.