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 88First 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] 160