NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4543 most downloaded on PyPI
The Boost::Histogram Python wrapper.
Last release 1 months ago
04 Sep 2026
Ships fairly regularly
a new release about every 5 months
Nearly every release is documented
notes for 38 of 38 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
39 releases · first in 2019
MultiCell now requires a cell count of one or more; the argument has no default by @henryiii in #1179
MultiCell now requires a cell count of one or more; the argument has no default by @henryiii in #1179int raises ValueError instead of wrapping around by @henryiii in #1181boost_histogram.numpy matches NumPy more closely: empty input, 1D histogramdd input, a single edge array in histogram2d, and range validation by @henryiii in #1178StrCategory from a list or array by @henryiii in #1177MultiCell fill, and Boolean.value(); correct empty() for MultiCell by @henryiii in #1179register(), integer-storage multiplication, transform equality, and repr by @henryiii in #1184MultiCell by @henryiii in #1181view() can be invalidated by a growing fill by @henryiii in #1182Histogram API page on Read the Docs and correct the user guide and wheel table by @henryiii in #1180regular_numpy Python axis, factor out pybind11 helpers, and correct stub drift and weak tests by @henryiii in #1185AGENTS.md commands by @henryiii in #1180Full Changelog: v1.8.0...v1.8.1
One column per quarter.
Python 3.15 wheels, including free-threading and Pyodide, by @henryiii in [#1163][]
flow=False in histogram projections by @Rishabh-git10 in #1109Histogram.allclose for approximate histogram comparison by @gohil-jay in #778MultiCell storage by @henryiii in #1131Mean/WeightedMean views by @henryiii in #1137__rsub__ and __rtruediv__ operators by @henryiii in #1155sample argument in fill by @henryiii in #1124MultiCell support, flow handling, and a group_mapping protocol by @henryiii in #1148MultiCell sum() over zero bins instead of an empty list by @henryiii in #1132TypeError instead of ValueError for a non-integer locator offset and a string sample= by @henryiii in #1163numpy shortcuts by @henryiii in #1122Mean storage string rejection and __setitem__ error message by @henryiii in #1117histogramdd dimensions in the numpy module by @henryiii in #1144out= handling, scalar division, and broadcasting in structured views by @henryiii in #1146__setitem__ flow transfer, and fill edge cases by @henryiii in #1149sum()/empty() by @henryiii in #1153operator<< for accumulators::sum by @henryiii in #1161pytest.approx instead of NumPy assertion helpers by @gohil-jay in #780MultiCell storage coverage by @henryiii in #1127flow=False by @Rishabh-git10 in #1111hist session fail on a missing dir and mypy override errors by @henryiii in #1135/WX, config and stub cleanups by @henryiii in #1145Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.7.2...v1.8.0
<!-- Release notes generated using configuration in .github/release.yml at develop -->
<!-- Release notes generated using configuration in .github/release.yml at develop -->
__setitem__ axis index mismatch when slices are not leading indices by @Copilot in #1097AGENTS.md by @henryiii in #1106Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.7.1...v1.7.2
This release solely contains typing changes and fixes; histograms now hold the storage type.
<!-- Release notes generated using configuration in .github/release.yml at develop -->
This release solely contains typing changes and fixes; histograms now hold the storage type.
Histogram type generic, by @henryiii in #1081, #1082, #1083MultiCell storage takes an argument (missed in typing), by @henryiii in #1080Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.7.0...v1.7.1
This release adds a new MultiCell storage, allowing an predefined number of values to be histogrammed per bin. Python 3.10+ is now required, and free-
This release adds a new MultiCell storage, allowing an predefined number of values to be histogrammed per bin. Python 3.10+ is now required, and free-threaded support only ships binaries for 3.14t.
MultiCell storage, supporting a variable number of values, by @Superharz in #1008growth=True in writer-info (serialization), and respect it if present by @henryiii in #1074__getitem__ using pattern matching by @henryiii in #1067log_level is better than log_cli_level by @henryiii in #1059__file__ no longer required (pybind11 3.0) by @henryiii in #1066Full Changelog: v1.6.1...v1.7.0
MultiCell storage, supporting a variable number of values, by @Superharz in #1008growth=True in writer-info (serialization), and respect it if present by @henryiii in #1074__getitem__ using pattern matching by @henryiii in #1067log_level is better than log_cli_level by @henryiii in #1059__file__ no longer required (pybind11 3.0) by @henryiii in #1066This release fixes several issues with serialization as it's being prepared in Hist/uhi.
This release fixes several issues with serialization as it's being prepared in Hist/uhi.
__dict__ on histogram like axes #1041writer_info removal #1042Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.6.0...v1.6.1
This release fixes several issues with serialization as it's being prepared in Hist/uhi.
__dict__ on histogram like axes #1041writer_info removal #1042Full Changelog: v1.6.0...v1.6.1
This release adds support for UHI serialization for use with the uhi library, supported in the next release of uhi. A new diagnostic test has been add
This release adds support for UHI serialization for use with the uhi library, supported in the next release of uhi. A new diagnostic test has been added in the wheel, so you can quickly check your compile of boost-histogram without the full test suite. Quite a few fixes are present, as well, including a fix for *=, setting a range with a scalar, setting with a callable in a slice. Backend changes include many new clang-tidy checks that reduce the number of copies and refcount changes. We now build with pybind11 3.0.
This release drops support for Python 3.8, and adds Python 3.14(t), iOS, Windows ARM, and GraalPy.
np.s_ for slicing in dicts #1002*= too) #1036raw_metadata #979Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.5.2...v1.6.0
Fix for axis metadata not passing though non-uniform rebinning correctly. Flow bins are now preserved when doing a non-uniform rebinning. Also adds th
Fix for axis metadata not passing though non-uniform rebinning correctly. Flow bins are now preserved when doing a non-uniform rebinning. Also adds the ability to rebin by edges or an existing axis.
This is expected to be the last release with Python 3.8 support. Manylinux support will likely be bumped from 2024 to 2_28 soon, as well.
Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.5.1...v1.5.2
<!-- Release notes generated using configuration in .github/release.yml at develop -->
<!-- Release notes generated using configuration in .github/release.yml at develop -->
Fixes
Weight() and friends by @Saransh-cpp in https://github.com/scikit-hep/boost-histogram/pull/972CI and internal
Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.5.0...v1.5.1
Fixes
Weight() and friends by @Saransh-cpp in #972CI and internal
Full Changelog: v1.5.0...v1.5.1
Support variable rebinning [#913][]
Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.4.1...v1.5.0
32-bit Windows Python 3.12 wheel added (matching NumPy). [#920][]
Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.4.0...v1.4.1
Using _storage_type now produces a DeprecationWarning instead of PendingDeprecationWarning. [#801][]
This release supports Python 3.7-3.12. You can now turn off the flow bin on Int/Str Categories, and filling an integer-based axis requires an integer array - a floating point array is disallowed (a single float was always disallowed), due to issues with rounding around 0.
overflow=False is now supported for IntCategory and StrCategory. #883_storage_type now produces a DeprecationWarning instead of PendingDeprecationWarning. #801-latomic on armv7l #823manylinux2014+ required. #880, #878Full Changelog: https://github.com/scikit-hep/boost-histogram/compare/v1.3.2...v1.4.0
Added storage_type() as public API [#781][], with pending deprecation for _storage_type. [#786][] [#790][]
1.3 is the final release series supporting Python 3.6 and manylinux1 - manylinux2010. The next release will move to non EoL Python and manylinux images only.
storage_type() as public API #781, with pending deprecation for _storage_type. #786 #790bh.numpy.histogram to match numpy.histogram behavior. #721__init__ when copying (better support for subclasses with custom init's). #759IntCategory now supports numbers larger than 2<sup>24</sup> (now 2<sup>53</sup>). #792Fixed regression with invalid .project input causing segfaults. [#708][]
.project input causing segfaults. #708.index for IntCategory
in 1.3.0. Add hist nox session to check downstream (manually for the
moment). #710PyPy 3.8 now supported with binary wheels. [#677][]
np.cumsum #699.variances() #695musllinux wheels now provided along with manylinux [#656][]
Python 3.10 officially supported, with wheels.
storage= is required #604Experimentally support list selection on categorical axes [#577][]
Fix scaling a weighted storage [#559][]
A family= is no longer required if you _only_ subclass Histogram. [#533][]
Removed deprecated .options from axes. Use .traits instead. [#503][]
Dropped support for Python 2 and 3.5; removed large numbers of workarounds. Fully statically typed. API compatible with the final 0.x release for most uses, except for subclassing; subclassing histogram components now uses Python 3 class keyword syntax to set families.
.options from axes. Use .traits instead. #503Backport fix scaling a weighted storage
Backport release for the 0.x series.
Backport release for the 0.x series.
boost_histogram.numpy density.family= on Histogram subclassing to make subclassing Histogram only possible in 1.x + 0.x code.Removed deprecated .rank on histograms (since 0.8). Use .ndim instead. [#505][]
PlottableProtocol provides a way to plot in different libraries, and easy access to common quantities. This is expected to be the final release for Python 2, and mostly equivalent in API to 1.0.
.values(), .counts(),
and .variances() on all storages; used by plotting libraries. .kind describes
the Kind of the histogram (bh.Kind.COUNT or bh.Kind.MEAN). .options has
been renamed to .traits, and a few more useful traits were added, like
.discrete. Most other portions of the Protocol were already present. #476.rank on histograms (since 0.8). Use .ndim instead. #505_to_boost_histogram_ method. #483view=True parameter must now be passed to get a View instead of a standard
NumPy values arrray from to_numpy(). #498bh.numpy.* functions is now reducible #508You can now set all complex storages, either on a Histogram or a View with an (N+1)D array [#475][]
Pressing forward to 1.0.
__dict__ classes, you can manipulate the __dict__ as
normal. Axes construction now lets you either use the old metadata shortcut
or the __dict__ inline. #477bh.numpy #472Pressing forward to 1.0.
__dict__ classes, you can manipulate the __dict__ as
normal. Axes construction now lets you either use the old metadata shortcut
or the __dict__ inline. #477bh.numpy #472If you are using Axis.options, please transition to Axis.traits. traits
includes all the old options, along with some new traits, and matches the
PlottableProtocol requirements.
Updating pybind11 to 2.6.0. [#443][] Features:
Updating pybind11 to 2.6.0. #443 Features:
py::type instead of pybind11::detail usagepybind11_find_importAlso cleans up SDists a bit. #467
A release focused on preparing for the upcoming Hist 2.0 release.
A release focused on preparing for the upcoming Hist 2.0 release.
Quick fix for extra print statement in fill.
Several fixes were made, mostly related to Weight storage histograms from Uproot 4.
Several fixes were made, mostly related to Weight storage histograms from Uproot 4.
This version was released during PyHEP 2020. Several improvements were made to usability when plotting and indexing. ARM and PowerPC builds are now pu
This version was released during PyHEP 2020. Several improvements were made to usability when plotting and indexing. ARM and PowerPC builds are now published to PyPI.
sum and bh.rebin without slice #424Deprecated cpp module removed [#402][]
This version was released just before PyHEP 2020. Several important fixes were made, along with a few new features to better support downstream projects.
metadata supported and propagated on Histograms (slots added) #403dd=True option in to_numpy #406cpp module removed #402More deprecated functionality removed
This version was released just before SciPy 2020 and Boost 1.74. Highlights include better accumulator views, simpler summing, better NumPy and Pandas compatibility, and sums on growing axes. Lots of backend work, including a new wheel building system, internal changes and better reliance on Boost.Histogram's C++ tools for actions like cropping.
ndim replaces rank for NumPy compatibility #385pre-commit #366cpp interface #391cibuildwheel and GHA #361This version removes deprecated functionality, and has several backend improvements. The most noticeable user-facing change is the multithreaded fill…
This version removes deprecated functionality, and has several backend improvements. The most noticeable user-facing change is the multithreaded fill feature, which can enable significant speedups when you have a dataset that is much larger than the number of bins in your histogram and have free cores to use. Several small bugs have been fixed.
threads= keyword to .fill and numpy functions; 0 for automatic, default is 1 #325.metadata is now settable directly from the AxesTuple #303cpp mode updates and fixes #317samples=None is now always allowed in .fill #325setuptools_scm, no longer stored in repofutures requirement for Python 2 testsCommon analysis tasks are now better supported. Much more complete documentation. Now using development branch of Boost.Histogram again.
Common analysis tasks are now better supported. Much more complete documentation. Now using development branch of Boost.Histogram again.
Examples and notebooks are now up to date with the current state of the library. Using Boost 1.72 release.
Examples and notebooks are now up to date with the current state of the library. Using Boost 1.72 release.
This version fills out most of the remaining features missing from the 0.5.x series. You can now use all the storages without the original caveats; ev
This version fills out most of the remaining features missing from the 0.5.x series. You can now use all the storages without the original caveats; even the accumulators can be accessed array-at-a-time without copy, pickled quickly, and set array-at-a-time, as well.
The API has changed considerably, providing a more consistent experience in Python. Most of the classic API still works in this release, but will issue a warning and will be removed from the next release. Please use this release to transition existing 0.5.x code to the new API.
histogram->Histogram, regular->Regular, int->Int64 etc.) #192, #255h.view().value #194StrCategory and IntCategory, now allows empty categories when growth=True #221StrCategory fills are safer and faster #239, #244Function(forward, inverse) transform added, allowing ultra-fast C function pointer transforms #231h.axes now has the functions from axis as well. #183bh.project has become bh.sum #185.reduce(...) and the reducers in bh.algorithm have been removed in favor of dictionary based UHI slicing #259bh.numpy module interface updates, histogram=bh.Histogram replaces cryptic bh=True, and density=True is now supported in Numpy mode #256hist.copy() #218 and hist.shape #264__module__ are now set correctly #200.view() now no longer makes a copy #194core->_core, etc. #183uhi module is now tag. #183boost_histogram.cpp as bh provides C++ high-compatibility mode. #183Deprecate .at and .axis [#170][]
Another small release, mostly focused on fixing a few bugs that primarily affected Windows + Python 3.8 users. Reprs have become much nicer, making histograms easier to work with in REPLs. Serialization code is now shared with Boost.Histogram, which will make maintenance easier and fixes unlimited storage pickling.
This release has a few quick bugfixes from PyHEP 2019. It also has one new feature, h.axes, which did not quite make it in for 0.5.0, and has removed
This release has a few quick bugfixes from PyHEP 2019. It also has one new feature, h.axes, which did not quite make it in for 0.5.0, and has removed the indexed iterator (fully replaced by axes).
bh.indexed/h.indexed iterator #150.axes AxisTuple, with direct access to properties #150Unlimited storage does not support pickling or classic multiprocessing
First beta release.
.viewFirst beta release and beginning of the changelog.
.viewYour coding agent can read these notes before it upgrades. Set up the MCP server →