[/ Copyright Hans Dembinski 2018 - 2019. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt) ] [section:history Revision history] [heading 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 [heading 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 [heading 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 [heading 3.2 (not in Boost)] * Allocator support everywhere * Internal refactoring [heading 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 [heading 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 [heading 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) [heading 1.0 (not in Boost)] * First stable version. [endsect]