Releases: scikit-hep/pyhf
v0.7.6
This is a patch release from v0.7.5
β v0.7.6
.
Fixes
- For the JAX backend access
jax.config
from thejax
top level API to avoid support issues withjax
andjaxlib
v0.4.20+
. (PR #2376) - Add information in the warnings for
pyhf.infer.test_statistics.qmu
andpyhf.infer.test_statistics.qmu_tilde
that provides users with the higher levelpyhf.infer
APIskwarg
to set the correct test statistic. (PR #2390) - Correct the variable assignment for the one-sigma and two-sigma limit band
artists inpyhf.contrib.viz.brazil.plot_brazil_band
to match the stated return structure. (PR #2411) - In the
pyhf.infer
module, correct thefixed_params
type in the docs to be totuple
orlist
. (PR #2420)
Contributors
v0.7.6
benefited from contributions from:
- Lorenz Gaertner (@lorenzennio)
What's Changed
- ci(backport): Update GitHub Actions by @matthewfeickert in #2421
- ci: Use --find-links to install jax and jaxlib on Python 3.7 by @matthewfeickert in #2422
- fix(backport): Access jax.config from jax by @matthewfeickert in #2423
- chore(backport): Update pre-commit hooks by @matthewfeickert in #2424
- docs(backport): Update citations and README by @matthewfeickert in #2425
- feat(backport): Improve warnings for qmu and qmu_tilde for the set POI bounds by @matthewfeickert in #2426
- fix(backport): Correct variable assignment for limit band artists by @matthewfeickert in #2427
- docs(backport): Correct fixed_params type to tuple or list by @matthewfeickert in #2428
- docs: Add v0.7.6 release notes by @matthewfeickert in #2430
Full Changelog: v0.7.5...v0.7.6
v0.7.5
This is a patch release from v0.7.4
β v0.7.5
.
Fixes
- Remove operating system dependent components of schema validation to allow for validation on Windows. (PR #2357)
What's Changed
- chore(backport): Update GitHub Actions and pre-commit hooks by @matthewfeickert in #2359
- docs(backport): Update citations and docs by @matthewfeickert in #2360
- fix(backport): Remove os-dependent pieces of schema validation by @matthewfeickert in #2361
- docs: Add v0.7.5 release notes by @matthewfeickert in #2362
- docs(backport): Update citations references with journal pubs through 2023-10 by @matthewfeickert in #2368
Full Changelog: v0.7.4...v0.7.5
v0.7.4
This is a patch release from v0.7.3
β v0.7.4
.
Fixes
-
Skip callbacks with dead weakrefs while iterating over callbacks in
pyhf
events, likepyhf.set_backend
, to avoid the possibility of accessing dead weakrefs before they could be garbage collected. (PR #2310)The fixed bug was subtle and occurred nondeterministically when the
pyhf.tensorlib
was changed repeatedly causing dead weakrefs to be accessed before Python's garbage collection could remove them. Most users should be unaffected.
Contributors
v0.7.4
benefited from contributions from:
- Daniel Werner
- Jonas Rembser
What's Changed
- chore(backport): Update pre-commit hooks by @matthewfeickert in #2317
- ci(backport): Update GitHub Actions by @matthewfeickert in #2318
- docs(backport): Update docs requirements and use citations by @matthewfeickert in #2320
- fix(backport): Skip callbacks with dead weakrefs while iterating over callbacks by @matthewfeickert in #2321
- docs: Add v0.7.4 release notes by @matthewfeickert in #2322
- docs(backport): Update citations references and model records by @matthewfeickert in #2325
Full Changelog: v0.7.3...v0.7.4
v0.7.3
This is a patch release from v0.7.2
β v0.7.3
.
Fixes
-
Use
np.prod
API overnp.product
asnp.product
is deprecated as of NumPyv1.25.0
. (PR #2242) -
Guard
pyhf.optimize.opt_minuit.minuit_optimizer
optimizer strategy fromNone
to ensureiminuit.Minuit.strategy
strategies are correctly handled. (PRs #2277, #2278)The fixed bug was subtle and only occurred for specific configurations of settings and arguments where
do_grad=False
was used (either explicitly by provided kwarg or implicitly through defaults). To determine if you might have been affected by it, check your code for setups like the following.# Bug is backend independent. JAX is selected as an example where # do_grad=False might be selected in response to the backend's value of # pyhf.tensorlib.default_do_grad being True. pyhf.set_backend("jax", pyhf.optimize.minuit_optimizer(strategy=0)) ... fit_result, opt_result = pyhf.infer.mle.fit( data, model, return_result_obj=True, do_grad=False ) assert opt_result.minuit.strategy.strategy == 0 # fails for pyhf v0.7.2
Full example that fails in
pyhf
v0.7.2
:import pyhf pyhf.set_backend("jax", pyhf.optimize.minuit_optimizer(strategy=0)) model = pyhf.simplemodels.uncorrelated_background( signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[3.0, 7.0] ) data = [51, 48] + model.config.auxdata # passing with strategy kwarg explicitly given fit_result, opt_result = pyhf.infer.mle.fit( data, model, return_result_obj=True, do_grad=False, strategy=0 ) minuit_strategy = opt_result.minuit.strategy.strategy print(f"# Minuit minimization strategy: {minuit_strategy}") assert minuit_strategy == 0 # strategy kwarg not given fit_result, opt_result = pyhf.infer.mle.fit( data, model, return_result_obj=True, do_grad=False ) minuit_strategy = opt_result.minuit.strategy.strategy print(f"# Minuit minimization strategy: {minuit_strategy}") assert minuit_strategy == 0 # fails for pyhf v0.7.2
Contributors
v0.7.3
benefited from contributions from:
- Alexander Held
- Daniel Werner
What's Changed
- fix(backport): Pass script_runner commands as a single sequence by @matthewfeickert in #2222
- docs(backport): Add sphinx_rtd_theme to extensions by @matthewfeickert in #2223
- ci(backport): Update GitHub Actions workflows by @matthewfeickert in #2279
- fix: Support JAX array API before and after JAX v0.4.1 by @matthewfeickert in #2280
- docs(backport): Update docs build requirements by @matthewfeickert in #2281
- chore(backport): Move to using Ruff for pre-commit by @matthewfeickert in #2282
- chore(backport): Update pre-commit hooks by @matthewfeickert in #2283
- fix(backport): Replace deprecated np.product by np.prod by @matthewfeickert in #2284
- docs(backport): Update use citations by @matthewfeickert in #2285
- docs(backport): Use SVG version of logo for docs by @matthewfeickert in #2286
- feat(backport): Use non-root default user for Docker image by @matthewfeickert in #2287
- fix(backport): Guard Minuit optimizer against provided strategy of None by @matthewfeickert in #2288
- docs: Add v0.7.3 release notes by @matthewfeickert in #2290
- docs(backport): Update models and journal publication citations by @matthewfeickert in #2295
- docs: Add v0.7.2 failing example to v0.7.3 release notes by @matthewfeickert in #2294
Full Changelog: v0.7.2...v0.7.3
v0.7.2
This is a patch release from v0.7.1
β v0.7.2
.
Important Notes
pyhf
became a NumFOCUS Affiliated Project on 2022-12-19.v0.7.1
is the first release to appear in a NumFOCUS Newsletter andv0.7.2
is the first release to appear as part of the Affiliated Projects page. (PR #2179)
Fixes
- If a multiple component parameter of interest is used raise
pyhf.exceptions.InvalidModel
. This guards against modifiers likeshapefactor
,shapesys
, andstaterror
from being used as POIs. (PR #2197) - Use
typing.TYPE_CHECKING
guard to avoid causing aModuleNotFoundError
when the version of NumPy installed is older than v1.21.0, which is the first NumPy release to includenumpy.typing
. (PR #2208)
Contributors
v0.7.2
benefited from contributions from:
- Alexander Held
What's Changed
- ci(backport): Use gh-action-pypi-publish v1.7.0+ APIs by @matthewfeickert in #2178
- docs(backport): Add NumFOCUS Affiliated Project to README by @matthewfeickert in #2180
- docs(backport): Use Plausible for page visit statistics by @matthewfeickert in #2188
- docs(backport): Add use citations through April 2023 by @matthewfeickert in #2202
- fix: Disallow TensorFlow Probability v0.20.0 by @matthewfeickert in #2203
- ci(backport): Update CI workflows and use Trusted Publishers by @matthewfeickert in #2204
- docs(backport): Use jupyterlite-sphinx to embed JupyterLite in docs by @matthewfeickert in #2205
- docs(backport): Add dev instructions and fix typos by @matthewfeickert in #2206
- docs(backport): Update talk list and release checklist by @matthewfeickert in #2211
- fix(backport): Catch use of multi-component parameters as POI by @matthewfeickert in #2212
- fix(backport): Add TYPE_CHECKING guard for numpy.typing by @matthewfeickert in #2213
- docs: Add v0.7.2 release notes by @matthewfeickert in #2214
Full Changelog: v0.7.1...v0.7.2
v0.7.1
This is a patch release from v0.7.0
β v0.7.1
.
Important Notes
- All backends are now fully compatible and tested with Python 3.11. (PR #2145)
- The
tensorflow
extra ('pyhf[tensorflow]'
) now automatically installstensorflow-macos
for Apple silicon machines. (PR #2119)
Fixes
- Raise
NotImplementedError
when attempting to convert a XML workspace that contains no data. (PR #2109)
Contributors
v0.7.1
benefited from contributions from:
- Alexander Held
What's Changed
- fix: Skip ReadTheDocs verions during Sphinx link check by @matthewfeickert in #2031
- fix: Use
jax.errors
API asjax._src
removed from public namespace by @matthewfeickert in #2034 - build(backport): Switch to using Hatchling as build backend by @matthewfeickert in #2148
- chore(backport): Update pre-commit hooks by @matthewfeickert in #2150
- ci: Run CI and packaging workflows on release branch PRs by @matthewfeickert in #2151
- docs(backport): Update JAX backend docstring types to jax.Array by @matthewfeickert in #2152
- ci(backport): Add workflow input for bump version branch by @matthewfeickert in #2157
- chore(backport): Update pre-commit hooks and dependabot updates by @matthewfeickert in #2163
- docs(backport): Add use citations and general citations by @matthewfeickert in #2164
- test(backport): Use pytest.raises match argument to check Error messages by @matthewfeickert in #2165
- fix(backport): Raise error when converting xml workspaces without data by @matthewfeickert in #2166
- docs: Add v0.7.1 release notes by @matthewfeickert in #2168
- docs(backport): Add ATLAS search for gluinos in multi-b final states statistical model record by @matthewfeickert in #2170
- docs(backport): Update use citations references to include journal publications by @matthewfeickert in #2172
- chore: Update codemeta by @matthewfeickert in #2173
Full Changelog: v0.7.0...v0.7.1
v0.7.0
This is a minor release from v0.6.3
β v0.7.0
.
Important Notes
-
Please note this release has API breaking changes and carefully read these notes while updating your code to the
v0.7.0
API. -
All backends are now fully compatible and tested with Python 3.10. (PR #1809)
-
The
pyhf.tensorlib.poisson
API now allows for the expected rate parameterlam
to be0
in the case that the observed eventsn
is0
given that the limit$$\lim_{\lambda \to 0} ,\mathrm{Pois}(n | \lambda)$$ is well defined. (PR #1657) -
pyhf.readxml.parse
now supports reading of XML configurations with absolute paths. To support this,pyhf xlm2json
now has a-v/--mount
option. (PR #1909) -
Support for model specifications without a parameter of interest defined is added. (PRs #1638, #1636)
-
The
pyhf.parameters.paramsets
classessuggested_fixed
attribute behavior has been updated. To access the behavior used inpyhf
v0.6.x
use thesuggested_fixed_as_bool
attribute. (PR #1639) -
pyhf.pdf._ModelConfig.par_names
is changed to be a property attribute. (PR #2027) -
The order of model parameters is now sorted by model parameter name. (PR #1625)
-
Support for writing user custom modifiers is added. (PRs #1625, #1644)
-
Performance in
pyhf.readxml
is increased by improvements topyhf.readxml.import_root_histogram
. (PR #1691) -
pyhf.contrib.utils.download
is now more robust to different target file types. (PRs #1697, #1704) -
A
pyhf.default_backend
has been added that is configurable through adefault
kwarg inpyhf.set_backend
. (PR #1646) This is part of work to makepyhf
fully automatic differentiable. (Issue #882) -
Schema validation now allows for both
list
andpyhf.tensorlib
objects to exist in the model specification. (PR #1647) -
The minimum required dependencies have been updated to support added features:
-
The minimum required backend versions have been updated to support added features:
- JAX backend requires
jax>=0.2.10
,jaxlib>=0.1.61
(PR #1962) - PyTorch backend requires
torch>=1.10.0
(PR #1657) - TensorFlow backend requires
tensorflow>=2.7.0
,tensorflow-probability>=0.11.0
(PRs #1962, #1657) - iminuit optimizer requires
iminuit>=2.7.0
(PR #1895) -
'xmlio'
extra requiresuproot>=4.1.1
(PR #1567)
- JAX backend requires
Fixes
-
Use improvements to
jsonschema.RefResolver
to avoidjsonschema.exceptions.RefResolutionError
. (PR #1976) -
Use the conditional maximum likelihood estimators of the nuisance parameters to create the sampling distributions for
pyhf.infer.calculators.ToyCalculator
. (PR #1610) This follows the joint recommendations of the ATLAS and CMS experiments in Procedure for the LHC Higgs boson search combination in Summer 2011.
Features
Python API
-
The following functions have been added to the
pyhf.tensorlib
API: -
pyhf.readxml.parse
now supports reading of XML configurations with absolute paths with the addition of themounts
optional argument. (PR #1909) -
Support for overriding the paths for finding schemas is added, using the
pyhf
installed location as a base viapyhf.utils.schemas
. (PRs #1753, #1818)>>> from pathlib import Path >>> import pyhf.schema >>> current_schema_path = pyhf.schema.path >>> current_schema_path PosixPath('/path/to/your/venv/lib/python3.X/site-packages/pyhf/schemas') >>> custom_schema_path = Path("/path/to/custom/pyhf/schema") >>> with pyhf.schema(custom_schema_path): ... print(repr(pyhf.schema.path)) ... PosixPath('/path/to/custom/pyhf/schema') >>> pyhf.schema.path PosixPath('/path/to/your/venv/lib/python3.X/site-packages/pyhf/schemas')
-
In
pyhf.workspace.Workspace.model
the parameter of interest specified in the measurement may now be overridden using the addedpoi_name
kwarg. (PR #1636) -
The
pyhf.parameters.paramsets
classessuggested_fixed
attribute behavior has been updated to return alist
ofbool
of lengthn_parameters
. To access the behavior used inpyhf
v0.6.x
use thesuggested_fixed_as_bool
attribute. (PR #1639) -
pyhf.pdf._ModelConfig.par_names
is changed to be a property attribute. (PR #2027) -
The order of model parameters is now sorted by model parameter name. (PR #1625)
>>> import pyhf >>> model = pyhf.simplemodels.correlated_background( ... signal=[12.0, 11.0], ... bkg=[50.0, 52.0], ... bkg_up=[45.0, 57.0], ... bkg_down=[55.0, 47.0], ... ) >>> model.config.par_order ['correlated_bkg_uncertainty', 'mu'] >>> model.config.par_names ['correlated_bkg_uncertainty', 'mu']
-
Support for writing user custom modifiers is added.
(PRs #1625, #1644) This is still in the stage where it is targeted at expert users. -
{modifier}_builder
classes are added for all modifiers. (PRs #1625) For example,pyhf.modifiers.histosys.histosys_builder
. -
When using
pyhf.writexml
and thenormfactor
parameter config is missinginits
orbounds
, fall back to using default values. (PRs #1819) -
Supported options for
pyhf.infer.hypotest
can now be passed as kwargs through thepyhf.infer.intervals.upper_limits.upper_limit
API. (PR #1613) This now enables things like usingpyhf.infer.calculators.ToyCalculator
as the calculator used for the hypothesis test scan:>>> import numpy as np >>> import pyhf >>> pyhf.set_backend("jax") >>> model = pyhf.simplemodels.uncorrelated_background( ... signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[3.0, 7.0] ... ) >>> observations = [51, 48] >>> data = pyhf.tensorlib.astensor(observations + model.config.auxdata) >>> scan = np.linspace(0, 5, 21) >>> obs_limit, exp_limits, (scan, results) = pyhf.infer.intervals.upper_limits.upper_limit( ... data, model, scan, return_results=True, calctype="toybased", ntoys=3000 ... )
-
Allow for fit parameter values from required fits in
pyhf.infer.test_statistics
functions to be returned by use ofreturn_fitted_pars
kwarg with thepyhf.infer.test_statistics
functions andreturn_calculator
kwarg withpyhf.infer.hypotest
. (PR #1554) -
A
validate
kwarg has been added topyhf.workspace.Workspace
and
pyhf.pdf.Model
to allow skipping validation. (PR #1646) This should only be used by expert users who understand the risks. -
A
pyhf.default_backend
has been added that is configurable through adefault
kwarg inpyhf.set_backend
. (PR #1646) This allows setting thepyhf.default_backend
to be different from the value ofpyhf.tensorlib
returned bypyhf.get_backend
, which can be useful in situations where differentiable model construction is needed.>>> import jax >>> import pyhf >>> pyhf.set_backend("jax", default=True) >>> pyhf.set_backend("numpy") >>> pyhf.get_backend() (<pyhf.tensor.numpy_backend.numpy_backend object at 0x...>, <pyhf.optimize.scipy_optimizer object at 0x...>) >>> pyhf.default_backend <pyhf.tensor.jax_backend.jax_backend object at 0x...> >>> def example_op(x): ... return 2 * pyhf.default_backend.power(pyhf.default_backend.astensor(x), 3) ... >>> example_op([2.0]) DeviceArray([16.], dtype=float64) >>> jax.jacrev(jax.jit(example_op))([2.0]) [DeviceArray([24.], dtype=float64, weak_type=True)]
-
Schema validation now allows for both
list
andpyhf.tensorlib
objects to exist in the model specification. (PR #1647)>>> import pyhf >>> signal = pyhf.tensorlib.astensor([12.0, 11.0]) >>> background = pyhf.tensorlib.astensor([50.0, 52.0]) >>> background_uncertainty = pyhf.tensorlib.astensor([3.0, 7.0]) >>> model = pyhf.simplemodels.uncorrelated_background( ... signal=signal, bkg=background, bkg_uncertainty=background_uncertainty ... )
CLI API
-
The
pyhf xlm2json
CLI API now has a-v/--mount
option to support reading XML configurations with absolute paths. (PR #1909) Similar to Docker volume mounts, the options allows a user to pass two fields separated by a colon (:
). The first field is a local path and the second field is the absolute path specified in the XML configuration to be substituted. Without the-v/--mount
option a user would have to manually edit the absolute path in each XML file it appeared in!pyhf xml2json \ --mount /local/path/to/workspace:/absolute/path/to/replace/inside/xml \ --output-file workspace.json \ workspace/analysis_config.xml
Deprecations
Python API
- The
pyhf.infer.intervals.upperlimit
API has been deprecated in favor ofpyhf.infer.intervals.upper_limits.upper_limit
.
Thepyhf.infer.intervals.upperlimit
API will removed inpyhf
v0.9.0
. (PR #1274)
Removals
Python API
-
The
pyhf.simplemodels.hepdata_like
API, deprecated sincepyhf
v0.6.2
, has been removed. (PR #1670) Use thepyhf.simplemodels.uncorrelated_background
API instead. -
pyhf.workspace.Workspace
'sparameters
attribute is removed in favor of usingpyhf.pdf._ModelConfig
'sparameters
. (PR #1625) -
`pyhf.works...
v0.7.0rc4
Notes
This is the fourth v0.7.0
release candidate. Please use this for API testing, and for testing correctness or performance for v0.7.0
.
To install the release candidate you can either use pip install
's --pre
flag
python -m pip install --upgrade --pre pyhf
or specify the version number exactly
python -m pip install --upgrade 'pyhf==0.7.0rc4'
What's Changed
- docs: Document Channel Summary Mixin by @kratsg in #1972
- docs: Harmonize docstring for test_stat in ToyCalculator by @kratsg in #1970
- feat: Add support for
_ModelConfig.set_poi(None)
to unset model POI by @kratsg in #1985 - chore: [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #1989
- fix: Add guards against shared shapesys paramsets by @kratsg in #1977
- feat: Add type hints for tensor manager by @kratsg in #1963
- fix: Form data through loop over channels for multichannel coupled histo notebook by @kratsg in #1974
- feat: Allow schema validation with tensor types by @kratsg in #1665
- fix: Guard against nan in test stat calculation by @matthewfeickert in #1993
- fix: Pin codemetapy to v0.3.5 for
--no-extras
functionality by @matthewfeickert in #1995 - ci: Install release candidates for 'current release' test workflow by @matthewfeickert in #1996
- refactor: Use urllib.parse.urlsplit over urlparse by @matthewfeickert in #1997
Full Changelog: v0.7.0rc3...v0.7.0rc4
v0.7.0rc3
Notes
This is the third v0.7.0
release candidate. Please use this for API testing, and for testing correctness or performance for v0.7.0
.
To install the release candidate you can either use pip install
's --pre
flag
python -m pip install --upgrade --pre pyhf
or specify the version number exactly
python -m pip install --upgrade 'pyhf==0.7.0rc3'
What's Changed
- docs: Add typehint aliases by @kratsg in #1969
- fix: Base URI for jsonschema.RefResolver has better behavior by @kratsg in #1976
- build: Update lower bounds to jsonschema v4.15.0, importlib-resources v1.4.0 by @matthewfeickert in #1979
- fix: Add PR number to Semantic PR Title Check concurrency group by @kratsg in #1981
- feat: Promote
validate
kwarg to top-level functions inpyhf.simplemodels
by @phinate in #1858 - docs: Clarify absolute/relative for histosys by @kratsg in #1971
New Contributors
Full Changelog: v0.7.0rc2...v0.7.0rc3
v0.7.0rc2
Notes
This is the second v0.7.0
release candidate. Please use this for API testing, and for testing correctness or performance for v0.7.0
.
To install the release candidate you can either use pip install
's --pre
flag
python -m pip install --upgrade --pre pyhf
or specify the version number exactly
python -m pip install --upgrade 'pyhf==0.7.0rc2'
What's Changed
- chore: [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #1913
- fix: Disallow Sphinx v5.1.0 to avoid 'exception: pop from an empty deque' by @matthewfeickert in #1925
- build(deps): bump pypa/gh-action-pypi-publish from 1.5.0 to 1.5.1 by @dependabot in #1924
- chore: [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #1927
- docs: Update lower bound on Sphinx to v5.1.1 by @matthewfeickert in #1926
- fix: Manually set uncertainties for fixed parameters to 0 by @matthewfeickert in #1919
- docs: Add July 2022 use citations by @matthewfeickert in #1929
- docs: Add use citation from Lucas Santiago Borgna's Ph.D. thesis by @matthewfeickert in #1930
- ci: Add yesqa pre-commit hook by @matthewfeickert in #1932
- fix: Coverage for importing XML channels with no data by @kratsg in #1931
- fix: Handle importing XML measurements with no POI attribute by @kratsg in #1933
- feat: Handle absolute paths in XML config files (xml2json / readxml) by @kratsg in #1909
- ci: Report coverage for all Python versions by @matthewfeickert in #1936
- feat: Enable typehints in pre-commit and add typehints to readxml by @kratsg in #1934
- test: Ignore TYPE_CHECKING for coverage by @kratsg in #1937
- build: Set lower bound of typing-extensions to v3.7.4 by @matthewfeickert in #1938
- ci: Make
build
error on warnings by @matthewfeickert in #1887 - chore: Remove 'lint' extra from setup.py by @matthewfeickert in #1943
- refactor: Use string literal types of generic builtins for type checking by @matthewfeickert in #1942
- build: Update git archival options to support auto versioning by @matthewfeickert in #1951
- ci: Use 'strict' option for twine check by @matthewfeickert in #1954
- feat: Validate workspace specification before accessing parts of it by @alexander-held in #1953
- ci: Deploy GitHub Pages docs directly using GitHub Actions by @matthewfeickert in #1955
- fix: Populate the schema cache with local
defs.json
again by @lhenkelm in #1917 - feat: Add typehints to pyhf.tensor by @kratsg in #1940
- build: Update lower bound of click to v8.0.0 by @matthewfeickert in #1958
- build: Update lower bound of typing-extensions to v3.7.4.3 by @matthewfeickert in #1961
- build: Update lower bounds to tensorflow v2.7.0, jaxlib v0.1.61 by @matthewfeickert in #1962
- ci: Restrict deployments of environments to PR merges by @matthewfeickert in #1960
- docs: Add link to public-probability-models website by @matthewfeickert in #1956
- fix: Keep staterror from affecting multiple samples by @lukasheinrich in #1965
- ci: Publish to PyPI on publish of GitHub release by @matthewfeickert in #1968
Full Changelog: v0.7.0rc1...v0.7.0rc2