changelog.qbk
14.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
[/
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:changelog Changelog]
[heading 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
[heading 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`
[heading 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
[heading 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
[heading 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
[heading 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`
[heading 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
[heading 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
[heading 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
[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]