histogram/doc/changelog.qbk
2019-11-12 21:50:49 +01:00

160 lines
8.0 KiB
Plaintext

[/
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]