boostorg / accumulators Goto Github PK
View Code? Open in Web Editor NEWAn awesome library from Boost
Home Page: http://boost.org/libs/accumulators
An awesome library from Boost
Home Page: http://boost.org/libs/accumulators
Hi,
lazy_weighted_variance_impl works fine if the first weight is zero, but weighted_variance_impl divides by zero:
if(cnt > 1)
{
extractor<MeanFeature> const some_mean = {};
result_type tmp = args[parameter::keyword<Tag>::get()] - some_mean(args);
this->weighted_variance =
numeric::fdiv(this->weighted_variance * (sum_of_weights(args) - args[weight]), sum_of_weights(args))
+ numeric::fdiv(tmp * tmp * args[weight], sum_of_weights(args) - args[weight] );
}
It looks like "cnt > 1" should instead check "sum_of_weights(args)>0", but I'm not sure as there is some mention of this in cosurgi's answer here:
https://stackoverflow.com/questions/16761965/weighted-variance-and-weighted-standard-deviation-in-c
and this change may end up breaking existing code that takes this into account...
If this is left as is, perhaps the documentation needs updating as currently it just says:
"Note that the sample variance is not defined for n<=1".
https://www.boost.org/doc/libs/1_73_0/doc/html/boost/accumulators/impl/weighted_variance_impl.html
Juk
I am using 1_66. I have two header files in two different libraries which work fine on their own, but when including both headers at once I get a compile error (with clang and msvc). A small example is given by the following code
test.cpp:
// first header file
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/weighted_kurtosis.hpp>
/* ... */
typedef boost::accumulators::accumulator_set<
double, boost::accumulators::stats<boost::accumulators::tag::weighted_kurtosis>, double>
accumulator_set;
accumulator_set acc_;
/* ... */
// second header file
#include <boost/accumulators/statistics.hpp>
/* ... */
Compiling this code with clang++ -c test.cpp
yields
In file included from test.cpp:18:
In file included from /usr/local/include/boost/accumulators/statistics.hpp:19:
/usr/local/include/boost/accumulators/statistics/kurtosis.hpp:105:8: error: explicit specialization of 'boost::accumulators::feature_of<boost::accumulators::tag::weighted_kurtosis>' after instantiation
struct feature_of<tag::weighted_kurtosis>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/boost/accumulators/framework/depends_on.hpp:284:30: note: implicit instantiation first required here
typename feature_of<feature_type>::type
^
In both online, e.g.,
and in generated documentation (local installs) formulas are not rendered: they are broken image icons in HTML. This is a heads-up that such should be fixed.
Does AccumulatorSet
concept has any chances to be introduced? Are there any sense about that?
I mean, I'm building some library for Boost (probably) with heavy Boost.Accumulators usage, so it requires for the AccumulatorSet
concept to be defined. Is it my mistake, or the concept really should be there?
Consider the following program:
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <cstdio>
using namespace boost::accumulators;
int main() {
accumulator_set<int, stats<tag::tail_quantile<left>>> acc(tag::tail<left>::cache_size = 3);
acc(3);
acc(4);
acc(5);
printf("%d\n", quantile(acc, quantile_probability = 0));
printf("%d\n", quantile(acc, quantile_probability = 0.9));
}
On my machine it outputs
0
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::runtime_error> >'
what(): index n = 3 is not in valid range [0, 3)
Aborted (core dumped)
Notice that the result for quantile_probability = 0
is wrong too. Digging into https://www.boost.org/doc/libs/1_70_0/boost/accumulators/statistics/tail_quantile.hpp, I found that index -1 is accessed when quantile_probability = 0
.
The simplest fix seems to be:
Change
if ( n < static_cast<std::size_t>(tail(args).size()))
to
if (1 <= n && n <= static_cast<std::size_t>(tail(args).size()))
with the caveat that exception would be thrown when quantile_probability = 0
.
In [weighted_][extended_]p_square.hpp
, the p-square algorithm (an online - in the sense that it doesn't require storing all samples - quantile estimator) is implemented. Additionally:
The extended version also introduces the ability to use interpolation:
[weighted_]extended_p_square_quantile
is instantiated with requested quantiles {0.001, 0.2, 0.5, 0.8, 0.999}
{0, 0.0005, 0.001, ~0.1, 0.2, 0.35, 0.5, 0.65, 0.8, ~0.9, 0.999, 1}
where quantiles 0 (resp. 1) corresponds to the min (resp. max) value seen, and values not present in requested quantiles are mid-points between requested quantiles.boost::accumulators::quantile
method can be used with this accumulator set to extract a desired quantile estimate.Unfortunately, the choice of the quadratic interpolator polynomial introduces "jumps" in the estimated quantile function.
In extended_p_square_quantile.hpp
(currently line 154),
if ( (dist == 1 || *iter_probs - this->probability <= this->probability - *(iter_probs - 1) ) && dist != this->probabilities.size() - 1 )
will switch to a different polynomial around the mid-points of requested quantiles (excluding first and last mid-points).
This creates situations where
To illustrate this claim, the programs MWE(3_)4.{cpp,py}
do the following:
{0.7, 0.8, 0.95, 0.99, 0.999, 0.9999}
.{0.874999, 0.875}
.{0.7, 0.8, 0.95}
to using {0.8, 0.95, 0.99}
according to the rule linked above.Note also that this discontinuity is "on the wrong side", i.e. similar to issue #62, we get that
Since this makes no mathematical sense, I would either issue a strong warning at instantiation or deprecate this interpolator (see also issue #62). If an additional interpolator (w.r.t. the linear one) is needed, I would suggest looking into integrating splines which are continuous by design (see e.g. https://github.com/ttk592/spline/).
Notes:
g++ -I$BOOST_INCLUDE_PATH MWE4.cpp -o MWE4
MWE4 > data4.csv
python3 MWE3_4.py 4
MWE3_4.py
requires matplotlib
and pandas
Hi, is there a way to calculate simple exponential smoothing (or exponential moving average)? That is,
s = a * x + (1 - a) * s
for some 0 < a < 1
If not, would you (or anyone) be interested in PR?
std::abs
needs either <cmath>
or <cstdlib>
but neither is included. This results in a particularly hairy ambiguous overload problem on some old versions of gcc.
It also may be better to use std::fabs
, which is intended for this use case
The file <boost/accumulators/statistics/density.hpp>
does not compile, in origin/develop
(1b1995f):
[lrineau@bonnard]~/Git/boost/libs/accumulators% g++ -I ../../install/include -fsyntax-only -xc++ include/boost/ac[lrineau@bonnard]~/Git/boost/libs/accumulators% g++ -I ../../install/include -fsyntax-only -xc++ include/boost/accumulators/statistics/density.hpp
In file included from include/boost/accumulators/statistics/density.hpp:16:
../../install/include/boost/parameter/keyword.hpp: In instantiation of ‘struct boost::parameter::keyword<boost::accumulators::tag::density_cache_size_<> >’:
include/boost/accumulators/statistics/density.hpp:35:1: required from here
../../install/include/boost/parameter/keyword.hpp:99:13: error: no type named ‘qualifier’ in ‘struct boost::accumulators::tag::density_cache_size_<>’
operator=(T const& x) const
^~~~~~~~
Cc @CromwellEnage It is related to the new Boost Parameter library.
In file included from ../../boost/accumulators/statistics/mean.hpp:18:
../../boost/accumulators/statistics/count.hpp:48:57: error: unused parameter 'file_version' [-Werror,-Wunused-parameter]
void serialize(Archive & ar, const unsigned int file_version)
You could run the CI tests with -Werror to catch these, which is what I do in Boost.Histogram.
In [weighted_][extended_]p_square.hpp
, the p-square algorithm (an online - in the sense that it doesn't require storing all samples - quantile estimator) is implemented. Additionally:
The extended version also introduces the ability to use interpolation:
[weighted_]extended_p_square_quantile
is instantiated with requested quantiles {0.001, 0.2, 0.5, 0.8, 0.999}
{0, 0.0005, 0.001, ~0.1, 0.2, 0.35, 0.5, 0.65, 0.8, ~0.9, 0.999, 1}
where quantiles 0 (resp. 1) corresponds to the min (resp. max) value seen, and values not present in requested quantiles are mid-points between requested quantiles.boost::accumulators::quantile
method can be used with this accumulator set to extract a desired quantile estimate.Unfortunately, the computation of the quadratic interpolator polynomial does not incorporate a mechanism to enforce monotonicity such that it is possible/likely to get a mathematically incoherent quantile function, i.e. a an estimated quantile function such that
To illustrate this claim, the programs
MWE3(_4).{cpp,py}
do the following:
{0.99, 0.999, 0.9999}
.{0.99, 0.992, 0.993, 0.994, 0.995, 0.996, 0.997, 0.999}
.Schematically, for the final values, in the quantile function space, this gives:
xychart-beta
title "Estimated quantile function"
x-axis [0.99, 0.992, 0.993, 0.994, 0.995, 0.996, 0.997, 0.999]
y-axis "Quantile" 1.9 --> 3
line [2.32, 2.03, 1.98, 2.00, 2.08, 2.22, 2.43, 3.04]
This phenomenon appears because the last point participating in the quadratic interpolation polynomial, namely 0.9999 is close to 0.999 but the quantiles are far apart, such that the "convexity" required to go through all three points is high.
Since this makes no mathematical sense, I would either issue a strong warning at instantiation or deprecate this interpolator. If an additional interpolator (w.r.t. the linear one) is needed, I would suggest looking into integrating splines which monotonicity can be enforced (see e.g. https://github.com/ttk592/spline/).
Notes:
g++ -I$BOOST_INCLUDE_PATH MWE3.cpp -o MWE3
MWE3 > data3.csv
python3 MWE3_4.py 3
MWE3.py
requires matplotlib
and pandas
This was also discussed here: https://stackoverflow.com/questions/32289719/how-to-serialize-boostaccumulatorsaccumulator-set
The ability to store the internal state of an object, as well as to initialize it with state is would be very useful, as this would eliminate the need to store the actual data point.
Currently the different classes cannot be extended by inheritance, since their internal state is private.
Anyway, since serialization and deserialization does not have any size/speed impact on the class, it is probably better to add this to the class and not to inherited version of it.
Probably good to use the boost serialization library, to assure that the output is portable (serialize on one machine and deserialize on another).
It is complexed to mix rolling and weighted.
thanks very much.
With commit bfcbfe3 (HEAD, origin/master) and VS 2017.4 Preview:
236467-testing.capture-output bin.v2\libs\accumulators\test\p_square_cumul_dist.test\msvc-14.1\debug\address-model-64\iterator_debugging-off\link-static\threading-multi\p_square_cumul_dist.run
236468-====== BEGIN OUTPUT ======
236469-Running 1 test case...
236470-libs/accumulators/test/p_square_cumul_dist.cpp(66): error: in "p_square_cumulative_distribution test/test_stat": difference{0.0331329} between 0.5 * (1.0 + my_erf( histogram[i].first / std::sqrt(2.0) )){0.010331329148570989} and histogram[i].second{0.01} exceeds 3%
236471-libs/accumulators/test/p_square_cumul_dist.cpp(66): error: in "p_square_cumulative_distribution test/test_stat": difference{0.0372556} between 0.5 * (1.0 + my_erf( histogram[i].first / std::sqrt(2.0) )){0.020755484496021825} and histogram[i].second{0.02001} exceeds 3%
236472-libs/accumulators/test/p_square_cumul_dist.cpp(66): error: in "p_square_cumulative_distribution test/test_stat": difference{0.0326898} between 0.5 * (1.0 + my_erf( histogram[i].first / std::sqrt(2.0) )){0.030980693519017} and histogram[i].second{0.029999999999999999} exceeds 3%
236473-libs/accumulators/test/p_square_cumul_dist.cpp(66): error: in "p_square_cumulative_distribution test/test_stat": difference{0.0306804} between 0.5 * (1.0 + my_erf( histogram[i].first / std::sqrt(2.0) )){0.041227215128245343} and histogram[i].second{0.040000000000000001} exceeds 3%
236474-
236475:*** 4 failures are detected in the test module "Master Test Suite"
236476-
236477-EXIT STATUS: 201
236478-====== END OUTPUT ======
237337-testing.capture-output bin.v2\libs\accumulators\test\weighted_median.test\msvc-14.1\debug\address-model-64\iterator_debugging-off\link-static\threading-multi\weighted_median.run
237338-====== BEGIN OUTPUT ======
237339-Running 1 test case...
237340-libs/accumulators/test/weighted_median.cpp(50): error: in "weighted_median test/test_stat": difference{0.0327894} between 1.{1} and weighted_median(acc_dens){0.96825159071079681} exceeds 3%
237341-libs/accumulators/test/weighted_median.cpp(51): error: in "weighted_median test/test_stat": difference{0.0316788} between 1.{1} and weighted_median(acc_cdist){0.96929395242297978} exceeds 3%
237342-
237343:*** 2 failures are detected in the test module "Master Test Suite"
237344-
237345-EXIT STATUS: 201
237346-====== END OUTPUT ======
This header uses std::ostringstream
without first including <sstream>
, resulting in compile errors.
Minimal reproducer:
#include <boost/accumulators/statistics/extended_p_square_quantile.hpp>
int main() {}
Code that uses boost::accumulators::accumulator_set with<X, Stats> where Stats contains boost::accumulators::tag::rolling_mean and X does not implement the operators < and > no longer compiles since Fix #11437: correct immediate_rolling_mean.
We were using this for coordinates in 3d, let's say struct Vec3d { float x; float y; float z};
. This type doesn't have a natural order. (Note that lexicographic ordering does not respect rotation symmetries, etc.) So it doesn't make sense to define comparison operators for them.
Averaging, by contrast, is basically a linear combination, which is a perfectly valid operation for elements of vector spaces.
Code sample on godbolt. This code breaks when upgrading from boost-1.70 to boost -1.71.
When using https://github.com/boostorg/boost as submodule:
committed boost as submodule using its tag boost-1.74.0
git submodule update --init --remote --recursive
doesn't work as expected entirely:
09:03:02 + git submodule update --init --remote --recursive
...
09:04:55 Submodule 'accumulators' (https://github.com/boostorg/accumulators.git) registered for path 'external/boost/libs/accumulators'
09:04:55 Submodule 'algorithm' (https://github.com/boostorg/algorithm.git) registered for path 'external/boost/libs/algorithm'
09:04:55 Submodule 'align' (https://github.com/boostorg/align.git) registered for path 'external/boost/libs/align'
09:04:55 Submodule 'any' (https://github.com/boostorg/any.git) registered for path 'external/boost/libs/any'
09:04:55 Submodule 'array' (https://github.com/boostorg/array.git) registered for path 'external/boost/libs/array'
09:04:55 Submodule 'asio' (https://github.com/boostorg/asio.git) registered for path 'external/boost/libs/asio'
09:04:55 Submodule 'assert' (https://github.com/boostorg/assert.git) registered for path 'external/boost/libs/assert'
09:04:55 Submodule 'assign' (https://github.com/boostorg/assign.git) registered for path 'external/boost/libs/assign'
09:04:55 Submodule 'atomic' (https://github.com/boostorg/atomic.git) registered for path 'external/boost/libs/atomic'
09:04:55 Submodule 'beast' (https://github.com/boostorg/beast.git) registered for path 'external/boost/libs/beast'
09:04:55 Submodule 'bimap' (https://github.com/boostorg/bimap.git) registered for path 'external/boost/libs/bimap'
09:04:55 Submodule 'bind' (https://github.com/boostorg/bind.git) registered for path 'external/boost/libs/bind'
09:04:55 Submodule 'callable_traits' (https://github.com/boostorg/callable_traits.git) registered for path 'external/boost/libs/callable_traits'
09:04:55 Submodule 'chrono' (https://github.com/boostorg/chrono.git) registered for path 'external/boost/libs/chrono'
09:04:55 Submodule 'circular_buffer' (https://github.com/boostorg/circular_buffer.git) registered for path 'external/boost/libs/circular_buffer'
09:04:55 Submodule 'compatibility' (https://github.com/boostorg/compatibility.git) registered for path 'external/boost/libs/compatibility'
09:04:55 Submodule 'compute' (https://github.com/boostorg/compute.git) registered for path 'external/boost/libs/compute'
09:04:55 Submodule 'concept_check' (https://github.com/boostorg/concept_check.git) registered for path 'external/boost/libs/concept_check'
09:04:55 Submodule 'config' (https://github.com/boostorg/config.git) registered for path 'external/boost/libs/config'
09:04:55 Submodule 'container' (https://github.com/boostorg/container.git) registered for path 'external/boost/libs/container'
09:04:55 Submodule 'container_hash' (https://github.com/boostorg/container_hash.git) registered for path 'external/boost/libs/container_hash'
09:04:55 Submodule 'context' (https://github.com/boostorg/context.git) registered for path 'external/boost/libs/context'
09:04:55 Submodule 'contract' (https://github.com/boostorg/contract.git) registered for path 'external/boost/libs/contract'
09:04:55 Submodule 'conversion' (https://github.com/boostorg/conversion.git) registered for path 'external/boost/libs/conversion'
09:04:55 Submodule 'convert' (https://github.com/boostorg/convert.git) registered for path 'external/boost/libs/convert'
09:04:55 Submodule 'core' (https://github.com/boostorg/core.git) registered for path 'external/boost/libs/core'
09:04:55 Submodule 'coroutine' (https://github.com/boostorg/coroutine.git) registered for path 'external/boost/libs/coroutine'
09:04:55 Submodule 'coroutine2' (https://github.com/boostorg/coroutine2.git) registered for path 'external/boost/libs/coroutine2'
09:04:55 Submodule 'crc' (https://github.com/boostorg/crc.git) registered for path 'external/boost/libs/crc'
09:04:55 Submodule 'date_time' (https://github.com/boostorg/date_time.git) registered for path 'external/boost/libs/date_time'
09:04:55 Submodule 'detail' (https://github.com/boostorg/detail.git) registered for path 'external/boost/libs/detail'
09:04:55 Submodule 'dll' (https://github.com/boostorg/dll.git) registered for path 'external/boost/libs/dll'
09:04:55 Submodule 'dynamic_bitset' (https://github.com/boostorg/dynamic_bitset.git) registered for path 'external/boost/libs/dynamic_bitset'
09:04:55 Submodule 'endian' (https://github.com/boostorg/endian.git) registered for path 'external/boost/libs/endian'
09:04:55 Submodule 'exception' (https://github.com/boostorg/exception.git) registered for path 'external/boost/libs/exception'
09:04:55 Submodule 'fiber' (https://github.com/boostorg/fiber.git) registered for path 'external/boost/libs/fiber'
09:04:55 Submodule 'filesystem' (https://github.com/boostorg/filesystem.git) registered for path 'external/boost/libs/filesystem'
09:04:55 Submodule 'flyweight' (https://github.com/boostorg/flyweight.git) registered for path 'external/boost/libs/flyweight'
09:04:55 Submodule 'foreach' (https://github.com/boostorg/foreach.git) registered for path 'external/boost/libs/foreach'
09:04:55 Submodule 'format' (https://github.com/boostorg/format.git) registered for path 'external/boost/libs/format'
09:04:55 Submodule 'function' (https://github.com/boostorg/function.git) registered for path 'external/boost/libs/function'
09:04:55 Submodule 'function_types' (https://github.com/boostorg/function_types.git) registered for path 'external/boost/libs/function_types'
09:04:55 Submodule 'functional' (https://github.com/boostorg/functional.git) registered for path 'external/boost/libs/functional'
09:04:55 Submodule 'fusion' (https://github.com/boostorg/fusion.git) registered for path 'external/boost/libs/fusion'
09:04:55 Submodule 'geometry' (https://github.com/boostorg/geometry.git) registered for path 'external/boost/libs/geometry'
09:04:55 Submodule 'gil' (https://github.com/boostorg/gil.git) registered for path 'external/boost/libs/gil'
09:04:55 Submodule 'graph' (https://github.com/boostorg/graph.git) registered for path 'external/boost/libs/graph'
09:04:55 Submodule 'graph_parallel' (https://github.com/boostorg/graph_parallel.git) registered for path 'external/boost/libs/graph_parallel'
09:04:55 Submodule 'hana' (https://github.com/boostorg/hana.git) registered for path 'external/boost/libs/hana'
09:04:55 Submodule 'headers' (https://github.com/boostorg/headers.git) registered for path 'external/boost/libs/headers'
09:04:55 Submodule 'heap' (https://github.com/boostorg/heap.git) registered for path 'external/boost/libs/heap'
09:04:55 Submodule 'histogram' (https://github.com/boostorg/histogram.git) registered for path 'external/boost/libs/histogram'
09:04:55 Submodule 'hof' (https://github.com/boostorg/hof.git) registered for path 'external/boost/libs/hof'
09:04:55 Submodule 'icl' (https://github.com/boostorg/icl.git) registered for path 'external/boost/libs/icl'
09:04:55 Submodule 'integer' (https://github.com/boostorg/integer.git) registered for path 'external/boost/libs/integer'
09:04:55 Submodule 'interprocess' (https://github.com/boostorg/interprocess.git) registered for path 'external/boost/libs/interprocess'
09:04:55 Submodule 'intrusive' (https://github.com/boostorg/intrusive.git) registered for path 'external/boost/libs/intrusive'
09:04:55 Submodule 'io' (https://github.com/boostorg/io.git) registered for path 'external/boost/libs/io'
09:04:55 Submodule 'iostreams' (https://github.com/boostorg/iostreams.git) registered for path 'external/boost/libs/iostreams'
09:04:55 Submodule 'iterator' (https://github.com/boostorg/iterator.git) registered for path 'external/boost/libs/iterator'
09:04:55 Submodule 'json' (https://github.com/boostorg/json.git) registered for path 'external/boost/libs/json'
09:04:55 Submodule 'lambda' (https://github.com/boostorg/lambda.git) registered for path 'external/boost/libs/lambda'
09:04:55 Submodule 'leaf' (https://github.com/boostorg/leaf.git) registered for path 'external/boost/libs/leaf'
09:04:55 Submodule 'lexical_cast' (https://github.com/boostorg/lexical_cast.git) registered for path 'external/boost/libs/lexical_cast'
09:04:55 Submodule 'local_function' (https://github.com/boostorg/local_function.git) registered for path 'external/boost/libs/local_function'
09:04:55 Submodule 'locale' (https://github.com/boostorg/locale.git) registered for path 'external/boost/libs/locale'
09:04:55 Submodule 'lockfree' (https://github.com/boostorg/lockfree.git) registered for path 'external/boost/libs/lockfree'
09:04:55 Submodule 'log' (https://github.com/boostorg/log.git) registered for path 'external/boost/libs/log'
09:04:55 Submodule 'logic' (https://github.com/boostorg/logic.git) registered for path 'external/boost/libs/logic'
09:04:55 Submodule 'math' (https://github.com/boostorg/math.git) registered for path 'external/boost/libs/math'
09:04:55 Submodule 'metaparse' (https://github.com/boostorg/metaparse.git) registered for path 'external/boost/libs/metaparse'
09:04:55 Submodule 'move' (https://github.com/boostorg/move.git) registered for path 'external/boost/libs/move'
09:04:55 Submodule 'mp11' (https://github.com/boostorg/mp11.git) registered for path 'external/boost/libs/mp11'
09:04:55 Submodule 'mpi' (https://github.com/boostorg/mpi.git) registered for path 'external/boost/libs/mpi'
09:04:55 Submodule 'mpl' (https://github.com/boostorg/mpl.git) registered for path 'external/boost/libs/mpl'
09:04:55 Submodule 'msm' (https://github.com/boostorg/msm.git) registered for path 'external/boost/libs/msm'
09:04:55 Submodule 'multi_array' (https://github.com/boostorg/multi_array.git) registered for path 'external/boost/libs/multi_array'
09:04:55 Submodule 'multi_index' (https://github.com/boostorg/multi_index.git) registered for path 'external/boost/libs/multi_index'
09:04:55 Submodule 'multiprecision' (https://github.com/boostorg/multiprecision.git) registered for path 'external/boost/libs/multiprecision'
09:04:55 Submodule 'nowide' (https://github.com/boostorg/nowide.git) registered for path 'external/boost/libs/nowide'
09:04:55 Submodule 'numeric_conversion' (https://github.com/boostorg/numeric_conversion.git) registered for path 'external/boost/libs/numeric/conversion'
09:04:55 Submodule 'interval' (https://github.com/boostorg/interval.git) registered for path 'external/boost/libs/numeric/interval'
09:04:55 Submodule 'odeint' (https://github.com/boostorg/odeint.git) registered for path 'external/boost/libs/numeric/odeint'
09:04:55 Submodule 'ublas' (https://github.com/boostorg/ublas.git) registered for path 'external/boost/libs/numeric/ublas'
09:04:55 Submodule 'optional' (https://github.com/boostorg/optional.git) registered for path 'external/boost/libs/optional'
09:04:55 Submodule 'outcome' (https://github.com/boostorg/outcome.git) registered for path 'external/boost/libs/outcome'
09:04:55 Submodule 'parameter' (https://github.com/boostorg/parameter.git) registered for path 'external/boost/libs/parameter'
09:04:55 Submodule 'parameter_python' (https://github.com/boostorg/parameter_python.git) registered for path 'external/boost/libs/parameter_python'
09:04:55 Submodule 'phoenix' (https://github.com/boostorg/phoenix.git) registered for path 'external/boost/libs/phoenix'
09:04:55 Submodule 'poly_collection' (https://github.com/boostorg/poly_collection.git) registered for path 'external/boost/libs/poly_collection'
09:04:55 Submodule 'polygon' (https://github.com/boostorg/polygon.git) registered for path 'external/boost/libs/polygon'
09:04:55 Submodule 'pool' (https://github.com/boostorg/pool.git) registered for path 'external/boost/libs/pool'
09:04:55 Submodule 'predef' (https://github.com/boostorg/predef.git) registered for path 'external/boost/libs/predef'
09:04:55 Submodule 'preprocessor' (https://github.com/boostorg/preprocessor.git) registered for path 'external/boost/libs/preprocessor'
09:04:55 Submodule 'process' (https://github.com/boostorg/process.git) registered for path 'external/boost/libs/process'
09:04:55 Submodule 'program_options' (https://github.com/boostorg/program_options.git) registered for path 'external/boost/libs/program_options'
09:04:55 Submodule 'property_map' (https://github.com/boostorg/property_map.git) registered for path 'external/boost/libs/property_map'
09:04:55 Submodule 'property_tree' (https://github.com/boostorg/property_tree.git) registered for path 'external/boost/libs/property_tree'
09:04:55 Submodule 'proto' (https://github.com/boostorg/proto.git) registered for path 'external/boost/libs/proto'
09:04:55 Submodule 'ptr_container' (https://github.com/boostorg/ptr_container.git) registered for path 'external/boost/libs/ptr_container'
09:04:55 Submodule 'python' (https://github.com/boostorg/python.git) registered for path 'external/boost/libs/python'
09:04:55 Submodule 'qvm' (https://github.com/boostorg/qvm.git) registered for path 'external/boost/libs/qvm'
09:04:55 Submodule 'random' (https://github.com/boostorg/random.git) registered for path 'external/boost/libs/random'
09:04:55 Submodule 'range' (https://github.com/boostorg/range.git) registered for path 'external/boost/libs/range'
09:04:55 Submodule 'ratio' (https://github.com/boostorg/ratio.git) registered for path 'external/boost/libs/ratio'
09:04:55 Submodule 'rational' (https://github.com/boostorg/rational.git) registered for path 'external/boost/libs/rational'
09:04:55 Submodule 'regex' (https://github.com/boostorg/regex.git) registered for path 'external/boost/libs/regex'
09:04:55 Submodule 'safe_numerics' (https://github.com/boostorg/safe_numerics.git) registered for path 'external/boost/libs/safe_numerics'
09:04:55 Submodule 'scope_exit' (https://github.com/boostorg/scope_exit.git) registered for path 'external/boost/libs/scope_exit'
09:04:55 Submodule 'serialization' (https://github.com/boostorg/serialization.git) registered for path 'external/boost/libs/serialization'
09:04:55 Submodule 'signals2' (https://github.com/boostorg/signals2.git) registered for path 'external/boost/libs/signals2'
09:04:55 Submodule 'smart_ptr' (https://github.com/boostorg/smart_ptr.git) registered for path 'external/boost/libs/smart_ptr'
09:04:55 Submodule 'sort' (https://github.com/boostorg/sort.git) registered for path 'external/boost/libs/sort'
09:04:55 Submodule 'spirit' (https://github.com/boostorg/spirit.git) registered for path 'external/boost/libs/spirit'
09:04:55 Submodule 'stacktrace' (https://github.com/boostorg/stacktrace.git) registered for path 'external/boost/libs/stacktrace'
09:04:55 Submodule 'statechart' (https://github.com/boostorg/statechart.git) registered for path 'external/boost/libs/statechart'
09:04:55 Submodule 'static_assert' (https://github.com/boostorg/static_assert.git) registered for path 'external/boost/libs/static_assert'
09:04:55 Submodule 'static_string' (https://github.com/boostorg/static_string.git) registered for path 'external/boost/libs/static_string'
09:04:55 Submodule 'stl_interfaces' (https://github.com/boostorg/stl_interfaces.git) registered for path 'external/boost/libs/stl_interfaces'
09:04:55 Submodule 'system' (https://github.com/boostorg/system.git) registered for path 'external/boost/libs/system'
09:04:55 Submodule 'test' (https://github.com/boostorg/test.git) registered for path 'external/boost/libs/test'
09:04:55 Submodule 'thread' (https://github.com/boostorg/thread.git) registered for path 'external/boost/libs/thread'
09:04:55 Submodule 'throw_exception' (https://github.com/boostorg/throw_exception.git) registered for path 'external/boost/libs/throw_exception'
09:04:55 Submodule 'timer' (https://github.com/boostorg/timer.git) registered for path 'external/boost/libs/timer'
09:04:55 Submodule 'tokenizer' (https://github.com/boostorg/tokenizer.git) registered for path 'external/boost/libs/tokenizer'
09:04:55 Submodule 'tti' (https://github.com/boostorg/tti.git) registered for path 'external/boost/libs/tti'
09:04:55 Submodule 'tuple' (https://github.com/boostorg/tuple.git) registered for path 'external/boost/libs/tuple'
09:04:55 Submodule 'type_erasure' (https://github.com/boostorg/type_erasure.git) registered for path 'external/boost/libs/type_erasure'
09:04:55 Submodule 'type_index' (https://github.com/boostorg/type_index.git) registered for path 'external/boost/libs/type_index'
09:04:55 Submodule 'type_traits' (https://github.com/boostorg/type_traits.git) registered for path 'external/boost/libs/type_traits'
09:04:55 Submodule 'typeof' (https://github.com/boostorg/typeof.git) registered for path 'external/boost/libs/typeof'
09:04:55 Submodule 'units' (https://github.com/boostorg/units.git) registered for path 'external/boost/libs/units'
09:04:55 Submodule 'unordered' (https://github.com/boostorg/unordered.git) registered for path 'external/boost/libs/unordered'
09:04:55 Submodule 'utility' (https://github.com/boostorg/utility.git) registered for path 'external/boost/libs/utility'
09:04:55 Submodule 'uuid' (https://github.com/boostorg/uuid.git) registered for path 'external/boost/libs/uuid'
09:04:55 Submodule 'variant' (https://github.com/boostorg/variant.git) registered for path 'external/boost/libs/variant'
09:04:55 Submodule 'variant2' (https://github.com/boostorg/variant2.git) registered for path 'external/boost/libs/variant2'
09:04:55 Submodule 'vmd' (https://github.com/boostorg/vmd.git) registered for path 'external/boost/libs/vmd'
09:04:55 Submodule 'wave' (https://github.com/boostorg/wave.git) registered for path 'external/boost/libs/wave'
09:04:55 Submodule 'winapi' (https://github.com/boostorg/winapi.git) registered for path 'external/boost/libs/winapi'
09:04:55 Submodule 'xpressive' (https://github.com/boostorg/xpressive.git) registered for path 'external/boost/libs/xpressive'
09:04:55 Submodule 'yap' (https://github.com/boostorg/yap.git) registered for path 'external/boost/libs/yap'
09:04:55 Submodule 'more' (https://github.com/boostorg/more.git) registered for path 'external/boost/more'
09:04:55 Submodule 'auto_index' (https://github.com/boostorg/auto_index.git) registered for path 'external/boost/tools/auto_index'
09:04:56 Submodule 'bcp' (https://github.com/boostorg/bcp.git) registered for path 'external/boost/tools/bcp'
09:04:56 Submodule 'boost_install' (https://github.com/boostorg/boost_install.git) registered for path 'external/boost/tools/boost_install'
09:04:56 Submodule 'boostbook' (https://github.com/boostorg/boostbook.git) registered for path 'external/boost/tools/boostbook'
09:04:56 Submodule 'boostdep' (https://github.com/boostorg/boostdep.git) registered for path 'external/boost/tools/boostdep'
09:04:56 Submodule 'build' (https://github.com/boostorg/build.git) registered for path 'external/boost/tools/build'
09:04:56 Submodule 'check_build' (https://github.com/boostorg/check_build.git) registered for path 'external/boost/tools/check_build'
09:04:56 Submodule 'cmake' (https://github.com/boostorg/cmake.git) registered for path 'external/boost/tools/cmake'
09:04:56 Submodule 'docca' (https://github.com/boostorg/docca.git) registered for path 'external/boost/tools/docca'
09:04:56 Submodule 'inspect' (https://github.com/boostorg/inspect.git) registered for path 'external/boost/tools/inspect'
09:04:56 Submodule 'litre' (https://github.com/boostorg/litre.git) registered for path 'external/boost/tools/litre'
09:04:56 Submodule 'quickbook' (https://github.com/boostorg/quickbook.git) registered for path 'external/boost/tools/quickbook'
09:04:58 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/accumulators'...
09:05:00 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/algorithm'...
09:05:02 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/align'...
09:05:03 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/any'...
09:05:05 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/array'...
09:05:10 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/asio'...
09:05:12 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/assert'...
09:05:14 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/assign'...
09:05:16 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/atomic'...
09:05:21 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/beast'...
09:05:23 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/bimap'...
09:05:25 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/bind'...
09:05:27 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/callable_traits'...
09:05:29 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/chrono'...
09:05:32 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/circular_buffer'...
09:05:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/compatibility'...
09:05:38 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/compute'...
09:05:40 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/concept_check'...
09:05:43 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/config'...
09:05:46 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/container'...
09:05:48 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/container_hash'...
09:05:51 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/context'...
09:05:54 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/contract'...
09:05:56 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/conversion'...
09:05:59 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/convert'...
09:06:01 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/core'...
09:06:03 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/coroutine'...
09:06:05 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/coroutine2'...
09:06:06 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/crc'...
09:06:09 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/date_time'...
09:06:11 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/detail'...
09:06:13 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/dll'...
09:06:15 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/dynamic_bitset'...
09:06:17 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/endian'...
09:06:20 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/exception'...
09:06:23 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/fiber'...
09:06:27 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/filesystem'...
09:06:28 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/flyweight'...
09:06:30 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/foreach'...
09:06:32 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/format'...
09:06:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/function'...
09:06:36 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/function_types'...
09:06:38 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/functional'...
09:06:44 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/fusion'...
09:06:56 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/geometry'...
09:07:14 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/gil'...
09:07:20 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/graph'...
09:07:22 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/graph_parallel'...
09:07:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/hana'...
09:07:35 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/headers'...
09:07:37 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/heap'...
09:07:40 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/histogram'...
09:07:43 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/hof'...
09:07:46 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/icl'...
09:07:48 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/integer'...
09:07:51 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/interprocess'...
09:07:53 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/intrusive'...
09:07:55 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/io'...
09:07:58 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/iostreams'...
09:08:01 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/iterator'...
09:08:04 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/json'...
09:08:06 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/lambda'...
09:08:10 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/leaf'...
09:08:11 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/lexical_cast'...
09:08:13 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/local_function'...
09:08:15 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/locale'...
09:08:17 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/lockfree'...
09:08:20 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/log'...
09:08:22 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/logic'...
09:08:46 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/math'...
09:08:48 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/metaparse'...
09:08:50 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/move'...
09:08:52 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/mp11'...
09:08:55 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/mpi'...
09:08:58 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/mpl'...
09:09:02 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/msm'...
09:09:04 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/multi_array'...
09:09:07 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/multi_index'...
09:09:19 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/multiprecision'...
09:09:20 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/nowide'...
09:09:22 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/numeric/conversion'...
09:09:24 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/numeric/interval'...
09:09:27 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/numeric/odeint'...
09:09:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/numeric/ublas'...
09:09:36 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/optional'...
09:09:43 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/outcome'...
09:09:45 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/parameter'...
09:09:46 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/parameter_python'...
09:09:49 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/phoenix'...
09:09:52 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/poly_collection'...
09:09:54 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/polygon'...
09:09:57 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/pool'...
09:09:59 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/predef'...
09:10:02 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/preprocessor'...
09:10:04 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/process'...
09:10:06 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/program_options'...
09:10:09 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/property_map'...
09:10:11 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/property_tree'...
09:10:13 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/proto'...
09:10:15 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/ptr_container'...
09:10:21 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/python'...
09:10:23 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/qvm'...
09:10:26 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/random'...
09:10:28 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/range'...
09:10:30 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/ratio'...
09:10:32 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/rational'...
09:10:37 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/regex'...
09:10:39 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/safe_numerics'...
09:10:41 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/scope_exit'...
09:10:46 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/serialization'...
09:10:48 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/signals2'...
09:10:51 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/smart_ptr'...
09:10:53 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/sort'...
09:11:11 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/spirit'...
09:11:13 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/stacktrace'...
09:11:15 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/statechart'...
09:11:17 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/static_assert'...
09:11:19 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/static_string'...
09:11:21 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/stl_interfaces'...
09:11:24 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/system'...
09:11:28 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/test'...
09:11:32 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/thread'...
09:11:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/throw_exception'...
09:11:36 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/timer'...
09:11:37 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/tokenizer'...
09:11:40 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/tti'...
09:11:41 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/tuple'...
09:11:43 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/type_erasure'...
09:11:45 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/type_index'...
09:11:49 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/type_traits'...
09:11:51 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/typeof'...
09:11:53 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/units'...
09:11:56 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/unordered'...
09:11:58 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/utility'...
09:12:01 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/uuid'...
09:12:03 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/variant'...
09:12:05 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/variant2'...
09:12:07 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/vmd'...
09:12:12 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/wave'...
09:12:14 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/winapi'...
09:12:18 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/xpressive'...
09:12:20 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/libs/yap'...
09:12:22 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/more'...
09:12:27 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/auto_index'...
09:12:29 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/bcp'...
09:12:30 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/boost_install'...
09:12:32 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/boostbook'...
09:12:34 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/boostdep'...
09:12:43 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/build'...
09:12:45 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/check_build'...
09:12:47 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/cmake'...
09:12:48 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/docca'...
09:12:50 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/inspect'...
09:12:53 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/litre'...
09:12:57 Cloning into 'C:/jenkins/builds/LIBRARYFILESAPPSWIN/LibFileSupportTool/external/boost/tools/quickbook'...
09:12:58 fatal: Submodule (accumulators) branch configured to inherit branch from superproject, but the superproject is not on any branch
09:13:01 fatal: Needed a single revision
09:13:01 Unable to find current origin/ revision in submodule path 'libs/accumulators'
This code is a slightly modified example from the Boost.Accumualators documentation, https://scicomp.ethz.ch/public/manual/Boost/1.55.0/accumulators.pdf , p.50.
It has two constants, n
, c
: sample size and cache size.
The purpose of this library, if I'm not mistaken, that the stats are computed for c << n
.
However, this code yields nans and fails the test.
When the cache size is set equal to a sample size c = n;
the test passes.
#include <iostream>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/tail_quantile.hpp>
#include <boost/random/lagged_fibonacci.hpp>
#include <cassert>
using namespace boost::accumulators;
int main() {
double epsilon = 1.e-2;
std::size_t n = 100000; // number of MC steps
std::size_t c = 10000; // cache size
typedef accumulator_set<double, stats<tag::tail_quantile<right> > > accumulator_t_right;
typedef accumulator_set<double, stats<tag::tail_quantile<left> > > accumulator_t_left;
accumulator_t_right acc0( tag::tail<right>::cache_size = c );
accumulator_t_left acc2( tag::tail<left>::cache_size = c );
boost::lagged_fibonacci607 rng;
for (std::size_t i = 0; i < n; ++i) {
double sample1 = rng();
acc0(sample1);
acc2(sample1);
}
std::cout << quantile(acc0, quantile_probability = 0.95) << std::endl;
std::cout << quantile(acc0, quantile_probability = 0.75) << std::endl;
std::cout << quantile(acc2, quantile_probability = 0.25) << std::endl;
std::cout << quantile(acc2, quantile_probability = 0.05) << std::endl;
assert(std::fabs(quantile(acc0, quantile_probability = 0.95 )- 0.95) < epsilon);
assert(std::fabs(quantile(acc0, quantile_probability = 0.975)- 0.975) <epsilon );
assert(std::fabs(quantile(acc0, quantile_probability = 0.75)- 0.75) <epsilon );
assert(std::fabs(quantile(acc0, quantile_probability = 0.99 )- 0.99) <epsilon );
assert(std::fabs(quantile(acc0, quantile_probability = 0.999)- 0.999) <epsilon );
assert(std::fabs(quantile(acc0, quantile_probability = 0.25)- 0.25) <epsilon );
assert(std::fabs(quantile(acc2, quantile_probability = 0.05 )- 0.05) <epsilon );
assert(std::fabs(quantile(acc2, quantile_probability = 0.025)- 0.025) <epsilon );
assert(std::fabs(quantile(acc2, quantile_probability = 0.01 )- 0.01) <epsilon );
assert(std::fabs(quantile(acc2, quantile_probability = 0.001)- 0.001)<epsilon );
return 0;
}
The output:
0.949523
nan
nan
0.0516118
a.out: ./1.cpp:35: int main(): Assertion `std::fabs(quantile(acc0, quantile_probability = 0.75)- 0.75) <epsilon' failed.
The P^2 algorithms assumes that 5 observations are available from the beginning.
The p_square_quantile
class make the same assumption, and it always returns the middle height (index 2) even when there are less than 6 observations.
A special case is needed for count < 6.
A solution is to always sort the heights when count < 6. Then we can return something like this (where cnt
is the current count)
result_type result(dont_care) const
{
if (cnt >= 6)
{
return this->height[2];
}
else
{
const std::size_t nearest_rank = std::ceil(cnt * p);
return this->height[nearest_rank - 1];
}
}
when pushed a nan, statistic values go wrong.
just like skew and kurt.
This is an example from Golub's paper:
#include <iostream>
#include <vector>
#include <random>
#include <cmath>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
template<class Real>
void golub_example()
{
std::random_device rd{};
auto seed = rd();
std::mt19937 gen(seed);
std::normal_distribution<Real> dis(500.0, 0.01);
std::vector<Real> v(50000);
for(size_t i = 0; i < v.size(); ++i)
{
v[i] = dis(gen);
}
accumulator_set<Real, stats<tag::variance(lazy)>> acc;
acc = std::for_each(v.begin(), v.end(), acc);
std::cout << "Variance = " << variance(acc) << "\n";
std::cout << "Seed = " << seed << "\n";
}
int main()
{
golub_example<float>();
}
Output:
Variance (accumulator) = -79.9219
Seed = 1925235287
The following code snipped generates compiler errors:
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <boost/accumulators/statistics/density.hpp>
using namespace boost::accumulators;
using namespace boost;
typedef accumulator_set<double,features<tag::density>> histogram_type;
int main(int argc, char*argv[])
{
histogram_type hist;
hist(1.0);
hist(2.0);
return 0;
}
It compiles without problems when removing the features
tag such that the line reads
typedef accumulator_set<double, tag::density> histogram_type;
The examples from the documentation uses the features
tag together with density
.
In file included from /usr/local/include/boost/accumulators/statistics.hpp:14,
from hist.cpp:2:
/usr/local/include/boost/accumulators/statistics/density.hpp: In constructor ‘boost::accumulators::impl::density_impl<Sample>::density_impl(const Args&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, Sample = double]’:
/usr/local/include/boost/accumulators/framework/depends_on.hpp:319: instantiated from ‘boost::accumulators::detail::accumulator_wrapper<Accumulator, Feature>::accumulator_wrapper(const Args&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, Accumulator = boost::accumulators::impl::density_impl<double>, Feature = boost::accumulators::tag::density]’
/usr/local/include/boost/accumulators/framework/depends_on.hpp:252: instantiated from ‘static boost::fusion::cons<typename boost::fusion::result_of::value_of<Iterator>::type, typename boost::accumulators::detail::build_acc_list<typename boost::fusion::result_of::next<Iterator>::type, Last, boost::fusion::result_of::equal_to::value>::type> boost::accumulators::detail::build_acc_list<First, Last, false>::call(const Args&, const First&, const Last&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, First = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 3l> >, Last = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 4l> >]’
/usr/local/include/boost/accumulators/framework/depends_on.hpp:252: instantiated from ‘static boost::fusion::cons<typename boost::fusion::result_of::value_of<Iterator>::type, typename boost::accumulators::detail::build_acc_list<typename boost::fusion::result_of::next<Iterator>::type, Last, boost::fusion::result_of::equal_to::value>::type> boost::accumulators::detail::build_acc_list<First, Last, false>::call(const Args&, const First&, const Last&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, First = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 2l> >, Last = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 4l> >]’
/usr/local/include/boost/accumulators/framework/depends_on.hpp:252: instantiated from ‘static boost::fusion::cons<typename boost::fusion::result_of::value_of<Iterator>::type, typename boost::accumulators::detail::build_acc_list<typename boost::fusion::result_of::next<Iterator>::type, Last, boost::fusion::result_of::equal_to::value>::type> boost::accumulators::detail::build_acc_list<First, Last, false>::call(const Args&, const First&, const Last&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, First = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 1l> >, Last = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 4l> >]’
/usr/local/include/boost/accumulators/framework/depends_on.hpp:252: instantiated from ‘static boost::fusion::cons<typename boost::fusion::result_of::value_of<Iterator>::type, typename boost::accumulators::detail::build_acc_list<typename boost::fusion::result_of::next<Iterator>::type, Last, boost::fusion::result_of::equal_to::value>::type> boost::accumulators::detail::build_acc_list<First, Last, false>::call(const Args&, const First&, const Last&) [with Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>, First = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 0l> >, Last = boost::fusion::mpl_iterator<boost::mpl::v_iter<boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, 4l> >]’
/usr/local/include/boost/accumulators/framework/depends_on.hpp:271: instantiated from ‘typename boost::accumulators::detail::meta::make_acc_list<Sequence>::type boost::accumulators::detail::make_acc_list(const Sequence&, const Args&) [with Sequence = boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::density_impl<double>, boost::accumulators::tag::density>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::max_impl<double>, boost::accumulators::tag::max>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::min_impl<double>, boost::accumulators::tag::min>, boost::mpl::v_item<boost::accumulators::detail::accumulator_wrapper<boost::accumulators::impl::count_impl, boost::accumulators::tag::count>, boost::mpl::vector0<mpl_::na>, 0>, 0>, 0>, 0>, Args = boost::parameter::aux::arg_list<boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, boost::parameter::aux::empty_arg_list>]’
/usr/local/include/boost/accumulators/framework/accumulator_set.hpp:145: instantiated from ‘boost::accumulators::accumulator_set<Sample, Features, Weight>::accumulator_set() [with Sample = double, Features = boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, Weight = void]’
hist.cpp:12: instantiated from here
/usr/local/include/boost/accumulators/statistics/density.hpp:84: error: no match for ‘operator[]’ in ‘args[boost::accumulators::<unnamed>::density_cache_size]’
/usr/local/include/boost/parameter/aux_/arg_list.hpp:327: note: candidates are: typename boost::mpl::eval_if<typename boost::parameter::aux::is_maybe<typename TaggedArg::value_type>::type, boost::parameter::aux::get_reference<typename TaggedArg::value_type>, boost::parameter::aux::get_reference<TaggedArg> >::type boost::parameter::aux::arg_list<TaggedArg, Next>::operator[](const boost::parameter::keyword<typename TaggedArg::key_type>&) const [with TaggedArg = boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, Next = boost::parameter::aux::empty_arg_list]
/usr/local/include/boost/accumulators/statistics/density.hpp:84: error: no match for ‘operator[]’ in ‘args[boost::accumulators::<unnamed>::density_num_bins]’
/usr/local/include/boost/parameter/aux_/arg_list.hpp:327: note: candidates are: typename boost::mpl::eval_if<typename boost::parameter::aux::is_maybe<typename TaggedArg::value_type>::type, boost::parameter::aux::get_reference<typename TaggedArg::value_type>, boost::parameter::aux::get_reference<TaggedArg> >::type boost::parameter::aux::arg_list<TaggedArg, Next>::operator[](const boost::parameter::keyword<typename TaggedArg::key_type>&) const [with TaggedArg = boost::parameter::aux::tagged_argument<boost::accumulators::tag::accumulator, boost::accumulators::accumulator_set<double, boost::accumulators::features<boost::accumulators::tag::density, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, void> >, Next = boost::parameter::aux::empty_arg_list]
Boost v1.61, gnu g++ v4.4.5
In [weighted_][extended_]p_square.hpp
, the p-square algorithm (an online - in the sense that it doesn't require storing all samples - quantile estimator) is implemented. Additionally:
The extended version also introduces the ability to use interpolation:
[weighted_]extended_p_square_quantile
is instantiated with requested quantiles {0.001, 0.2, 0.5, 0.8, 0.999}
{0, 0.0005, 0.001, ~0.1, 0.2, 0.35, 0.5, 0.65, 0.8, ~0.9, 0.999, 1}
where quantiles 0 (resp. 1) corresponds to the min (resp. max) value seen, and values not present in requested quantiles are mid-points between requested quantiles.boost::accumulators::quantile
method can be used with this accumulator set to extract a desired quantile estimate.{0.001, 0.2, 0.5, 0.8, 0.999}
in this example)In essence:
To show this, the MWE2.{cpp,py}
programs are provided.
{0.001, 0.2, 0.5, 0.8, 0.999}
.{0.0005, 0.1, 0.35, 0.65, 0.9, 0.9995}
.quantile_override
method proposed in MWE2.cpp
).Note that estimates of quantiles 0.35 and 0.65 are reasonable (in some sense, they lie in the "linear regime" of the quantile function), but estimates of quantiles 0.1 and 0.9 are poor. Quantiles 0.0005 and 0.9995 could not be computed by the current implementation due its limitations (see above), returning nan.
Notes:
g++ -I$BOOST_INCLUDE_PATH -fno-access-control MWE2.cpp -o MWE2
MWE2 > data2.csv
python3 MWE2.py
MWE2.py
requires matplotlib
and pandas
develop
since it exposes the accumulator
and the heights
attribute as public to be able to implement the quantile_override
method.extract
namespace, which I did not, for lack of time and understanding of the possible implications of changes to that namespace.I noticed here, line 58, that the variance is not calculated exactly, but rather calculated using an approximation.
I ran a git blame
on this file as well as the higher order moments and found that at the time it was written (2008), there was no known exact, numerically stable, single pass, online algorithm which can compute higher order moments. This changed in 2009 with the publication of the following paper:
Updating the variance, covariance, skewness, kurtosis, and all higher order moments to use these formulas is no small task, but since the current approximation seems uncontrolled, at some point it seems like it is reasonable to add them to the accumulators library.
Would you be interested in accepting a PR for the condition number of summation?
It's not a complicated algorithm, of course, but still it's a very useful diagnostic. Here's a sketch:
template<class Real>
class summation_condition_number {
public:
summation_condition_number(Real x = 0)
{
using std::abs;
m_l1 = abs(x);
m_sum = x;
}
void operator+=(Real x)
{
using std::abs;
m_l1 += abs(x);
m_sum += x;
}
[[nodiscard]] Real operator()() const
{
using std::abs;
if (m_sum == Real(0) && m_l1 != Real(0))
{
return std::numeric_limits<Real>::infinity();
}
return m_l1/abs(m_sum);
}
[[nodiscard]] Real sum() const
{
return m_sum;
}
private:
Real m_l1;
Real m_sum;
};
and usage:
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<Real> dist(-1,1);
cond = summation_condition_number<Real>();
int i = 0;
while(i++ < 1000000)
{
cond += dist(gen);
}
std::cout << "Condition number = " << cond() << "\n";
std::cout << "Sum = " << cond.sum() << "\n";
Hi All,
This is reiteration of the old stackoverflow question. Rolling mean seems not working correctly with unsigned integers. My system: Mac OS, High Sierra, the latest brew updates.
// g++ -std=c++11 -o accum_test accum_test.cpp
Sample file is attached.
accum_test.txt
OUTPUT:
***** Signed integers *****
9 actualMean: 9.0000000000000000
8 actualMean: 8.5000000000000000
7 actualMean: 8.0000000000000000
5 actualMean: 7.2500000000000000
6 actualMean: 7.0000000000000000
4 actualMean: 6.0000000000000000
3 actualMean: 5.0000000000000000
2 actualMean: 4.0000000000000000
1 actualMean: 3.2000000000000002
0 actualMean: 2.0000000000000000
0 actualMean: 1.2000000000000000
0 actualMean: 0.6000000000000000
0 actualMean: 0.2000000000000000
0 actualMean: -0.0000000000000001
0 actualMean: -0.0000000000000001
0 actualMean: -0.0000000000000001
***** Unsigned integers *****
9 actualMean: 9.0000000000000000
8 actualMean: 8.5000000000000000
7 actualMean: 8.0000000000000000
5 actualMean: 7.2500000000000000
6 actualMean: 7.0000000000000000
4 actualMean: 858993465.2000000476837158
3 actualMean: 1717986923.4000000953674316
2 actualMean: 2576980381.6000003814697266
1 actualMean: 3435973840.0000004768371582
0 actualMean: 4294967298.0000000000000000
0 actualMean: 5153960756.3999996185302734
0 actualMean: 6012954215.0000000000000000
0 actualMean: 6871947673.8000001907348633
0 actualMean: 7730941132.8000001907348633
0 actualMean: 7730941132.8000001907348633
0 actualMean: 7730941132.8000001907348633
The first half of the documentation for variance is correct - it shows the formulas used for variance and mean. This formula is correct, and it is what is implemented in the boost code. (It implements a variant of the Welford method of computing variance.)
But the second half of the documentation is, at best, misleading. The second half starts with "A simplification can be obtained by the approximate recursion...", then gives some formulas, and ends with "However, for small n the difference can be non-negligible." This is misleading because this "simplification" is not, in fact, used by the boost code. And that's a good thing, because this "simplification" would produce incorrect results, and would not actually be any simpler. As far as I can tell, the second half of the documentation should be eliminated entirely.
I note that the current situation leads some people to incorrectly believe that it is sometimes preferable to use boost::accumulators::tag::lazy_variance. For example, at link to a stackoverflow question, one person claims:
Note, that tag::variance calculates variance by an approximate formula. tag::variance(lazy) calculates by an exact formula, specifically: second moment - squared mean which will produce incorrect result if variance is very small because of rounding errors. It can actually produce negative variance. – panda-34 Dec 7 '15 at 13:36
This person incorrectly thinks that tag::variance is only approximate.
As far as I can tell, the only reason to use tag::lazy_variance is if speed is your only consideration, since tag::lazy_variance is roughly twice as fast as tag::variance. But both are quite fast, so this is unlikely to be a consideration for most users.
After boostorg/parameter#21 some Accumulators headers no longer compile. Found via Ceph (source). For one, in statistics/rolling_sum.hpp the error originates from
$ cat >a.cc
#include <boost/accumulators/statistics/rolling_sum.hpp>
$ clang++70 -c a.cc
In file included from a.cc:1:
In file included from /usr/include/boost/accumulators/statistics/rolling_sum.hpp:13:
In file included from /usr/include/boost/accumulators/framework/extractor.hpp:25:
In file included from /usr/include/boost/accumulators/framework/parameters/accumulator.hpp:11:
/usr/include/boost/parameter/keyword.hpp:53:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/accumulators/statistics/rolling_window.hpp:30:1: note: in instantiation of template class
'boost::parameter::keyword<boost::accumulators::tag::rolling_window_size_<0> >' requested here
BOOST_PARAMETER_NESTED_KEYWORD(tag, rolling_window_size, window_size)
^
/usr/include/boost/accumulators/accumulators_fwd.hpp:227:29: note: expanded from macro
'BOOST_PARAMETER_NESTED_KEYWORD'
::boost::parameter::keyword<tag_namespace::name>::get(); \
^
In file included from a.cc:1:
In file included from /usr/include/boost/accumulators/statistics/rolling_sum.hpp:13:
In file included from /usr/include/boost/accumulators/framework/extractor.hpp:25:
In file included from /usr/include/boost/accumulators/framework/parameters/accumulator.hpp:11:
/usr/include/boost/parameter/keyword.hpp:83:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:109:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:139:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:184:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:214:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:243:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
/usr/include/boost/parameter/keyword.hpp:273:39: error: no type named 'qualifier' in
'boost::accumulators::tag::rolling_window_size_<0>'
typename Tag::qualifier
~~~~~~~~~~~~~~^~~~~~~~~
8 errors generated.
I do not know the history here, but it seems that the component numeric_ublas was probably recently removed but CMakeLists.txt was not updated.
I have found that simply removing the line containing "Boost::numeric_ublas" is sufficient to build boost-1.82.0
.
We are in the process of making B2 build changes to all of the B2 build files
to support "modular" consumption of the Boost Libraries by users. See this list
post for some details: https://lists.boost.org/Archives/boost/2024/01/255704.php
The process requires making a variety of changes to make each Boost library
independent of the super-project structure. But the changes do not remove the
super-project structure or the comprehensive Boost release. The changes make
solely make it possible, optionally, for users, like package manages, to easily
consume libraries individually.
Generally the changes include:
Some examples of such changes:
We are asking how you would like us to handle the changes. We would prefer if
you allow the owners of the Boost.org GitHub project to make changes to B2
build files, as needed, to accomplish the changes. But understand
that you may want to manage the proposed changes yourself.
We previously sent emails to all known maintainers to fill out a form with their
preference. We are contacting you in this issue as we have not gotten a response
to that email. You can see the ongoing responses for that form and the responses
to these issues here https://github.com/users/grafikrobot/projects/1/views/6
We are now asking if you can reply directly to this issue to indicate your
preference of handling the changes. Please supply a response to this question
and close the issue (so that we can verify you are a maintainer).
How would you like the build changes to be processed?
Also please indicate any special instructions you want us to consider. Or other
information you want us to be aware of.
Thanks you, René
call "D:\teeks99-09\run\results\boost\bin.v2\standalone\msvc\msvc-14.1\adrs-mdl-64\archt-x86\msvc-setup.bat" >nul
cl /Zm800 -nologo @"D:\teeks99-09\run\results\boost\bin.v2\libs\accumulators\test\count.test\msvc-14.1\dbg\adrs-mdl-64\itrtr-off\lnk-sttc\thrd-mlt\count.obj.rsp"
cl : Command line error D8021 : invalid numeric argument '/Wno-deprecated-declarations'
Some accumulators are addable: count, sum, mean, variance.
The proposal is to support operator+ for these and for accumulator_set if all stored accumulators are addable.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.