• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.74]
11
12* New features
13  * New axis `boolean`, a special kind of integer axis with only two values and no state (except metadata)
14  * 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
15  * Added axis::traits::continuous to match axis::traits::is_continuous
16
17* Fixes
18  * `metadata()` method of builtin axis types now return a mutable reference even if the axis is const, as described in the documentation
19
20* Documentation
21  * Sorted headers in reference and sorted items in namespaces
22  * Removed some internal typenames from templates
23  * Added reference for `sample_type`
24
25* Other
26  * Simplified internal metaprogramming
27  * Replaced Boost Assert with plain cassert
28
29[heading Boost 1.73]
30
31* New features
32  * accumulators
33    * 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
34    * `sum` gained a `value()` method for consistency with other accumulators
35  * algorithm
36    * `reduce`
37      * Now supports positional commands
38      * `category` axis now supports `slice` command
39      * Added `crop` command, like `shrink`, but discards content of removed bins
40      * Renamed `reduce_option` to `reduce_command` (old name available but deprecated)
41    * `sum` gained a new argument, allowing users to select whether to sum over all bins or only the inner bins (excluding underflow and overflow)
42  * axis::traits
43    * Added traits `is_ordered` and `ordered` to distinguish between different kinds of DiscreteAxis types; used internally to handle `category` axis and `integer` axis differently
44    * Renamed `static_options` to `get_options` and `static_is_inclusive` to `is_inclusive` (old names available but deprecated)
45
46* Fixes
47  * Fixed failing ODR test in bundled Boost due to wrong paths
48  * Fixed a bug in histogram::operator*= that could occur in user-defined accumulators
49  * Fixed a bug in `indexed` which could cause arithmetic past the end position
50  * 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`
51  * Fixed a bug where compiling with `-ffast-math` would break `accumulators::sum`
52  * Fixed `algorithm::reduce` to work with axes without *flow bins, which did not compile before
53
54* Other
55  * Added an example and documentation on how to use Boost.Histogram as a backend
56  * Improved the docs on how to use custom accumulators and Boost.Accumulators
57  * Many small documentation improvements
58  * Improved docs for `algorithm::reduce`
59  * Improved experimental cmake build support
60  * Use `index_type` consistently everywhere instead of raw `int`
61  * Benchmark update in the docs
62
63[heading Boost 1.72]
64
65* New features
66  * Better deduction guides for axis types and histogram type on C++17 compilers
67  * performance improvements in the indexing code
68  * new histogram::fill method for accelerated filling from chunks of values
69  * ASCII bar charts for 1D histograms when boost/histogram/ostream.hpp is included (contributed by Przemyslaw Bartosik)
70  * Passing invalid axis options causes user-friendly compile-time errors
71  * Wrong usage of weight() and sample() causes user-friendly compile-time errors
72  * algorithm::empty returns true if all histogram values are equal to the default value (contributed by Henry Schreiner)
73  * algorithm::reduce with shrink is now well defined when values are not bin edges
74  * axis::traits::rank returns the number of values that this axis accepts
75  * axis::traits::is_continuous returns whether an axis is continuous or discrete
76  * axis::traits::is_inclusive returns whether an axis has a bin for any possible input
77  * limited weight support for mean accumulator
78  * accumulators::weighted_mean::sum_of_weights_squared method added
79
80* Fixes
81  * Support of -std=c++2a and -stdlib=libc++ on clang, compatibility with gcc-9
82  * Fixed: weight could be passed instead of a sample during filling without triggering an error
83  * Fixed: segfault when too many indices were passed to algorithm::project
84  * Fixed: indexed range generator did not work with storage based on std::array
85  * Fixed: weighted_mean() + weighted_mean() != weighted_mean() (discovered and reported by Henry Schreiner)
86  * 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)
87  * Protecting calls to min, max with against macro expansion
88  * Replaced all crlf with lf in concepts.qbk
89  * Missing throw of std::invalid_argument when user passes too many axes to histogram
90  * Corrected documentation of serialization support in concepts section
91  * Resolved warnings for various compiler versions
92
93* Other
94  * Added Boost.Histogram logo
95  * Added missing copyright notices
96  * axis::category::value returns copy for scalar types and const reference otherwise
97  * std::ostringstream not used anymore to generate exception messages to reduces code bloat
98  * Documentation improvements
99    * Restructured overview section in documentation
100    * Updated user guide to demonstrate new features
101    * Updated accumulator examples
102    * Concepts explain how accumulators can optionally accept weights
103  * Updated benchmark code
104  * New test checks consistency of b2 and cmake build systems
105  * New test checks One-Definition-Rule (fails if non-templated function is not declared inline)
106  * Serialization code decoupled from Boost.Serialization
107  * Removed dependency on Boost.CallableTraits
108
109[heading Boost 1.71]
110
111* New features
112  * Thread-safe accumulators boost::histogram::accumulators::thread_safe based on std::atomics
113  * Support for thread-safe storages
114  * Support for compiling without exceptions/RTTI (increases performance by 10-20 %) [with contributions from Glen Fernandez]
115  * Performance improvements for 1D and 2D histograms
116  * boost::histogram::indexed now returns forward iterator range instead of input iterator range
117  * boost::histogram::indexed_range::accessor is now non-copyable and acts like reference to cell value, making most algorithms from the stdlib work
118  * boost::histogram::algorithm::reduce
119    * New slice option
120    * Fuse shrink, slice, and rebin options passed for the same axis
121    * Support histograms with some axis types with reduction support
122  * boost::histogram::algorithm::project accepts runtime indices for static histograms
123
124* Fixes
125  * boost::histogram::algorithm::reduce also works on histograms that have some axis types without reduction support
126  * boost::histogram::axis::traits::update now works correctly for boost::histogram::axis::variant
127
128* Other
129  * 100 % test coverage
130  * Drastically reduced internal Boost dependencies
131  * Improved documentation and examples
132  * Internally replaced boost::variant with boost::variant2
133  * boost::histogram::axis::traits::is_reducible detects reducible axis types
134  * Cleanup and refactoring of internals
135  * Guarantee no-throw moves for all builtin axis types
136  * Improved internal benchmarks
137  * Compile cleanly at higher warning levels
138
139[heading Boost 1.70]
140
141First Boost release, version 4.0 in former internal counting.
142
143* Removed Python bindings, will be developed in separate repository
144* All axes can be made optionally circular, except category axis
145* All axes now support generic attached metadata
146* All axes have now independently configurable underflow/overflow extra bins
147* Removed circular axis (which is just a circular regular axis)
148* Added indexed adaptor generator for convenient and fast iteration over histograms
149* Support for axes that can grow in range
150* Support for axes which accept multiple values (example: hexagonal binning)
151* Support for profiles and more generally, arbitrary accumulators in each cell
152* Support for serializing to xml archives
153* Added compatibility with Boost.Range, Boost.Units, and Boost.Accumulators
154* Added deduction guides for axis types and histogram
155* Performance improvements
156* Renamed `adaptive_storage` to `unlimited_storage`
157* Replaced `boost::multiprecision::cpp_int` with custom type to decouple libraries
158* Internal simplification of `axis::variant`
159* Make all storages behave more like containers, simplifying the design
160* Histograms supports add, sub, mul, div
161* replaced `operator[]` in axis with explicit method `bin`
162* replaced `operator()` in axis with explicit method `index`
163* replaced internal use of `boost::containers` with stdlib containers
164* Much improved docs, reference documentation, user guide, more examples
165
166[heading 3.2 (not in Boost)]
167
168* Allocator support everywhere
169* Internal refactoring
170
171[heading 3.1 (not in Boost)]
172
173* Renamed `bincount` method to `size`
174* Support for axes with only overflow and no underflow bin
175* category axis now by default has bin for "other" input that does not fall
176  into the predefined categories, making it consistent with other axes
177* NaN is now consistently put into overflow bin for all axes
178* Eliminated warnings about safe internal conversions on MSVC
179* Established a cpp house style with corresponding .clang-format file
180* Better detection of Python library on all systems
181* Improved code coverage by testing more input errors
182* Raise ValueError instead of generic RuntimeError in Python on input errors
183
184[heading 3.0 (not in Boost)]
185
186* Support for efficient adding of multiple histograms and scaling
187* Re-design of category axis as a general mapping between unique values and bins
188* Re-design of the bin description an axis returns upon element access
189* Interface cleanup and simplification, more consistency between Python and C++ interface
190* Iterators for histogram and axes for STL compatibility
191* Regular axis in C++: Allowing transforms with state
192* Regular axis in Python: Support for all C++ transforms
193* Polymorphic axis::any type
194* Internal refactoring from boost::mpl and boost::fusion to std::tuple and boost::mp11
195* Windows support
196
197[heading 2.0 (not in Boost)]
198
199* Added static_histogram (v1.0 only had dynamic_histogram).
200* Merged wfill(...) and fill(...) interface.
201* Support custom allocators in storage classes.
202* Replaced static_storage with array_storage.
203* Replaced dynamic_storage with unlimited_storage, which adds the capability to grow the bin counter into a cpp_int, thus avoiding integer overflow completely.
204* Serialization uses binary_archive instead of text_archive. The latter is portable, but the performance is terrible.
205* Python interface changed: histograms are now iterable, returning axis classes
206* Support reduction (removing a subset of axes and returning the equivalent histogram; in other words, those axes are integrated over)
207
208[heading 1.0 (not in Boost)]
209
210* First stable version.
211
212[endsect]
213