Name | pyhf JSON |
Version |
0.7.5
JSON |
| download |
home_page | |
Summary | pure-Python HistFactory implementation with tensors and autodiff |
upload_time | 2023-10-26 17:27:44 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.7 |
license | Apache-2.0 |
keywords |
fitting
jax
numpy
physics
pytorch
scipy
tensorflow
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/pyhf-logo.svg
:alt: pyhf logo
:width: 320
:align: center
pure-python fitting/limit-setting/interval estimation HistFactory-style
=======================================================================
|GitHub Project| |DOI| |JOSS DOI| |Scikit-HEP| |NSF Award Number IRIS-HEP v1| |NSF Award Number IRIS-HEP v2| |NumFOCUS Affiliated Project|
|Docs from latest| |Docs from main| |Jupyter Book tutorial| |Binder|
|PyPI version| |Conda-forge version| |Supported Python versions| |Docker Hub pyhf| |Docker Hub pyhf CUDA|
|Code Coverage| |CodeFactor| |pre-commit.ci Status| |Code style: black|
|GitHub Actions Status: CI| |GitHub Actions Status: Docs| |GitHub Actions Status: Publish|
|GitHub Actions Status: Docker|
The HistFactory p.d.f. template
[`CERN-OPEN-2012-016 <https://cds.cern.ch/record/1456844>`__] is per-se
independent of its implementation in ROOT and sometimes, it’s useful to
be able to run statistical analysis outside of ROOT, RooFit, RooStats
framework.
This repo is a pure-python implementation of that statistical model for
multi-bin histogram-based analysis and its interval estimation is based
on the asymptotic formulas of “Asymptotic formulae for likelihood-based
tests of new physics”
[`arXiv:1007.1727 <https://arxiv.org/abs/1007.1727>`__]. The aim is also
to support modern computational graph libraries such as PyTorch and
TensorFlow in order to make use of features such as autodifferentiation
and GPU acceleration.
..
Comment: JupyterLite segment goes here in docs
User Guide
----------
For an in depth walkthrough of usage of the latest release of ``pyhf`` visit the |pyhf tutorial|_.
.. |pyhf tutorial| replace:: ``pyhf`` tutorial
.. _pyhf tutorial: https://pyhf.github.io/pyhf-tutorial/
Hello World
-----------
This is how you use the ``pyhf`` Python API to build a statistical model and run basic inference:
.. code:: pycon
>>> import pyhf
>>> pyhf.set_backend("numpy")
>>> 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
>>> test_mu = 1.0
>>> CLs_obs, CLs_exp = pyhf.infer.hypotest(
... test_mu, data, model, test_stat="qtilde", return_expected=True
... )
>>> print(f"Observed: {CLs_obs:.8f}, Expected: {CLs_exp:.8f}")
Observed: 0.05251497, Expected: 0.06445321
Alternatively the statistical model and observational data can be read from its serialized JSON representation (see next section).
.. code:: pycon
>>> import pyhf
>>> import requests
>>> pyhf.set_backend("numpy")
>>> url = "https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/examples/json/2-bin_1-channel.json"
>>> wspace = pyhf.Workspace(requests.get(url).json())
>>> model = wspace.model()
>>> data = wspace.data(model)
>>> test_mu = 1.0
>>> CLs_obs, CLs_exp = pyhf.infer.hypotest(
... test_mu, data, model, test_stat="qtilde", return_expected=True
... )
>>> print(f"Observed: {CLs_obs:.8f}, Expected: {CLs_exp:.8f}")
Observed: 0.35998409, Expected: 0.35998409
Finally, you can also use the command line interface that ``pyhf`` provides
.. code:: bash
$ cat << EOF | tee likelihood.json | pyhf cls
{
"channels": [
{ "name": "singlechannel",
"samples": [
{ "name": "signal",
"data": [12.0, 11.0],
"modifiers": [ { "name": "mu", "type": "normfactor", "data": null} ]
},
{ "name": "background",
"data": [50.0, 52.0],
"modifiers": [ {"name": "uncorr_bkguncrt", "type": "shapesys", "data": [3.0, 7.0]} ]
}
]
}
],
"observations": [
{ "name": "singlechannel", "data": [51.0, 48.0] }
],
"measurements": [
{ "name": "Measurement", "config": {"poi": "mu", "parameters": []} }
],
"version": "1.0.0"
}
EOF
which should produce the following JSON output:
.. code:: json
{
"CLs_exp": [
0.0026062609501074576,
0.01382005356161206,
0.06445320535890459,
0.23525643861460702,
0.573036205919389
],
"CLs_obs": 0.05251497423736956
}
What does it support
--------------------
Implemented variations:
- ☑ HistoSys
- ☑ OverallSys
- ☑ ShapeSys
- ☑ NormFactor
- ☑ Multiple Channels
- ☑ Import from XML + ROOT via `uproot <https://github.com/scikit-hep/uproot4>`__
- ☑ ShapeFactor
- ☑ StatError
- ☑ Lumi Uncertainty
- ☑ Non-asymptotic calculators
Computational Backends:
- ☑ NumPy
- ☑ PyTorch
- ☑ TensorFlow
- ☑ JAX
Optimizers:
- ☑ SciPy (``scipy.optimize``)
- ☑ MINUIT (``iminuit``)
All backends can be used in combination with all optimizers.
Custom user backends and optimizers can be used as well.
Todo
----
- ☐ StatConfig
results obtained from this package are validated against output computed
from HistFactory workspaces
A one bin example
-----------------
.. code:: python
import pyhf
import numpy as np
import matplotlib.pyplot as plt
from pyhf.contrib.viz import brazil
pyhf.set_backend("numpy")
model = pyhf.simplemodels.uncorrelated_background(
signal=[10.0], bkg=[50.0], bkg_uncertainty=[7.0]
)
data = [55.0] + model.config.auxdata
poi_vals = np.linspace(0, 5, 41)
results = [
pyhf.infer.hypotest(
test_poi, data, model, test_stat="qtilde", return_expected_set=True
)
for test_poi in poi_vals
]
fig, ax = plt.subplots()
fig.set_size_inches(7, 5)
brazil.plot_results(poi_vals, results, ax=ax)
fig.show()
**pyhf**
.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/README_1bin_example.png
:alt: manual
:width: 500
:align: center
**ROOT**
.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/hfh_1bin_55_50_7.png
:alt: manual
:width: 500
:align: center
A two bin example
-----------------
.. code:: python
import pyhf
import numpy as np
import matplotlib.pyplot as plt
from pyhf.contrib.viz import brazil
pyhf.set_backend("numpy")
model = pyhf.simplemodels.uncorrelated_background(
signal=[30.0, 45.0], bkg=[100.0, 150.0], bkg_uncertainty=[15.0, 20.0]
)
data = [100.0, 145.0] + model.config.auxdata
poi_vals = np.linspace(0, 5, 41)
results = [
pyhf.infer.hypotest(
test_poi, data, model, test_stat="qtilde", return_expected_set=True
)
for test_poi in poi_vals
]
fig, ax = plt.subplots()
fig.set_size_inches(7, 5)
brazil.plot_results(poi_vals, results, ax=ax)
fig.show()
**pyhf**
.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/README_2bin_example.png
:alt: manual
:width: 500
:align: center
**ROOT**
.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/hfh_2_bin_100.0_145.0_100.0_150.0_15.0_20.0_30.0_45.0.png
:alt: manual
:width: 500
:align: center
Installation
------------
To install ``pyhf`` from PyPI with the NumPy backend run
.. code:: bash
python -m pip install pyhf
and to install ``pyhf`` with all additional backends run
.. code:: bash
python -m pip install pyhf[backends]
or a subset of the options.
To uninstall run
.. code:: bash
python -m pip uninstall pyhf
Documentation
-------------
For model specification, API reference, examples, and answers to FAQs visit the |pyhf documentation|_.
.. |pyhf documentation| replace:: ``pyhf`` documentation
.. _pyhf documentation: https://pyhf.readthedocs.io/
Questions
---------
If you have a question about the use of ``pyhf`` not covered in `the
documentation <https://pyhf.readthedocs.io/>`__, please ask a question
on the `GitHub Discussions <https://github.com/scikit-hep/pyhf/discussions>`__.
If you believe you have found a bug in ``pyhf``, please report it in the
`GitHub
Issues <https://github.com/scikit-hep/pyhf/issues/new?template=Bug-Report.md&labels=bug&title=Bug+Report+:+Title+Here>`__.
If you're interested in getting updates from the ``pyhf`` dev team and release
announcements you can join the |pyhf-announcements mailing list|_.
.. |pyhf-announcements mailing list| replace:: ``pyhf-announcements`` mailing list
.. _pyhf-announcements mailing list: https://groups.google.com/group/pyhf-announcements/subscribe
Citation
--------
As noted in `Use and Citations <https://scikit-hep.org/pyhf/citations.html>`__,
the preferred BibTeX entry for citation of ``pyhf`` includes both the
`Zenodo <https://zenodo.org/>`__ archive and the
`JOSS <https://joss.theoj.org/>`__ paper:
.. code:: bibtex
@software{pyhf,
author = {Lukas Heinrich and Matthew Feickert and Giordon Stark},
title = "{pyhf: v0.7.5}",
version = {0.7.5},
doi = {10.5281/zenodo.1169739},
url = {https://doi.org/10.5281/zenodo.1169739},
note = {https://github.com/scikit-hep/pyhf/releases/tag/v0.7.5}
}
@article{pyhf_joss,
doi = {10.21105/joss.02823},
url = {https://doi.org/10.21105/joss.02823},
year = {2021},
publisher = {The Open Journal},
volume = {6},
number = {58},
pages = {2823},
author = {Lukas Heinrich and Matthew Feickert and Giordon Stark and Kyle Cranmer},
title = {pyhf: pure-Python implementation of HistFactory statistical models},
journal = {Journal of Open Source Software}
}
Authors
-------
``pyhf`` is openly developed by Lukas Heinrich, Matthew Feickert, and Giordon Stark.
Please check the `contribution statistics for a list of
contributors <https://github.com/scikit-hep/pyhf/graphs/contributors>`__.
Milestones
----------
- 2022-09-12: 2000 GitHub issues and pull requests. (See PR `#2000 <https://github.com/scikit-hep/pyhf/pull/2000>`__)
- 2021-12-09: 1000 commits to the project. (See PR `#1710 <https://github.com/scikit-hep/pyhf/pull/1710>`__)
- 2020-07-28: 1000 GitHub issues and pull requests. (See PR `#1000 <https://github.com/scikit-hep/pyhf/pull/1000>`__)
Acknowledgements
----------------
Matthew Feickert has received support to work on ``pyhf`` provided by NSF
cooperative agreements `OAC-1836650 <https://nsf.gov/awardsearch/showAward?AWD_ID=1836650>`__
and `PHY-2323298 <https://nsf.gov/awardsearch/showAward?AWD_ID=2323298>`__ (IRIS-HEP)
and grant `OAC-1450377 <https://www.nsf.gov/awardsearch/showAward?AWD_ID=1450377>`__ (DIANA/HEP).
``pyhf`` is a `NumFOCUS Affiliated Project <https://numfocus.org/sponsored-projects/affiliated-projects>`__.
.. |GitHub Project| image:: https://img.shields.io/badge/GitHub--blue?style=social&logo=GitHub
:target: https://github.com/scikit-hep/pyhf
.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1169739.svg
:target: https://doi.org/10.5281/zenodo.1169739
.. |JOSS DOI| image:: https://joss.theoj.org/papers/10.21105/joss.02823/status.svg
:target: https://doi.org/10.21105/joss.02823
.. |Scikit-HEP| image:: https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg
:target: https://scikit-hep.org/
.. |NSF Award Number IRIS-HEP v1| image:: https://img.shields.io/badge/NSF-1836650-blue.svg
:target: https://nsf.gov/awardsearch/showAward?AWD_ID=1836650
.. |NSF Award Number IRIS-HEP v2| image:: https://img.shields.io/badge/NSF-2323298-blue.svg
:target: https://nsf.gov/awardsearch/showAward?AWD_ID=2323298
.. |NumFOCUS Affiliated Project| image:: https://img.shields.io/badge/NumFOCUS-Affiliated%20Project-orange.svg?style=flat&colorA=E1523D&colorB=007D8A
:target: https://numfocus.org/sponsored-projects/affiliated-projects
.. |Docs from latest| image:: https://img.shields.io/badge/docs-v0.7.5-blue.svg
:target: https://pyhf.readthedocs.io/
.. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg
:target: https://scikit-hep.github.io/pyhf
.. |Jupyter Book tutorial| image:: https://jupyterbook.org/_images/badge.svg
:target: https://pyhf.github.io/pyhf-tutorial/
.. |Binder| image:: https://mybinder.org/badge_logo.svg
:target: https://mybinder.org/v2/gh/scikit-hep/pyhf/main?labpath=docs%2Fexamples%2Fnotebooks%2Fbinderexample%2FStatisticalAnalysis.ipynb
.. |PyPI version| image:: https://badge.fury.io/py/pyhf.svg
:target: https://badge.fury.io/py/pyhf
.. |Conda-forge version| image:: https://img.shields.io/conda/vn/conda-forge/pyhf.svg
:target: https://prefix.dev/channels/conda-forge/packages/pyhf
.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pyhf.svg
:target: https://pypi.org/project/pyhf/
.. |Docker Hub pyhf| image:: https://img.shields.io/badge/pyhf-v0.7.5-blue?logo=Docker
:target: https://hub.docker.com/r/pyhf/pyhf/tags
.. |Docker Hub pyhf CUDA| image:: https://img.shields.io/badge/pyhf-CUDA-blue?logo=Docker
:target: https://hub.docker.com/r/pyhf/cuda/tags
.. |Code Coverage| image:: https://codecov.io/gh/scikit-hep/pyhf/graph/badge.svg?branch=main
:target: https://codecov.io/gh/scikit-hep/pyhf?branch=main
.. |CodeFactor| image:: https://www.codefactor.io/repository/github/scikit-hep/pyhf/badge
:target: https://www.codefactor.io/repository/github/scikit-hep/pyhf
.. |pre-commit.ci Status| image:: https://results.pre-commit.ci/badge/github/scikit-hep/pyhf/main.svg
:target: https://results.pre-commit.ci/latest/github/scikit-hep/pyhf/main
:alt: pre-commit.ci status
.. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
.. |GitHub Actions Status: CI| image:: https://github.com/scikit-hep/pyhf/workflows/CI/CD/badge.svg?branch=main
:target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3ACI%2FCD+branch%3Amain
.. |GitHub Actions Status: Docs| image:: https://github.com/scikit-hep/pyhf/workflows/Docs/badge.svg?branch=main
:target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3ADocs+branch%3Amain
.. |GitHub Actions Status: Publish| image:: https://github.com/scikit-hep/pyhf/workflows/publish%20distributions/badge.svg?branch=main
:target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3A%22publish+distributions%22+branch%3Amain
.. |GitHub Actions Status: Docker| image:: https://github.com/scikit-hep/pyhf/actions/workflows/docker.yml/badge.svg?branch=main
:target: https://github.com/scikit-hep/pyhf/actions/workflows/docker.yml?query=branch%3Amain
Raw data
{
"_id": null,
"home_page": "",
"name": "pyhf",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "The Scikit-HEP admins <scikit-hep-admins@googlegroups.com>",
"keywords": "fitting,jax,numpy,physics,pytorch,scipy,tensorflow",
"author": "",
"author_email": "Lukas Heinrich <lukas.heinrich@cern.ch>, Matthew Feickert <matthew.feickert@cern.ch>, Giordon Stark <gstark@cern.ch>",
"download_url": "https://files.pythonhosted.org/packages/f5/ea/86473e31f5e54658fe67e171fe80403f27064899b407dae002f963c6e832/pyhf-0.7.5.tar.gz",
"platform": null,
"description": ".. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/pyhf-logo.svg\n :alt: pyhf logo\n :width: 320\n :align: center\n\npure-python fitting/limit-setting/interval estimation HistFactory-style\n=======================================================================\n\n|GitHub Project| |DOI| |JOSS DOI| |Scikit-HEP| |NSF Award Number IRIS-HEP v1| |NSF Award Number IRIS-HEP v2| |NumFOCUS Affiliated Project|\n\n|Docs from latest| |Docs from main| |Jupyter Book tutorial| |Binder|\n\n|PyPI version| |Conda-forge version| |Supported Python versions| |Docker Hub pyhf| |Docker Hub pyhf CUDA|\n\n|Code Coverage| |CodeFactor| |pre-commit.ci Status| |Code style: black|\n\n|GitHub Actions Status: CI| |GitHub Actions Status: Docs| |GitHub Actions Status: Publish|\n|GitHub Actions Status: Docker|\n\nThe HistFactory p.d.f. template\n[`CERN-OPEN-2012-016 <https://cds.cern.ch/record/1456844>`__] is per-se\nindependent of its implementation in ROOT and sometimes, it\u2019s useful to\nbe able to run statistical analysis outside of ROOT, RooFit, RooStats\nframework.\n\nThis repo is a pure-python implementation of that statistical model for\nmulti-bin histogram-based analysis and its interval estimation is based\non the asymptotic formulas of \u201cAsymptotic formulae for likelihood-based\ntests of new physics\u201d\n[`arXiv:1007.1727 <https://arxiv.org/abs/1007.1727>`__]. The aim is also\nto support modern computational graph libraries such as PyTorch and\nTensorFlow in order to make use of features such as autodifferentiation\nand GPU acceleration.\n\n..\n Comment: JupyterLite segment goes here in docs\n\nUser Guide\n----------\n\nFor an in depth walkthrough of usage of the latest release of ``pyhf`` visit the |pyhf tutorial|_.\n\n.. |pyhf tutorial| replace:: ``pyhf`` tutorial\n.. _pyhf tutorial: https://pyhf.github.io/pyhf-tutorial/\n\nHello World\n-----------\n\nThis is how you use the ``pyhf`` Python API to build a statistical model and run basic inference:\n\n.. code:: pycon\n\n >>> import pyhf\n >>> pyhf.set_backend(\"numpy\")\n >>> model = pyhf.simplemodels.uncorrelated_background(\n ... signal=[12.0, 11.0], bkg=[50.0, 52.0], bkg_uncertainty=[3.0, 7.0]\n ... )\n >>> data = [51, 48] + model.config.auxdata\n >>> test_mu = 1.0\n >>> CLs_obs, CLs_exp = pyhf.infer.hypotest(\n ... test_mu, data, model, test_stat=\"qtilde\", return_expected=True\n ... )\n >>> print(f\"Observed: {CLs_obs:.8f}, Expected: {CLs_exp:.8f}\")\n Observed: 0.05251497, Expected: 0.06445321\n\nAlternatively the statistical model and observational data can be read from its serialized JSON representation (see next section).\n\n.. code:: pycon\n\n >>> import pyhf\n >>> import requests\n >>> pyhf.set_backend(\"numpy\")\n >>> url = \"https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/examples/json/2-bin_1-channel.json\"\n >>> wspace = pyhf.Workspace(requests.get(url).json())\n >>> model = wspace.model()\n >>> data = wspace.data(model)\n >>> test_mu = 1.0\n >>> CLs_obs, CLs_exp = pyhf.infer.hypotest(\n ... test_mu, data, model, test_stat=\"qtilde\", return_expected=True\n ... )\n >>> print(f\"Observed: {CLs_obs:.8f}, Expected: {CLs_exp:.8f}\")\n Observed: 0.35998409, Expected: 0.35998409\n\n\nFinally, you can also use the command line interface that ``pyhf`` provides\n\n.. code:: bash\n\n $ cat << EOF | tee likelihood.json | pyhf cls\n {\n \"channels\": [\n { \"name\": \"singlechannel\",\n \"samples\": [\n { \"name\": \"signal\",\n \"data\": [12.0, 11.0],\n \"modifiers\": [ { \"name\": \"mu\", \"type\": \"normfactor\", \"data\": null} ]\n },\n { \"name\": \"background\",\n \"data\": [50.0, 52.0],\n \"modifiers\": [ {\"name\": \"uncorr_bkguncrt\", \"type\": \"shapesys\", \"data\": [3.0, 7.0]} ]\n }\n ]\n }\n ],\n \"observations\": [\n { \"name\": \"singlechannel\", \"data\": [51.0, 48.0] }\n ],\n \"measurements\": [\n { \"name\": \"Measurement\", \"config\": {\"poi\": \"mu\", \"parameters\": []} }\n ],\n \"version\": \"1.0.0\"\n }\n EOF\n\nwhich should produce the following JSON output:\n\n.. code:: json\n\n {\n \"CLs_exp\": [\n 0.0026062609501074576,\n 0.01382005356161206,\n 0.06445320535890459,\n 0.23525643861460702,\n 0.573036205919389\n ],\n \"CLs_obs\": 0.05251497423736956\n }\n\nWhat does it support\n--------------------\n\nImplemented variations:\n - \u2611 HistoSys\n - \u2611 OverallSys\n - \u2611 ShapeSys\n - \u2611 NormFactor\n - \u2611 Multiple Channels\n - \u2611 Import from XML + ROOT via `uproot <https://github.com/scikit-hep/uproot4>`__\n - \u2611 ShapeFactor\n - \u2611 StatError\n - \u2611 Lumi Uncertainty\n - \u2611 Non-asymptotic calculators\n\nComputational Backends:\n - \u2611 NumPy\n - \u2611 PyTorch\n - \u2611 TensorFlow\n - \u2611 JAX\n\nOptimizers:\n - \u2611 SciPy (``scipy.optimize``)\n - \u2611 MINUIT (``iminuit``)\n\nAll backends can be used in combination with all optimizers.\nCustom user backends and optimizers can be used as well.\n\nTodo\n----\n\n- \u2610 StatConfig\n\nresults obtained from this package are validated against output computed\nfrom HistFactory workspaces\n\nA one bin example\n-----------------\n\n.. code:: python\n\n import pyhf\n import numpy as np\n import matplotlib.pyplot as plt\n from pyhf.contrib.viz import brazil\n\n pyhf.set_backend(\"numpy\")\n model = pyhf.simplemodels.uncorrelated_background(\n signal=[10.0], bkg=[50.0], bkg_uncertainty=[7.0]\n )\n data = [55.0] + model.config.auxdata\n\n poi_vals = np.linspace(0, 5, 41)\n results = [\n pyhf.infer.hypotest(\n test_poi, data, model, test_stat=\"qtilde\", return_expected_set=True\n )\n for test_poi in poi_vals\n ]\n\n fig, ax = plt.subplots()\n fig.set_size_inches(7, 5)\n brazil.plot_results(poi_vals, results, ax=ax)\n fig.show()\n\n**pyhf**\n\n.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/README_1bin_example.png\n :alt: manual\n :width: 500\n :align: center\n\n**ROOT**\n\n.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/hfh_1bin_55_50_7.png\n :alt: manual\n :width: 500\n :align: center\n\nA two bin example\n-----------------\n\n.. code:: python\n\n import pyhf\n import numpy as np\n import matplotlib.pyplot as plt\n from pyhf.contrib.viz import brazil\n\n pyhf.set_backend(\"numpy\")\n model = pyhf.simplemodels.uncorrelated_background(\n signal=[30.0, 45.0], bkg=[100.0, 150.0], bkg_uncertainty=[15.0, 20.0]\n )\n data = [100.0, 145.0] + model.config.auxdata\n\n poi_vals = np.linspace(0, 5, 41)\n results = [\n pyhf.infer.hypotest(\n test_poi, data, model, test_stat=\"qtilde\", return_expected_set=True\n )\n for test_poi in poi_vals\n ]\n\n fig, ax = plt.subplots()\n fig.set_size_inches(7, 5)\n brazil.plot_results(poi_vals, results, ax=ax)\n fig.show()\n\n\n**pyhf**\n\n.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/README_2bin_example.png\n :alt: manual\n :width: 500\n :align: center\n\n**ROOT**\n\n.. image:: https://raw.githubusercontent.com/scikit-hep/pyhf/main/docs/_static/img/hfh_2_bin_100.0_145.0_100.0_150.0_15.0_20.0_30.0_45.0.png\n :alt: manual\n :width: 500\n :align: center\n\nInstallation\n------------\n\nTo install ``pyhf`` from PyPI with the NumPy backend run\n\n.. code:: bash\n\n python -m pip install pyhf\n\nand to install ``pyhf`` with all additional backends run\n\n.. code:: bash\n\n python -m pip install pyhf[backends]\n\nor a subset of the options.\n\nTo uninstall run\n\n.. code:: bash\n\n python -m pip uninstall pyhf\n\nDocumentation\n-------------\n\nFor model specification, API reference, examples, and answers to FAQs visit the |pyhf documentation|_.\n\n.. |pyhf documentation| replace:: ``pyhf`` documentation\n.. _pyhf documentation: https://pyhf.readthedocs.io/\n\nQuestions\n---------\n\nIf you have a question about the use of ``pyhf`` not covered in `the\ndocumentation <https://pyhf.readthedocs.io/>`__, please ask a question\non the `GitHub Discussions <https://github.com/scikit-hep/pyhf/discussions>`__.\n\nIf you believe you have found a bug in ``pyhf``, please report it in the\n`GitHub\nIssues <https://github.com/scikit-hep/pyhf/issues/new?template=Bug-Report.md&labels=bug&title=Bug+Report+:+Title+Here>`__.\nIf you're interested in getting updates from the ``pyhf`` dev team and release\nannouncements you can join the |pyhf-announcements mailing list|_.\n\n.. |pyhf-announcements mailing list| replace:: ``pyhf-announcements`` mailing list\n.. _pyhf-announcements mailing list: https://groups.google.com/group/pyhf-announcements/subscribe\n\nCitation\n--------\n\nAs noted in `Use and Citations <https://scikit-hep.org/pyhf/citations.html>`__,\nthe preferred BibTeX entry for citation of ``pyhf`` includes both the\n`Zenodo <https://zenodo.org/>`__ archive and the\n`JOSS <https://joss.theoj.org/>`__ paper:\n\n.. code:: bibtex\n\n @software{pyhf,\n author = {Lukas Heinrich and Matthew Feickert and Giordon Stark},\n title = \"{pyhf: v0.7.5}\",\n version = {0.7.5},\n doi = {10.5281/zenodo.1169739},\n url = {https://doi.org/10.5281/zenodo.1169739},\n note = {https://github.com/scikit-hep/pyhf/releases/tag/v0.7.5}\n }\n\n @article{pyhf_joss,\n doi = {10.21105/joss.02823},\n url = {https://doi.org/10.21105/joss.02823},\n year = {2021},\n publisher = {The Open Journal},\n volume = {6},\n number = {58},\n pages = {2823},\n author = {Lukas Heinrich and Matthew Feickert and Giordon Stark and Kyle Cranmer},\n title = {pyhf: pure-Python implementation of HistFactory statistical models},\n journal = {Journal of Open Source Software}\n }\n\nAuthors\n-------\n\n``pyhf`` is openly developed by Lukas Heinrich, Matthew Feickert, and Giordon Stark.\n\nPlease check the `contribution statistics for a list of\ncontributors <https://github.com/scikit-hep/pyhf/graphs/contributors>`__.\n\nMilestones\n----------\n\n- 2022-09-12: 2000 GitHub issues and pull requests. (See PR `#2000 <https://github.com/scikit-hep/pyhf/pull/2000>`__)\n- 2021-12-09: 1000 commits to the project. (See PR `#1710 <https://github.com/scikit-hep/pyhf/pull/1710>`__)\n- 2020-07-28: 1000 GitHub issues and pull requests. (See PR `#1000 <https://github.com/scikit-hep/pyhf/pull/1000>`__)\n\nAcknowledgements\n----------------\n\nMatthew Feickert has received support to work on ``pyhf`` provided by NSF\ncooperative agreements `OAC-1836650 <https://nsf.gov/awardsearch/showAward?AWD_ID=1836650>`__\nand `PHY-2323298 <https://nsf.gov/awardsearch/showAward?AWD_ID=2323298>`__ (IRIS-HEP)\nand grant `OAC-1450377 <https://www.nsf.gov/awardsearch/showAward?AWD_ID=1450377>`__ (DIANA/HEP).\n\n``pyhf`` is a `NumFOCUS Affiliated Project <https://numfocus.org/sponsored-projects/affiliated-projects>`__.\n\n.. |GitHub Project| image:: https://img.shields.io/badge/GitHub--blue?style=social&logo=GitHub\n :target: https://github.com/scikit-hep/pyhf\n.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1169739.svg\n :target: https://doi.org/10.5281/zenodo.1169739\n.. |JOSS DOI| image:: https://joss.theoj.org/papers/10.21105/joss.02823/status.svg\n :target: https://doi.org/10.21105/joss.02823\n.. |Scikit-HEP| image:: https://scikit-hep.org/assets/images/Scikit--HEP-Project-blue.svg\n :target: https://scikit-hep.org/\n.. |NSF Award Number IRIS-HEP v1| image:: https://img.shields.io/badge/NSF-1836650-blue.svg\n :target: https://nsf.gov/awardsearch/showAward?AWD_ID=1836650\n.. |NSF Award Number IRIS-HEP v2| image:: https://img.shields.io/badge/NSF-2323298-blue.svg\n :target: https://nsf.gov/awardsearch/showAward?AWD_ID=2323298\n.. |NumFOCUS Affiliated Project| image:: https://img.shields.io/badge/NumFOCUS-Affiliated%20Project-orange.svg?style=flat&colorA=E1523D&colorB=007D8A\n :target: https://numfocus.org/sponsored-projects/affiliated-projects\n.. |Docs from latest| image:: https://img.shields.io/badge/docs-v0.7.5-blue.svg\n :target: https://pyhf.readthedocs.io/\n.. |Docs from main| image:: https://img.shields.io/badge/docs-main-blue.svg\n :target: https://scikit-hep.github.io/pyhf\n.. |Jupyter Book tutorial| image:: https://jupyterbook.org/_images/badge.svg\n :target: https://pyhf.github.io/pyhf-tutorial/\n.. |Binder| image:: https://mybinder.org/badge_logo.svg\n :target: https://mybinder.org/v2/gh/scikit-hep/pyhf/main?labpath=docs%2Fexamples%2Fnotebooks%2Fbinderexample%2FStatisticalAnalysis.ipynb\n\n.. |PyPI version| image:: https://badge.fury.io/py/pyhf.svg\n :target: https://badge.fury.io/py/pyhf\n.. |Conda-forge version| image:: https://img.shields.io/conda/vn/conda-forge/pyhf.svg\n :target: https://prefix.dev/channels/conda-forge/packages/pyhf\n.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pyhf.svg\n :target: https://pypi.org/project/pyhf/\n.. |Docker Hub pyhf| image:: https://img.shields.io/badge/pyhf-v0.7.5-blue?logo=Docker\n :target: https://hub.docker.com/r/pyhf/pyhf/tags\n.. |Docker Hub pyhf CUDA| image:: https://img.shields.io/badge/pyhf-CUDA-blue?logo=Docker\n :target: https://hub.docker.com/r/pyhf/cuda/tags\n\n.. |Code Coverage| image:: https://codecov.io/gh/scikit-hep/pyhf/graph/badge.svg?branch=main\n :target: https://codecov.io/gh/scikit-hep/pyhf?branch=main\n.. |CodeFactor| image:: https://www.codefactor.io/repository/github/scikit-hep/pyhf/badge\n :target: https://www.codefactor.io/repository/github/scikit-hep/pyhf\n.. |pre-commit.ci Status| image:: https://results.pre-commit.ci/badge/github/scikit-hep/pyhf/main.svg\n :target: https://results.pre-commit.ci/latest/github/scikit-hep/pyhf/main\n :alt: pre-commit.ci status\n.. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/psf/black\n\n.. |GitHub Actions Status: CI| image:: https://github.com/scikit-hep/pyhf/workflows/CI/CD/badge.svg?branch=main\n :target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3ACI%2FCD+branch%3Amain\n.. |GitHub Actions Status: Docs| image:: https://github.com/scikit-hep/pyhf/workflows/Docs/badge.svg?branch=main\n :target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3ADocs+branch%3Amain\n.. |GitHub Actions Status: Publish| image:: https://github.com/scikit-hep/pyhf/workflows/publish%20distributions/badge.svg?branch=main\n :target: https://github.com/scikit-hep/pyhf/actions?query=workflow%3A%22publish+distributions%22+branch%3Amain\n.. |GitHub Actions Status: Docker| image:: https://github.com/scikit-hep/pyhf/actions/workflows/docker.yml/badge.svg?branch=main\n :target: https://github.com/scikit-hep/pyhf/actions/workflows/docker.yml?query=branch%3Amain\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "pure-Python HistFactory implementation with tensors and autodiff",
"version": "0.7.5",
"project_urls": {
"Documentation": "https://pyhf.readthedocs.io/",
"Homepage": "https://github.com/scikit-hep/pyhf",
"Issue Tracker": "https://github.com/scikit-hep/pyhf/issues",
"Release Notes": "https://pyhf.readthedocs.io/en/stable/release-notes.html",
"Releases": "https://github.com/scikit-hep/pyhf/releases",
"Source Code": "https://github.com/scikit-hep/pyhf"
},
"split_keywords": [
"fitting",
"jax",
"numpy",
"physics",
"pytorch",
"scipy",
"tensorflow"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "eb66115b75f73f7a58fc40ad713c3fac59e19f8e0740eddc4091c2ae8beb896e",
"md5": "636f890cfe2734f38d737d66f9c4dee3",
"sha256": "51aa26bb87c13f493221371e94e693528378779137499029801f99cc10d8d5b2"
},
"downloads": -1,
"filename": "pyhf-0.7.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "636f890cfe2734f38d737d66f9c4dee3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 160170,
"upload_time": "2023-10-26T17:27:42",
"upload_time_iso_8601": "2023-10-26T17:27:42.683469Z",
"url": "https://files.pythonhosted.org/packages/eb/66/115b75f73f7a58fc40ad713c3fac59e19f8e0740eddc4091c2ae8beb896e/pyhf-0.7.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f5ea86473e31f5e54658fe67e171fe80403f27064899b407dae002f963c6e832",
"md5": "4f0f1865d899a65e64f4cb6a2f0d0628",
"sha256": "83a73f1f662c5be3aa15126351eb29c5154c000d87e2a5d9f0f9f9df20b1c28c"
},
"downloads": -1,
"filename": "pyhf-0.7.5.tar.gz",
"has_sig": false,
"md5_digest": "4f0f1865d899a65e64f4cb6a2f0d0628",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 113812,
"upload_time": "2023-10-26T17:27:44",
"upload_time_iso_8601": "2023-10-26T17:27:44.465598Z",
"url": "https://files.pythonhosted.org/packages/f5/ea/86473e31f5e54658fe67e171fe80403f27064899b407dae002f963c6e832/pyhf-0.7.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-26 17:27:44",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "scikit-hep",
"github_project": "pyhf",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyhf"
}