Skip to content
pure-python implementation of some (maybe someday all?) HistFactory models
Python Other
  1. Python 99.9%
  2. Other 0.1%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github ci: Pin GitHub Actions release versions to stable tags (#664) Dec 3, 2019
binder Use curl -L to have trigger_binder follow URL redirect (#487) Jun 22, 2019
docs feat: Add backend option to pyhf CLI (#534) Dec 4, 2019
examples Fix toy example of spec in docs and render parts of schema in docs fr… Jun 26, 2019
src/pyhf feat: normfactor import/export parameter configuration (#666) Dec 6, 2019
tests feat: normfactor import/export parameter configuration (#666) Dec 6, 2019
validation fix: Correct warnings raised by LGTM scan (#574) Sep 26, 2019
.ackrc Add additional pdf information to aid with refactoring (#305) Oct 12, 2018
.bumpversion.cfg Bump version: 0.2.1 → 0.2.2 Nov 20, 2019
.coveragerc ci: Use Codecov GitHub Action to report coverage (#598) Oct 4, 2019
.git_archival.txt Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019
.gitattributes Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019
.gitignore test: Add public API canary tests to CI and nightly tests for current… Nov 21, 2019
.pre-commit-config.yaml Use python3 for precommit language version (#637) Nov 14, 2019
.readthedocs.yml Flesh out base documentation with introduction/background/details (#480) Jun 24, 2019
.travis.yml ci: Migrate publishing from Travis CI to GitHub Actions (#638) Nov 15, 2019 Create Jan 26, 2018 chore: Migrate from diana-hep GitHub org to scikit-hep (#643) Nov 20, 2019
LICENSE Use src directory for project directory structure (#513) Jul 16, 2019 ci: Use pydocstyle (#588) Dec 3, 2019
pyproject.toml fix: Add build-system to pyproject.toml (#639) Nov 15, 2019
pytest.ini ci: Use Codecov GitHub Action to report coverage (#598) Oct 4, 2019
setup.cfg Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019 feat: pyhf spec CLI (#617) Dec 3, 2019

pyhf logo

pure-python fitting/limit-setting/interval estimation HistFactory-style


Travis Build Status GitHub Actions Status: CI GitHub Actions Status: Publish Docker Automated Code Coverage Language grade: Python CodeFactor Code style: black

Docs Binder

PyPI version Supported Python versionss Docker Stars Docker Pulls

The HistFactory p.d.f. template [CERN-OPEN-2012-016] 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]. 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.

Hello World

>>> import pyhf
>>> pdf = pyhf.simplemodels.hepdata_like(signal_data=[12.0, 11.0], bkg_data=[50.0, 52.0], bkg_uncerts=[3.0, 7.0])
>>> CLs_obs, CLs_exp = pyhf.utils.hypotest(1.0, [51, 48] + pdf.config.auxdata, pdf, return_expected=True)
>>> print('Observed: {}, Expected: {}'.format(CLs_obs, CLs_exp))
Observed: [0.05290116], Expected: [0.06445521]

What does it support

Implemented variations:

  • HistoSys
  • OverallSys
  • ShapeSys
  • NormFactor
  • Multiple Channels
  • Import from XML + ROOT via uproot
  • ShapeFactor
  • StatError
  • Lumi Uncertainty

Computational Backends:

  • NumPy
  • PyTorch
  • TensorFlow

Available Optimizers

NumPy Tensorflow PyTorch
SLSQP (scipy.optimize) Newton's Method (autodiff) Newton's Method (autodiff)
MINUIT (iminuit) . .


  • StatConfig
  • Non-asymptotic calculators

results obtained from this package are validated against output computed from HistFactory workspaces

A one bin example

nobs = 55, b = 50, db = 7, nom_sig = 10.



A two bin example

bin 1: nobs = 100, b = 100, db = 15., nom_sig = 30.
bin 2: nobs = 145, b = 150, db = 20., nom_sig = 45.




To install pyhf from PyPI with the NumPy backend run

pip install pyhf

and to install pyhf with additional backends run

pip install pyhf[tensorflow,torch]

or a subset of the options.

To uninstall run

pip uninstall pyhf


Please check the contribution statistics for a list of contributors

You can’t perform that action at this time.