No changes yet.
- Fix scaling a weighted storage #559
- Fix partial summation over a Categorical axis #564
- Support running type checking from Python < 3.8 #542
- A
family=
is no longer required if you only subclass Histogram. #533
- Fix summing of Mean/WeightedMean accumulators #537
- Added missing dependency on
typing_extensions
for Python 3.6 & 3.7 #529
- Added Ellipsis support to typing. #525
- Better typing for Views. #530
- Fixed issue with Histogram copy constructor requiring metadata #532
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.
- Dropped Python 2.7 and 3.5 support #512
- Removed deprecated
.options
from axes. Use.traits
instead. #503 - Full static typing available, UHI 0.1.2+ supported. #516, #517, #519, #520, #521, #523
- Use keyword class family setting when subclassing histogram components instead of custom decorator. #513
- Structure of internal repr creation changed and made slightly more public. #518
- Consistently show
metadata=
in repr if present; refactored internal repr handling #518 - Minor typing related fixes for rare bugs (especially in
numpy.py
, #521)
- Backport fix scaling a weighted storage
- Backport fix partial summation over a Categorical axis
- Backport fix for Mean/WeightedMean summing.
- Backport fix for
boost_histogram.numpy
density. - Backport missing metadata from the repr's.
- Ignore
family=
on Histogram subclassing to make subclassing Histogram only possible in 1.x + 0.x code.
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.
- Support for PlottableProtocol. You can now access
.values()
,.counts()
, and.variances()
on all storages; used by plotting libraries..kind
describes the Kind of the histogram (bh.Kind.COUNT
orbh.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 - Removed deprecated
.rank
on histograms (since 0.8). Use.ndim
instead. #505 - Supports converting user histogram objects that provide a
_to_boost_histogram_
method. #483 - A
view=True
parameter must now be passed to get a View instead of a standard NumPy values arrray fromto_numpy()
. #498
- Added additional support for typing, fixing a couple of rare Python 2 bugs in the process #493.
- The resulting histogram from
bh.numpy.*
functions is now reducible #508
- Use GitHub Actions for ARM compiling #474
- Apple Silicon support (since 0.12) #495
- Support compiling with C++17 #502
- Rename
NPY_NUM_BUILD_JOBS
toCMAKE_BUILD_PARALLEL_LEVEL
for consistency with other Scikit-HEP projects. #502
Pressing forward to 1.0.
- You can now set all complex storages, either on a Histogram or a View with an (N+1)D array #475
- Axes are now normal
__dict__
classes, you can manipulate the__dict__
as normal. Axes construction now lets you either use the old metadata shortcut or the__dict__
inline. #477
- Fixed slicing projection with one-sided slices #479
- Fixed issue if final bin of Variable histogram was infinite by updating to Boost 1.75 #470
- NumPy arrays can be used for weights in
bh.numpy
#472 - Vectorization for WeightedMean accumulators was broken #475
If 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:
- Python 3.9 support
- PyPy2 / PyPy3.6 / PyPy3.7 support
- Warnings on latest AppleClang fixed
- 40% faster accumulator fills, simpler implementation
- Segfaults when passing an object with a throwing repr fixed
- kwargs replaced older workarounds (partially at the moment)
- Using new
py::type
instead ofpybind11::detail
usage - Enhanced CMake support, finds conda and venv now, uses
pybind11_find_import
- Using setuptools support from pybind11 (previously vendored, so benefits have been available since 0.11.0)
Also cleans up SDists a bit. #467
A release focused on preparing for the upcoming Hist 2.0 release.
- Arbitrary items can be set on an axis or histogram. #450, #456
- Subclasses can customize the conversion procedure. #456
- Fixed reading pickles from boost-histogram 0.6-0.8 #445
- Minor correctness fix #446
- Accidental install of typing on Python 3.5+ fixed
- Scalar ND fill fixed #453
- Updated to Boost 1.74 #442
- CMake installs version.py now too #449
- Updated setuptools infrastructure no longer requires NumPy #451
- Some basic clang-tidy checks are now being run #455
Quick fix for extra print statement in fill.
- Fixed debugging print statement in fill. #438
Several fixes were made, mostly related to Weight storage histograms from Uproot 4.
- Reduction on
h.axes.widths
supported again #428 - WeightedSumView supports standard array operations #432
- Operations shallow copy (non-copyable metadata supported) #433
- Pandas Series as samples/weights supported #434
- Support NumPy scalars in operations #436
This version was released during PyHEP 2020. Several improvements were made to usability when plotting and indexing.
- AxesTuple array now support operations via ArrayTuple #414
- Support
sum
andbh.rebin
without slice #424 - Nicer error messages in some cases #415
- Made a few properties hidden for accumulators that were not public #418
- Boolean now supports reduction, faster compile #422
- AxesTuple now available publicly for subprojects #419
- Histograms support operations with arrays, no longer take the first element only #417
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) #403- Added
dd=True
option into_numpy
#406 - Deprecated
cpp
module removed #402
- Fix
numpy.histogramdd
return structure #406 - Travis deploy multi-arch fixes #399
- Selecting on a bool axes supports 2D+ histograms #398
- Warnings fixed on NumPy 1.19+ [#404][]
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.
- Weighted histogram cells can now be assigned directly from iterables #375
- Weighted views can be summed and added #368
- Sum is now identical to the built-in sum function #365
- Adding growing axis is better supported #358
- Slicing an AxesTuple now keeps the type #384
ndim
replacesrank
for NumPy compatibility #385- Any array-like supported in fill #391, any iterable can be used for Categories #392
- Added Boolean axes, from Boost.Histogram 1.74 #390
- Division between histograms is supported #393
- More deprecated functionality removed
- Support older versions of CloudPickle (issue also fixed upstream) #343
- Drop extra printout #338
- Throw an error instead of returning an incorrect result in more places #386
- Update Boost to 1.73 #359, pybind11 to 2.5.0 #351, Boost.Histogram to pre-1.74 #388
- Cropping no longer uses workaround #373
- Many more checks added to
pre-commit
#366 - Deprecating
cpp
interface #391 - Wheelbuilding migrated to
cibuildwheel
and GHA #361
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.
- Added
threads=
keyword to.fill
and NumPy functions; 0 for automatic, default is 1 #325 .metadata
is now settable directly from the AxesTuple #303- Deprecated items from 0.5.x now dropped #301
cpp
mode updates and fixes #317
- Dict indexing is now identical to positional indexing, fixes "picking" axes in dict #320
- Passing
samples=None
is now always allowed in.fill
#325
- Build system update, higher requirements for developers (only) #314
- Version is now obtained from
setuptools_scm
, no longer stored in repo
- Version is now obtained from
- Removed
futures
requirement for Python 2 tests - Updated Boost.Histogram, cleaner code with fewer workarounds
Common analysis tasks are now better supported. Much more complete documentation. Now using development branch of Boost.Histogram again.
- Fix sum over category axes in indexing #298
- Allow single category item selection #298
- Allow slicing on axes without flow bins #288, #300
- Sum repr no longer throws error #293
- Now using scikit-hep/azure-wheel-helpers via subtree #292
Examples and notebooks are now up to date with the current state of the library. Using Boost 1.72 release.
- Properties on accumulator views now resolve correctly #273
- Division of a histogram by a number is supported again #278
- Setting a histogram with length one slice fixed #279
- Numpy functions now work with Numpy ints in
bins=
#282 - In-place addition avoids a copy #284
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 and Axis classes now follow PEP 8 naming scheme (
histogram
->Histogram
,regular
->Regular
,int
->Int64
etc.) #192, #255 - You can now view a histogram with accumulators, with property access such as
h.view().value
#194 - Circular variable and integer axes added #231
- Split Category into
StrCategory
andIntCategory
, now allows empty categories whengrowth=True
#221 StrCategory
fills are safer and faster #239, #244- Added axes transforms #192
Function(forward, inverse)
transform added, allowing ultra-fast C function pointer transforms #231- You can now set histogram contents directly #250
- You can now sum over a range with endpoints #185
h.axes
now has the functions from axis as well. #183bh.project
has becomebh.sum
#185.reduce(...)
and the reducers inbh.algorithm
have been removed in favor of dictionary based UHI slicing #259bh.numpy
module interface updates,histogram=bh.Histogram
replaces crypticbh=True
, anddensity=True
is now supported in Numpy mode #256- Added
hist.copy()
#218 andhist.shape
#264 - Signatures are much nicer in Python 3 #188
- Reprs are better, various properties like
__module__
are now set correctly #200
- Unlimited and AtomicInt storages now allow single item access #194
.view()
now no longer makes a copy #194- Fixes related to string category axis fills #233, #230
- Axes are no longer copies, support setting metadata #238, #246
- Pickling accumulator storages is now comparable in performance simple storages #258
- The linux wheels are now 10-20x smaller #229
- The hist/axis classes are now pure Python, with a C++ object inside #183
- Most internal names changed,
core->_core
, etc. #183 - The
uhi
module is nowtag
. #183 boost_histogram.cpp as bh
provides C++ high-compatibility mode. #183- Indexing tags now use full UHI instead of workarounds #185
- Removed log and sqrt special axes types#231
- Family and registration added, new casting system #200
- Use relative paths in setup.py to avoid resolving WSL paths on Windows #162, #163
- Better pybind11 support for Python 3.8 #168
- Serialization code shared with Boost.Histogram #166
- Avoid unused PEP 517 isolation for now #171 (may return with proper PEP 518 support eventually)
- Removed the
bh.indexed
/h.indexed
iterator #150 - Added
.axes
AxisTuple, with direct access to properties #150 - Cleaned up tab completion in IPython #150
First beta release and beginning of the changelog.
- Unlimited storage does not support pickling or classic multiprocessing
- Some non-simple storages do not support some forms of access, like
.view
- Indexing and the array versions (such as centers) are incomplete and subject to change
- The numpy module is provisional and subject to change
- Docstrings and signatures will improve in later versions (especially on Python 3)