-
New features
-
Better deduction guides for axis types and histogram type on C++17
compilers
-
performance improvements in the indexing code
-
new histogram::fill method for accelerated filling from chunks of
values
-
ASCII bar charts for 1D histograms when boost/histogram/ostream.hpp
is included (contributed by Przemyslaw Bartosik)
-
Passing invalid axis options causes user-friendly compile-time errors
-
Wrong usage of weight() and sample() causes user-friendly compile-time
errors
-
algorithm::empty returns true if all histogram values are equal to
the default value (contributed by Henry Schreiner)
-
algorithm::reduce with shrink is now well defined when values are
not bin edges
-
axis::traits::rank returns the number of values that this axis accepts
-
axis::traits::is_continuous returns whether an axis is continuous
or discrete
-
axis::traits::is_inclusive returns whether an axis has a bin for
any possible input
-
limited weight support for mean accumulator
-
accumulators::weighted_mean::sum_of_weights_squared method added
-
Fixes
-
Support of -std=c++2a and -stdlib=libc++ on clang, compatibility
with gcc-9
-
Fixed: weight could be passed instead of a sample during filling
without triggering an error
-
Fixed: segfault when too many indices were passed to algorithm::project
-
Fixed: indexed range generator did not work with storage based on
std::array
-
Fixed: weighted_mean() + weighted_mean() != weighted_mean() (discovered
and reported by Henry Schreiner)
-
Fixed: axis::option::test(...) returned true if any bits in the test
mask were set (now returns true if all bits in the test mask are
set)
-
Protecting calls to min, max with against macro expansion
-
Replaced all crlf with lf in concepts.qbk
-
Missing throw of std::invalid_argument when user passes too many
axes to histogram
-
Corrected documentation of serialization support in concepts section
-
Resolved warnings for various compiler versions
-
Other
-
Added Boost.Histogram logo
-
Added missing copyright notices
-
axis::category::value returns copy for scalar types and const reference
otherwise
-
std::ostringstream not used anymore to generate exception messages
to reduces code bloat
-
Documentation improvements
-
Restructured overview section in documentation
-
Updated user guide to demonstrate new features
-
Updated accumulator examples
-
Concepts explain how accumulators can optionally accept weights
-
Updated benchmark code
-
New test checks consistency of b2 and cmake build systems
-
New test checks One-Definition-Rule (fails if non-templated function
is not declared inline)
-
Serialization code decoupled from Boost.Serialization
-
Removed dependency on Boost.CallableTraits
-
New features
-
Thread-safe accumulators boost::histogram::accumulators::thread_safe
based on std::atomics
-
Support for thread-safe storages
-
Support for compiling without exceptions/RTTI (increases performance
by 10-20 %) [with contributions from Glen Fernandez]
-
Performance improvements for 1D and 2D histograms
-
boost::histogram::indexed now returns forward iterator range instead
of input iterator range
-
boost::histogram::indexed_range::accessor is now non-copyable and
acts like reference to cell value, making most algorithms from the
stdlib work
-
boost::histogram::algorithm::reduce
-
New slice option
-
Fuse shrink, slice, and rebin options passed for the same axis
-
Support histograms with some axis types with reduction support
-
boost::histogram::algorithm::project accepts runtime indices for
static histograms
-
Fixes
-
boost::histogram::algorithm::reduce also works on histograms that
have some axis types without reduction support
-
boost::histogram::axis::traits::update now works correctly for boost::histogram::axis::variant
-
Other
-
100 % test coverage
-
Drastically reduced internal Boost dependencies
-
Improved documentation and examples
-
Internally replaced boost::variant with boost::variant2
-
boost::histogram::axis::traits::is_reducible detects reducible axis
types
-
Cleanup and refactoring of internals
-
Guarantee no-throw moves for all builtin axis types
-
Improved internal benchmarks
-
Compile cleanly at higher warning levels
First Boost release, version 4.0 in former internal counting.
-
Removed Python bindings, will be developed in separate repository
-
All axes can be made optionally circular, except category axis
-
All axes now support generic attached metadata
-
All axes have now independently configurable underflow/overflow extra bins
-
Removed circular axis (which is just a circular regular axis)
-
Added indexed adaptor generator for convenient and fast iteration over
histograms
-
Support for axes that can grow in range
-
Support for axes which accept multiple values (example: hexagonal binning)
-
Support for profiles and more generally, arbitrary accumulators in each
cell
-
Support for serializing to xml archives
-
Added compatibility with Boost.Range, Boost.Units, and Boost.Accumulators
-
Added deduction guides for axis types and histogram
-
Performance improvements
-
Renamed
adaptive_storage
to unlimited_storage
-
Replaced
boost::multiprecision::cpp_int
with custom type to decouple
libraries
-
Internal simplification of
axis::variant
-
Make all storages behave more like containers, simplifying the design
-
Histograms supports add, sub, mul, div
-
replaced
operator[]
in axis with explicit method bin
-
replaced
operator()
in axis with explicit method index
-
replaced internal use of
boost::containers
with stdlib containers
-
Much improved docs, reference documentation, user guide, more examples
-
Allocator support everywhere
-
Internal refactoring
-
Renamed
bincount
method
to size
-
Support for axes with only overflow and no underflow bin
-
category axis now by default has bin for "other" input that does
not fall into the predefined categories, making it consistent with other
axes
-
NaN is now consistently put into overflow bin for all axes
-
Eliminated warnings about safe internal conversions on MSVC
-
Established a cpp house style with corresponding .clang-format file
-
Better detection of Python library on all systems
-
Improved code coverage by testing more input errors
-
Raise ValueError instead of generic RuntimeError in Python on input errors
-
Support for efficient adding of multiple histograms and scaling
-
Re-design of category axis as a general mapping between unique values and
bins
-
Re-design of the bin description an axis returns upon element access
-
Interface cleanup and simplification, more consistency between Python and
C++ interface
-
Iterators for histogram and axes for STL compatibility
-
Regular axis in C++: Allowing transforms with state
-
Regular axis in Python: Support for all C++ transforms
-
Polymorphic axis::any type
-
Internal refactoring from boost::mpl and boost::fusion to std::tuple and
boost::mp11
-
Windows support
-
Added static_histogram (v1.0 only had dynamic_histogram).
-
Merged wfill(...) and fill(...) interface.
-
Support custom allocators in storage classes.
-
Replaced static_storage with array_storage.
-
Replaced dynamic_storage with unlimited_storage, which adds the capability
to grow the bin counter into a cpp_int, thus avoiding integer overflow
completely.
-
Serialization uses binary_archive instead of text_archive. The latter is
portable, but the performance is terrible.
-
Python interface changed: histograms are now iterable, returning axis classes
-
Support reduction (removing a subset of axes and returning the equivalent
histogram; in other words, those axes are integrated over)