diff --git a/doc/test/Jamfile.v2 b/doc/test/Jamfile.v2 index 7e0b31d729..0d5af3ddaa 100644 --- a/doc/test/Jamfile.v2 +++ b/doc/test/Jamfile.v2 @@ -73,7 +73,7 @@ doxygen tagfile # generate .png images for the LaTeX formulas embedded in the doc comments. doxygen statsdoc.html : - ../../boost/accumulators/statistics/weighted_tail_quantile.hpp + weighted_tail_quantile.hpp : latex.check dvips.check @@ -115,7 +115,7 @@ make statsdoclatex.tag doxygen statsdoc : - ../../boost/accumulators/statistics/weighted_tail_quantile.hpp + weighted_tail_quantile.hpp : EXTRACT_ALL=YES "PREDEFINED=\"BOOST_ACCUMULATORS_DOXYGEN_INVOKED=1\" \\ @@ -155,6 +155,7 @@ boostbook standalone toc.section.depth=2 chunk.section.depth=1 boost.root=../../.. + html:callout.graphics.path=../../src/images/callouts/ boost.libraries=../../../libs/libraries.htm navig.graphics=1 html.stylesheet=../../../doc/html/boostbook.css diff --git a/doc/test/gold/images/beta_dist_kurtosis.png b/doc/test/gold/images/beta_dist_kurtosis.png new file mode 100644 index 0000000000..1be258bfde Binary files /dev/null and b/doc/test/gold/images/beta_dist_kurtosis.png differ diff --git a/doc/test/gold/images/digamma3.png b/doc/test/gold/images/digamma3.png new file mode 100644 index 0000000000..bf4b81f607 Binary files /dev/null and b/doc/test/gold/images/digamma3.png differ diff --git a/doc/test/gold/images/doctest.png b/doc/test/gold/images/doctest.png new file mode 100644 index 0000000000..6d58193b31 Binary files /dev/null and b/doc/test/gold/images/doctest.png differ diff --git a/doc/test/gold/images/open_clipart_library_logo.svg b/doc/test/gold/images/open_clipart_library_logo.svg new file mode 100644 index 0000000000..9a4521f3a5 --- /dev/null +++ b/doc/test/gold/images/open_clipart_library_logo.svg @@ -0,0 +1,143 @@ + + + + + + + + image/svg+xml + + Open Clip Art Logo + 10-01-2004 + + + Andreas Nilsson + + + + + + Jon Phillips, Tobias Jakobs + + + This is one version of the official Open Clip Art Library logo. + logo, open clip art library logo, logotype + + + + + + + + + + + + + + + + + + + diff --git a/doc/test/gold/images/remez-2.png b/doc/test/gold/images/remez-2.png new file mode 100644 index 0000000000..e9bfbd9108 Binary files /dev/null and b/doc/test/gold/images/remez-2.png differ diff --git a/doc/test/gold/images/remez-3.png b/doc/test/gold/images/remez-3.png new file mode 100644 index 0000000000..6493527d56 Binary files /dev/null and b/doc/test/gold/images/remez-3.png differ diff --git a/doc/test/gold/images/remez-4.png b/doc/test/gold/images/remez-4.png new file mode 100644 index 0000000000..6733bac9b9 Binary files /dev/null and b/doc/test/gold/images/remez-4.png differ diff --git a/doc/test/gold/images/remez-5.png b/doc/test/gold/images/remez-5.png new file mode 100644 index 0000000000..80727614f8 Binary files /dev/null and b/doc/test/gold/images/remez-5.png differ diff --git a/doc/test/weighted_tail_quantile.hpp b/doc/test/weighted_tail_quantile.hpp new file mode 100644 index 0000000000..997ac3a21b --- /dev/null +++ b/doc/test/weighted_tail_quantile.hpp @@ -0,0 +1,144 @@ +/////////////////////////////////////////////////////////////////////////////// +// weighted_tail_quantile.hpp +// +// Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_TAIL_QUANTILE_HPP_DE_01_01_2006 +#define BOOST_ACCUMULATORS_STATISTICS_WEIGHTED_TAIL_QUANTILE_HPP_DE_01_01_2006 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4127) // conditional expression is constant +#endif + +namespace boost { namespace accumulators +{ + +namespace impl +{ + /////////////////////////////////////////////////////////////////////////////// + // weighted_tail_quantile_impl + // Tail quantile estimation based on order statistics of weighted samples + /** + @brief Tail quantile estimation based on order statistics of weighted samples (for both left and right tails) + + An estimator \f$\hat{q}\f$ of tail quantiles with level \f$\alpha\f$ based on order statistics + \f$X_{1:n} \leq X_{2:n} \leq\dots\leq X_{n:n}\f$ of weighted samples are given by \f$X_{\lambda:n}\f$ (left tail) + and \f$X_{\rho:n}\f$ (right tail), where + + \f[ + \lambda = \inf\left\{ l \left| \frac{1}{\bar{w}_n}\sum_{i=1}^{l} w_i \geq \alpha \right. \right\} + \f] + + and + + \f[ + \rho = \sup\left\{ r \left| \frac{1}{\bar{w}_n}\sum_{i=r}^{n} w_i \geq (1 - \alpha) \right. \right\}, + \f] + + \f$n\f$ being the number of samples and \f$\bar{w}_n\f$ the sum of all weights. + + @param quantile_probability + */ + template + struct weighted_tail_quantile_impl + : accumulator_base + { + typedef typename numeric::functional::average::result_type float_type; + // for boost::result_of + typedef Sample result_type; + + weighted_tail_quantile_impl(dont_care) {} + + template + result_type result(Args const &args) const + { + float_type threshold = sum_of_weights(args) + * ( ( is_same::value ) ? args[quantile_probability] : 1. - args[quantile_probability] ); + + std::size_t n = 0; + Weight sum = Weight(0); + + while (sum < threshold) + { + if (n < static_cast(tail_weights(args).size())) + { + sum += *(tail_weights(args).begin() + n); + n++; + } + else + { + if (std::numeric_limits::has_quiet_NaN) + { + return std::numeric_limits::quiet_NaN(); + } + else + { + std::ostringstream msg; + msg << "index n = " << n << " is not in valid range [0, " << tail(args).size() << ")"; + boost::throw_exception(std::runtime_error(msg.str())); + return Sample(0); + } + } + } + + // Note that the cached samples of the left are sorted in ascending order, + // whereas the samples of the right tail are sorted in descending order + return *(boost::begin(tail(args)) + n - 1); + } + }; +} // namespace impl + +/////////////////////////////////////////////////////////////////////////////// +// tag::weighted_tail_quantile<> +// +namespace tag +{ + template + struct weighted_tail_quantile + : depends_on > + { + /// INTERNAL ONLY + typedef accumulators::impl::weighted_tail_quantile_impl impl; + }; +} + +/////////////////////////////////////////////////////////////////////////////// +// extract::weighted_tail_quantile +// +namespace extract +{ + extractor const weighted_tail_quantile = {}; +} + +using extract::weighted_tail_quantile; + +}} // namespace boost::accumulators + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +#endif