Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Changelog
PrevUpHome

Boost 1.82

  • Replace detail::span and detail::make_span with implementations in boost::core
  • Documentation improvements
  • Protect usage of std::min and std::max in some cases, contributed by Han Jiang (min,max macros are illegially set by popular Windows headers so we need to work around)
  • Added test to catch usage of unprotected min,max tokens in the library in the future
  • Fixes to support latest clang-14 and deduction guides in gcc-11+

Boost 1.81

  • Added new accumulators::fraction to compute fractions, their variance, and confidence intervals
  • Added interval computers for fractions: utility::clopper_pearson, utility::wilson_interval, utility::jeffreys_interval, utility::wald_interval which can compute intervals with arbitrary confidence level
  • Added utility::confidence_level and utility::deviation types to pass confidence levels as probabilities or in multiples of standard deviation for all interval computers, respectively
  • Fixed internal sub_array and span in C++20

Boost 1.80

  • 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

Boost 1.79

  • 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

Boost 1.78

  • 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

Boost 1.77

  • 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

Boost 1.76

  • 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

Boost 1.75

  • 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

Boost 1.74

  • 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

Boost 1.73

  • 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

Boost 1.72

  • 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

Boost 1.71

  • 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

Boost 1.70

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

3.2 (not in Boost)

  • Allocator support everywhere
  • Internal refactoring

3.1 (not in Boost)

  • 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

3.0 (not in Boost)

  • 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

2.0 (not in Boost)

  • 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)

1.0 (not in Boost)

  • First stable version.

PrevUpHome