Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / histogram / doc / changelog.qbk
1 [/
2             Copyright Hans Dembinski 2018 - 2019.
3    Distributed under the Boost Software License, Version 1.0.
4       (See accompanying file LICENSE_1_0.txt or copy at
5             https://www.boost.org/LICENSE_1_0.txt)
6 ]
7
8 [section:history Revision history]
9
10 [heading Boost 1.72]
11
12 * New features
13   * Better deduction guides for axis types and histogram type on C++17 compilers
14   * performance improvements in the indexing code
15   * new histogram::fill method for accelerated filling from chunks of values
16   * ASCII bar charts for 1D histograms when boost/histogram/ostream.hpp is included (contributed by Przemyslaw Bartosik)
17   * Passing invalid axis options causes user-friendly compile-time errors
18   * Wrong usage of weight() and sample() causes user-friendly compile-time errors
19   * algorithm::empty returns true if all histogram values are equal to the default value (contributed by Henry Schreiner)
20   * algorithm::reduce with shrink is now well defined when values are not bin edges
21   * axis::traits::rank returns the number of values that this axis accepts
22   * axis::traits::is_continuous returns whether an axis is continuous or discrete
23   * axis::traits::is_inclusive returns whether an axis has a bin for any possible input
24   * limited weight support for mean accumulator
25   * accumulators::weighted_mean::sum_of_weights_squared method added
26
27 * Fixes
28   * Support of -std=c++2a and -stdlib=libc++ on clang, compatibility with gcc-9
29   * Fixed: weight could be passed instead of a sample during filling without triggering an error
30   * Fixed: segfault when too many indices were passed to algorithm::project
31   * Fixed: indexed range generator did not work with storage based on std::array
32   * Fixed: weighted_mean() + weighted_mean() != weighted_mean() (discovered and reported by Henry Schreiner)
33   * 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)
34   * Protecting calls to min, max with against macro expansion
35   * Replaced all crlf with lf in concepts.qbk
36   * Missing throw of std::invalid_argument when user passes too many axes to histogram
37   * Corrected documentation of serialization support in concepts section
38   * Resolved warnings for various compiler versions
39
40 * Other
41   * Added Boost.Histogram logo
42   * Added missing copyright notices
43   * axis::category::value returns copy for scalar types and const reference otherwise
44   * std::ostringstream not used anymore to generate exception messages to reduces code bloat
45   * Documentation improvements
46     * Restructured overview section in documentation
47     * Updated user guide to demonstrate new features
48     * Updated accumulator examples
49     * Concepts explain how accumulators can optionally accept weights
50   * Updated benchmark code
51   * New test checks consistency of b2 and cmake build systems
52   * New test checks One-Definition-Rule (fails if non-templated function is not declared inline)
53   * Serialization code decoupled from Boost.Serialization
54   * Removed dependency on Boost.CallableTraits
55
56 [heading Boost 1.71]
57
58 * New features
59   * Thread-safe accumulators boost::histogram::accumulators::thread_safe based on std::atomics
60   * Support for thread-safe storages
61   * Support for compiling without exceptions/RTTI (increases performance by 10-20 %) [with contributions from Glen Fernandez]
62   * Performance improvements for 1D and 2D histograms
63   * boost::histogram::indexed now returns forward iterator range instead of input iterator range
64   * boost::histogram::indexed_range::accessor is now non-copyable and acts like reference to cell value, making most algorithms from the stdlib work
65   * boost::histogram::algorithm::reduce
66     * New slice option
67     * Fuse shrink, slice, and rebin options passed for the same axis
68     * Support histograms with some axis types with reduction support
69   * boost::histogram::algorithm::project accepts runtime indices for static histograms
70
71 * Fixes
72   * boost::histogram::algorithm::reduce also works on histograms that have some axis types without reduction support
73   * boost::histogram::axis::traits::update now works correctly for boost::histogram::axis::variant
74
75 * Other
76   * 100 % test coverage
77   * Drastically reduced internal Boost dependencies
78   * Improved documentation and examples
79   * Internally replaced boost::variant with boost::variant2
80   * boost::histogram::axis::traits::is_reducible detects reducible axis types
81   * Cleanup and refactoring of internals
82   * Guarantee no-throw moves for all builtin axis types
83   * Improved internal benchmarks
84   * Compile cleanly at higher warning levels
85
86 [heading Boost 1.70]
87
88 First Boost release, version 4.0 in former internal counting.
89
90 * Removed Python bindings, will be developed in separate repository
91 * All axes can be made optionally circular, except category axis
92 * All axes now support generic attached metadata
93 * All axes have now independently configurable underflow/overflow extra bins
94 * Removed circular axis (which is just a circular regular axis)
95 * Added indexed adaptor generator for convenient and fast iteration over histograms
96 * Support for axes that can grow in range
97 * Support for axes which accept multiple values (example: hexagonal binning)
98 * Support for profiles and more generally, arbitrary accumulators in each cell
99 * Support for serializing to xml archives
100 * Added compatibility with Boost.Range, Boost.Units, and Boost.Accumulators
101 * Added deduction guides for axis types and histogram
102 * Performance improvements
103 * Renamed `adaptive_storage` to `unlimited_storage`
104 * Replaced `boost::multiprecision::cpp_int` with custom type to decouple libraries
105 * Internal simplification of `axis::variant`
106 * Make all storages behave more like containers, simplifying the design
107 * Histograms supports add, sub, mul, div
108 * replaced `operator[]` in axis with explicit method `bin`
109 * replaced `operator()` in axis with explicit method `index`
110 * replaced internal use of `boost::containers` with stdlib containers
111 * Much improved docs, reference documentation, user guide, more examples
112
113 [heading 3.2 (not in Boost)]
114
115 * Allocator support everywhere
116 * Internal refactoring
117
118 [heading 3.1 (not in Boost)]
119
120 * Renamed `bincount` method to `size`
121 * Support for axes with only overflow and no underflow bin
122 * category axis now by default has bin for "other" input that does not fall
123   into the predefined categories, making it consistent with other axes
124 * NaN is now consistently put into overflow bin for all axes
125 * Eliminated warnings about safe internal conversions on MSVC
126 * Established a cpp house style with corresponding .clang-format file
127 * Better detection of Python library on all systems
128 * Improved code coverage by testing more input errors
129 * Raise ValueError instead of generic RuntimeError in Python on input errors
130
131 [heading 3.0 (not in Boost)]
132
133 * Support for efficient adding of multiple histograms and scaling
134 * Re-design of category axis as a general mapping between unique values and bins
135 * Re-design of the bin description an axis returns upon element access
136 * Interface cleanup and simplification, more consistency between Python and C++ interface
137 * Iterators for histogram and axes for STL compatibility
138 * Regular axis in C++: Allowing transforms with state
139 * Regular axis in Python: Support for all C++ transforms
140 * Polymorphic axis::any type
141 * Internal refactoring from boost::mpl and boost::fusion to std::tuple and boost::mp11
142 * Windows support
143
144 [heading 2.0 (not in Boost)]
145
146 * Added static_histogram (v1.0 only had dynamic_histogram).
147 * Merged wfill(...) and fill(...) interface.
148 * Support custom allocators in storage classes.
149 * Replaced static_storage with array_storage.
150 * Replaced dynamic_storage with unlimited_storage, which adds the capability to grow the bin counter into a cpp_int, thus avoiding integer overflow completely.
151 * Serialization uses binary_archive instead of text_archive. The latter is portable, but the performance is terrible.
152 * Python interface changed: histograms are now iterable, returning axis classes
153 * Support reduction (removing a subset of axes and returning the equivalent histogram; in other words, those axes are integrated over)
154
155 [heading 1.0 (not in Boost)]
156
157 * First stable version.
158
159 [endsect]