-
Fixed segfault in
indexed
when trying to iterate over histogram with axes of zero size (physical
or logical) under certain conditions
-
Removed previously deprecated API:
-
class
accumulators::thread_safe
:
use accumulators::count<T, true>
-
Methods
accumulators::sum::large
and accumulators::sum::small
:
use accumulators::sum::large_part
and accumulators::sum::small_part
-
Type alias
algorithm::reduce_option
:
use algorithm::reduce_command
-
Template function
axis::traits::static_options
:
use axis::traits::get_options
-
Template function
axis::traits::static_is_inclusive
:
use axis::traits::is_inclusive
-
Type alias
indexed::range_iterator
:
use indexed::iterator
-
Type alias
indexed::accessor::reference
:
use indexed::accessor::const_reference
-
Division support for
accumulators::weighted_sum
-
axis::regular
and axis::variable
now represent closed intervals if overflow bin is absent, this is needed
for example to correctly bin a probability in the closed interval [0, 1]
-
cpp17 support: set axis compile-time options via deduction guide
-
Deprecate
accumulators::sum::small
and ::large
as workaround for bug in windows.h
-
Fixed broken division operator in
accumulators::count
-
Fix bug in 1D histogram::fill when axis is growing and argument is single
value
-
Improvements to documentation
-
indexed
now allows iteration
over user-defined rectangular subrange
-
Deprecate
accumulators::thread_safe
,
users should replace with optionally thread-safe accumulators::count
-
Fixed broken scaling operator in
accumulators::count
-
Fixed bug in
axis::integer::inclusive
-
Improvements to ostreaming: support for more accumulators, drawing unicode
bar charts is now the default
-
Fixes
-
algorithm::reduce
with crop
now does not remove the counts in flow bins anymore if the selected
range actually overlaps with the flow bins, making the treatment
of flow bins consistent with inner bins
-
accumulators::mean
and accumulators::weighted_mean
now compute the correct variance when operator+=
was called, for example, when histograms
with accumulators are added; this was wrong before leading to too
small variances
-
detection of weight support in user-defined accumulators was broken
at compile-time if accumulator used
operator+=
instead of operator()
; tests only accidentally passed
for builtin weighted_sum
-
Fixes
-
axis::variable{{0, 1, inf}}.value(1)
now returns 1 instead of NaN
-
axis::variable
ctor now throws std::invalid_argument
if one values
is NaN
-
Implemented a workaround for a gcc bug (will be fixed upstream in
gcc-10.x) that occurred when
<boost/type_traits.hpp>
was included before <boost/histogram/axis/traits.hpp>
-
Fixed several new warnings from the latest compiler versions
-
Fixed warnings that appear when compiling against the C++20 standard
-
Documentation
-
Documented undefined behaviour when value and variance are requested
for
accumulator::mean
and accumulator::weighted_mean
but the accumulator does not have enough entries to compute them
-
Added explanation to rationale why axis metadata is checked for equality
-
New features
-
New axis
boolean
,
a special kind of integer axis with only two values and no state
(except metadata)
-
Histograms with growing category axes are now addable even if the
categories differ; the category axis of the output histogram is the
union of the category axes of the input histograms
-
Added axis::traits::continuous to match axis::traits::is_continuous
-
Fixes
-
metadata()
method of builtin axis types now return a mutable reference even
if the axis is const, as described in the documentation
-
Documentation
-
Sorted headers in reference and sorted items in namespaces
-
Removed some internal typenames from templates
-
Added reference for
sample_type
-
Other
-
Simplified internal metaprogramming
-
Replaced Boost Assert with plain cassert
-
New features
-
accumulators
-
New
count
accumulator,
a thin wrapper around a primitive arithmetic type; serves as
a base class for users who want to add arbitrary metadata to
each bin
-
sum
gained
a value()
method for consistency with other accumulators
-
algorithm
-
reduce
-
Now supports positional commands
-
category
axis now supports slice
command
-
Added
crop
command, like shrink
,
but discards content of removed bins
-
Renamed
reduce_option
to reduce_command
(old name available but deprecated)
-
sum
gained
a new argument, allowing users to select whether to sum over
all bins or only the inner bins (excluding underflow and overflow)
-
axis::traits
-
Added traits
is_ordered
and ordered
to distinguish between different kinds of DiscreteAxis types;
used internally to handle category
axis and integer
axis differently
-
Renamed
static_options
to get_options
and static_is_inclusive
to is_inclusive
(old names available but deprecated)
-
Fixes
-
Fixed failing ODR test in bundled Boost due to wrong paths
-
Fixed a bug in histogram::operator*= that could occur in user-defined
accumulators
-
Fixed a bug in
indexed
which could cause arithmetic past the end position
-
Fixed a bug where the variance in
accumulators::weighted_sum
was not correctly computed if a normal histogram was added to the
histogram that used accumulators::weighted_sum
-
Fixed a bug where compiling with
-ffast-math
would break accumulators::sum
-
Fixed
algorithm::reduce
to work with axes without
*flow bins, which did not compile before
-
Other
-
Added an example and documentation on how to use Boost.Histogram
as a backend
-
Improved the docs on how to use custom accumulators and Boost.Accumulators
-
Many small documentation improvements
-
Improved docs for
algorithm::reduce
-
Improved experimental cmake build support
-
Use
index_type
consistently
everywhere instead of raw int
-
Benchmark update in the docs
-
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)