Releases: pymc-devs/pymc
v4.1.5
What's Changed
New Features & Bugfixes 🎉
- Constrain priors with symmetric mass distribution by @lucianopaz in #5981
- Fix AttributeError in HMC bad initial energy warning by @michaelosthege in #6037
Docs & Maintenance 🔧
- Fix problems with specifying target_accept and nuts kwargs by @mschmidt87 in #6018
- Typehints and updated docstring for Blackjax NUTS sampling function by @jhrcook in #6022
- Revert numpy warnings workaround by @maresb in #6025
- Revert "Proposal: Readd 3.7" by @twiecki in #6014
- fixed some docstring spacing around colons by @daniel-saunders-phil in #6027
- issue6004 fixed example in docstring for set_data by @rowangayleschaefer in #6028
- Updating docstrings of distributions by @vitaliset in #5998
- Pass user-provided NUTS kwargs to Numpyro by @jhrcook in #6021
- ⬆️ UPGRADE: Autoupdate pre-commit config by @twiecki in #6008
- [DOCS] Fix aesara core notebook
dprint
error by @juanitorduz in #6030 - Removed
assert_negative_support
deprecated function call #5997 by @dihanster in #6034 - Update aeppl dependency to 0.0.34 by @cluhmann in #6049
- Updated pymc.simulator docstring (typos, defaults, type description) by @daniel-saunders-phil in #6035
- Added networkx export functionality by @jonititan in #6046
New Contributors
- @mschmidt87 made their first contribution in #6018
- @daniel-saunders-phil made their first contribution in #6027
- @rowangayleschaefer made their first contribution in #6028
- @dihanster made their first contribution in #6034
- @jonititan made their first contribution in #6046
Full Changelog: v4.1.4...v4.1.5
v4.1.4
What's Changed
Docs & Maintenance 🔧
- Updated docstrings of some distribution classes inside multivariate.py by @pibieta in #5982
- Fix error when passing
coords
anddims
insampling_jax
by @bherwerth in #5983 - ⬆️ UPGRADE: Autoupdate pre-commit config by @twiecki in #5984
- Fix docker image build by @symeneses in #5977
- docs: Fix a few typos by @timgates42 in #5988
- contributing, jupyter style; author section more explicit by @reshamas in #6000
- Move
MLDA
topymc-experimental
by @michaelosthege in #6007 - Bump aesara to 2.7.8. by @twiecki in #5995
- Proposal: Readd 3.7 by @canyon289 in #6010
- Fix
pm.Interpolated
moment by @larryshamalama in #5986 - Bump aesara to 2.7.9 and aeppl to 0.0.33 by @twiecki in #6012
- Create arrow to observation nodes subject to arbitrary
dtype
casting inpm.model_to_graphviz
by @larryshamalama in #6011
New Contributors
Full Changelog: v4.1.3...v4.1.4
v4.1.3
What's Changed
Docs & Maintenance 🔧
- update docstrings in BetaBinomial class by @saurbhc in #5960
- Deprecate
assert_negative_support
by @vitaliset in #5963 - Updated docstrings to inform users that ODE solution may be slow. by @dmburt in #5965
- Add docker-image workflow by @symeneses in #5966
- ⬆️ UPGRADE: Autoupdate pre-commit config by @twiecki in #5967
- Provide a fix for
sample_blackjax_nuts
failing withchains=1
with prior parameters of different shapes by @bherwerth in #5969 - correct docstring in BetaBinomial Class by @SangamSwadiK in #5957
- Correct docs for Bernoulli, Poisson, Negative Binomial, Geometric and HyperGeometric by @SangamSwadiK in #5958
- update docstrings in ZeroInflatedPoisson, DiracDelta and OrderedLogistic classes by @saurbhc in #5962
- Bernoulli, OrderedProbit, ZeroInflatedBinomial, ZeroInflatedNegativeBinomial docstring update by @mariyayb in #5961
- Updated docstring for find_constrained_prior by @jlindbloom in #5964
- Point installation links to new installation guide in docs by @fonnesbeck in #5873
- Bump aesara dependency by @keesterbrugge in #5970
New Contributors
- @saurbhc made their first contribution in #5960
- @vitaliset made their first contribution in #5963
- @dmburt made their first contribution in #5965
- @bherwerth made their first contribution in #5969
- @mariyayb made their first contribution in #5961
- @jlindbloom made their first contribution in #5964
- @keesterbrugge made their first contribution in #5970
Full Changelog: v4.1.2...v4.1.3
v4.1.2
What's Changed
New Features & Bugfixes 🎉
- Fix model graph node name to remove RV from end only and not the start by @cscheffler in #5953
- Workaround to suppress (some) import warnings from NumPy by @michaelosthege in #5956
Docs & Maintenance 🔧
- include :: in name prefix check by @moshelooks in #5951
- correct docstrings in Binomial Class by @SangamSwadiK in #5952
- Bump Aesara to 2.7.5, aeppl to 0.0.32, update tests for aeppl by @maresb in #5955
New Contributors
- @moshelooks made their first contribution in #5951
- @cscheffler made their first contribution in #5953
- @SangamSwadiK made their first contribution in #5952
Full Changelog: v4.1.1...v4.1.2
v4.1.1
v4.1.0
What's Changed
Major Changes 🛠
- Dropped support for Python 3.7 and added support for Python 3.10 by @ricardoV94 in #5917
- Default to
pm.Data(mutable=False)
by @michaelosthege in #5944 - Deprecating
MLDA
in anticipation of migrating it topymc-experimental
by @michaelosthege in #5944
New Features & Bugfixes 🎉
- Small improvements to early NUTS behaviour by @aseyboldt in #5824
- Correct the order of
rvs
sent tocompile_dlogp
infind_MAP
by @quantheory in #5928 - Remove
nan_is_num
andnan_is_high
limiters fromfind_MAP
. by @quantheory in #5929 - Registering
_as_tensor_variable
converter for pandas objects by @juanitorduz in #5920 - Fix
model
andaesara_config
kwargs forpm.Model
by @ferrine in #5915
Docs & Maintenance 🔧
- Remove reference to old parameters in SMC docstring by @aloctavodia in #5914
- Get rid of python-version specific conda environments by @ricardoV94 in #5911
- Further fixes to VI docs by @ferrine in #5916
- Expand dimensionality notebook by @ricardoV94 in #5746
- Review docstrings checkmarcked as best practice by @OriolAbril in #5919
- Update conda environment name when running docker with jupyter notebook by @danhphan in #5933
- Update docs build and contributing instructions by @michaelosthege in #5938
- Add numpyro install to building docs instructions by @isms in #5936
- Add version string to conda install command. by @twiecki in #5946
New Contributors
- @quantheory made their first contribution in #5928
- @isms made their first contribution in #5936
Full Changelog: v4.0.1...v4.1.0
v4.0.1
What's Changed
Docs
- PyMC, Aesara and Aeppl intro notebook by @juanitorduz in #5721
- Moved wiki install guides to the docs by @fonnesbeck in #5869
- Fix Examples link in README by @ryanrussell in #5860
- Update dev guide by @michaelosthege in #5810
- Run black on core notebooks by @ricardoV94 in #5901
- Convert
rng_seeder
torandom_seed
in 'Prior and Posterior Predictive Checks' notebook by @hectormz in #5896 - Disable dark mode in docs by @ricardoV94 in #5904
- Fixed Student-t process docstring by @kunalghosh in #5853
Bugfixes & Maintenance
- Align advertised
Metropolis.stats_dtypes
with changes from 1e7d91f by @michaelosthege in #5882 - Added a check in
Empirical
approximation which does not yet supportInferenceData
inputs (see #5884) by @ferrine in #5874 - Compute some basic
Slice
sample stats by @ricardoV94 in #5889 - Fixed bug when sampling discrete variables with SMC by @ricardoV94 in #5887
- Removed
t
suffix from functions,Model
methods and properties by @cuchoi in #5863Model.logpt
→Model.logp
Model.dlogpt
→Model.dlogp
Model.d2logpt
→Model.d2logp
Model.datalogpt
→Model.datalogp
Model.varlogpt
→Model.varlogp
Model.observedlogpt
→Model.observedlogp
Model.potentiallogpt
→Model.potentiallogp
Model.varlogp_nojact
→Model.varlogp_nojac
logprob.joint_logpt
→logprob.joint_logp
- Remove self-directing arrow in observed nodes by @larryshamalama in #5893
- Update
clone_replace
strict
keyword name by @brandonwillard in #5849 - Renamed
pm.Constant
topm.DiracDelta
by @cluhmann in #5903 - Update
Dockerfile
to PyMC v4 by @danhphan in #5881 - Refactor
sampling_jax
postrocessing to avoid jit by @ferrine in #5908 - Fix
compile_fn
bug and reduce return type confusion by @michaelosthege in #5909 - Align conda envs and add Windows 3.9 env by @hectormz in #5895
- Include
ConstantData
inInferenceData
returned by JAX samplers by @danhphan in #5807 - Updated Aesara dependency to 2.7.3 by @ricardoV94 in #5910
New Contributors
- @kunalghosh made their first contribution in #5853
- @ryanrussell made their first contribution in #5860
- @hectormz made their first contribution in #5896
Full Changelog: v4.0.0...v4.0.1
PyMC 4.0.0
If you want a description of the highlights of this release, check out the release announcement on our new website.
Feel free to read it, print it out, and give it to people on the street -- because everybody has to know PyMC 4.0 is officially out 🍾
Do not miss 🚨
⚠️ The project was renamed to "PyMC". Now the library is installed as "pip install pymc" and imported likeimport pymc as pm
. See this migration guide for more details.⚠️ Theano-PyMC has been replaced with Aesara, so all external references totheano
andtt
need to be replaced withaesara
andat
, respectively (see 4471).⚠️ Support for JAX and JAX samplers, also allows sampling on GPUs. This benchmark shows speed-ups of up to 11x.⚠️ The GLM submodule was removed, please use Bambi instead.⚠️ PyMC now requires SciPy version>= 1.4.1
(see #4857).
v3 features not yet working in v4 ⏳
- MvNormalRandomWalk, MvStudentTRandomWalk, GARCH11 and EulerMaruyama distributions (see #4642)
- Nested Mixture distributions (see #5533)
pm.sample_posterior_predictive_w
(see #4807)- Partially observed Multivariate distributions (see #5260)
New features 🥳
-
Distributions:
-
Univariate censored distributions are now available via
pm.Censored
. #5169 -
The
CAR
distribution has been added to allow for use of conditional autoregressions which often are used in spatial and network models. -
Added a
logcdf
implementation for the Kumaraswamy distribution (see #4706). -
The
OrderedMultinomial
distribution has been added for use on ordinal data which are aggregated by trial, like multinomial observations, whereasOrderedLogistic
only accepts ordinal data in a disaggregated format, like categorical observations (see #4773). -
The
Polya-Gamma
distribution has been added (see #4531). To make use of this distribution, thepolyagamma>=1.3.1
library must be installed and available in the user's environment. -
pm.DensityDist
can now accept an optionallogcdf
keyword argument to pass in a function to compute the cummulative density function of the distribution (see 5026). -
pm.DensityDist
can now accept an optionalmoment
keyword argument to pass in a function to compute the moment of the distribution (see 5026). -
Added an alternative parametrization,
logit_p
topm.Binomial
andpm.Categorical
distributions (see 5637).
-
-
Model dimensions:
- The dimensionality of model variables can now be parametrized through either of
shape
ordims
(see #4696):- With
shape
the length of dimensions must be given numerically or as scalar AesaraVariables
. Numeric entries inshape
restrict the model variable to the exact length and re-sizing is no longer possible. dims
keeps model variables re-sizeable (for example throughpm.Data
) and leads to well defined coordinates inInferenceData
objects.- An
Ellipsis
(...
) in the last position ofshape
ordims
can be used as short-hand notation for implied dimensions.
- With
- New features for
pm.Data
containers:- With
pm.Data(..., mutable=False)
, or by usingpm.ConstantData()
one can now createTensorConstant
data variables. These can be more performant and compatible in situations where a variable doesn't need to be changed viapm.set_data()
. See #5295. If you do need to change the variable, usepm.Data(..., mutable=True)
, orpm.MutableData()
. - New named dimensions can be introduced to the model via
pm.Data(..., dims=...)
. For mutable data variables (see above) the lengths of these dimensions are symbolic, so they can be re-sized viapm.set_data()
. pm.Data
now passes additional kwargs toaesara.shared
/at.as_tensor
. #5098.
- With
- The length of
dims
in the model is now tracked symbolically throughModel.dim_lengths
(see #4625).
- The dimensionality of model variables can now be parametrized through either of
-
Sampling:
⚠️ Random seeding behavior changed (see #5787)!- Sampling results will differ from those of v3 when passing the same
random_seed
as before. They will be consistent across subsequent v4 releases unless mentioned otherwise. - Sampling functions no longer respect user-specified global seeding! Always pass
random_seed
to ensure reproducible behavior. random_seed
now accepts RandomState and Generators besides integers.
- Sampling results will differ from those of v3 when passing the same
- A small change to the mass matrix tuning methods jitter+adapt_diag (the default) and adapt_diag improves performance early on during tuning for some models. #5004
- New experimental mass matrix tuning method jitter+adapt_diag_grad. #5004
- Support for samplers written in JAX:
- Adding support for numpyro's NUTS sampler via
pymc.sampling_jax.sample_numpyro_nuts()
- Adding support for blackjax's NUTS sampler via
pymc.sampling_jax.sample_blackjax_nuts()
(see #5477) pymc.sampling_jax
samplers supportlog_likelihood
,observed_data
, andsample_stats
in returnedInferenceData
object (see #5189)- Adding support for
pm.Deterministic
inpymc.sampling_jax
(see #5182)
- Adding support for numpyro's NUTS sampler via
-
Miscellaneous:
- The new
pm.find_constrained_prior
function can be used to find optimized prior parameters of a distribution under some
constraints (e.g lower and upper bound). See #5231. - Nested models now inherit the parent model's coordinates. #5344
softmax
andlog_softmax
functions added tomath
module (see #5279).- Added the low level
compile_forward_sampling_function
method to compile the aesara function responsible for generating forward samples (see #5759).
- The new
Expected breaking changes 💔
pm.sample(return_inferencedata=True)
is now the default (see #4744).- ArviZ
plots
andstats
wrappers were removed. The functions are now just available by their original names (see #4549 and3.11.2
release notes). pm.sample_posterior_predictive(vars=...)
kwarg was removed in favor ofvar_names
(see #4343).ElemwiseCategorical
step method was removed (see #4701)LKJCholeskyCov
'scompute_corr
keyword argument is now set toTrue
by default (see#5382)- Alternative
sd
keyword argument has been removed from all distributions.sigma
should be used instead (see #5583).
Read on if you're a developer. Or curious. Or both.
Unexpected breaking changes (action needed) 😲
Very important ⚠️
pm.Bound
interface no longer accepts a callable class as argument, instead it requires an instantiated distribution (created via the.dist()
API) to be passed as an argument. In addition, Bound no longer returns a class instance but works as a normal PyMC distribution. Finally, it is no longer possible to do predictive random sampling from Bounded variables. Please, consult the new documentation for details on how to use Bounded variables (see 4815).- BART has received various updates (5091, 5177, 5229, 4914) but was removed from the main package in #5566. It is now available from pymc-experimental.
- Removed
AR1
.AR
of order 1 should be used instead. (see 5734). - The
pm.EllipticalSlice
sampler was removed (see #5756). BaseStochasticGradient
was removed (see #5630)pm.Distribution(...).logp(x)
is nowpm.logp(pm.Distribution(...), x)
.pm.Distribution(...).logcdf(x)
is nowpm.logcdf(pm.Distribution(...), x)
.pm.Distribution(...).random(size=x)
is nowpm.draw(pm.Distribution(...), draws=x)
.pm.draw_values(...)
and `pm.genera...
4.0.0 beta 6
What's Changed
- Implemented default transform for Mixtures by @ricardoV94 in #5636
- Scope separator for netcdf by @ferrine in #5663
- Fix default update bug by @ricardoV94 in #5667
- Pandas dependency was removed by @thomasjpfan in #5633
- Recognize cast data in InferenceData by @zaxtax in #5646
- Updated docstrings of multiple distributions by @purna135 in #5595, #5596 and #5600
- Refine Interval docstrings and fix typo by @ricardoV94 in #5640
- Add test for interactions between missing, default and explicit updates in
compile_pymc
by @ricardoV94 in #5645 - Test reshape from observed by @ricardoV94 in #5670
- Upgraded all CI cache actions to v3 by @michaelosthege in #5647
Full Changelog: v4.0.0b5...v4.0.0b6
4.0.0 beta 5
What's Changed
- Generalize multinomial moment to arbitrary dimensions by @markvrma in #5476
- Remove sd optional kwarg from distributions by @purna135 in #5583
- Improve scoped models by @ferrine in #5607
- Add helper wrapper aound Interval transform by @ricardoV94 in #5347
- Rename
logp_transform
to_get_default_transform
by @ricardoV94 in #5612 - Do not set RNG updates inplace in compile_pymc by @ricardoV94 in #5615
- Refine trigger filter for both PRs and pushes by @michaelosthege in #5619
- Update contributing guide with etiquette section by @michaelosthege in #5611
- Combine test workflows into one by @michaelosthege in #5623
- Raise ValueError if random variables are present in the logp graph by @ricardoV94 in #5614
- Run float32 jobs separately by @michaelosthege in #5630
- Bring back sampler argument target_accept by @aloctavodia in #5622
- Parametrize Binomial and Categorical distributions via logit_p by @purna135 in #5637
- Remove SGMCMC and fix flaky mypy results by @michaelosthege in #5631
Full Changelog: v4.0.0b4...v4.0.0b5