- 
          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
              
 
- 
          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
              
 
      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_storagetounlimited_storage
- 
          Replaced boost::multiprecision::cpp_intwith 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 methodbin
- 
          replaced operator()in axis with explicit methodindex
- 
          replaced internal use of boost::containerswith stdlib containers
- 
          Much improved docs, reference documentation, user guide, more examples
        
- 
          Allocator support everywhere
        
- 
          Internal refactoring
        
- 
          Renamed bincountmethod
          tosize
- 
          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
        
- 
          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
        
- 
          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)