|
Boost-Commit : |
From: eric_at_[hidden]
Date: 2008-06-24 11:40:21
Author: eric_niebler
Date: 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
New Revision: 46651
URL: http://svn.boost.org/trac/boost/changeset/46651
Log:
make immediate the default implementation for variance and weighted_variance
Text files modified:
trunk/boost/accumulators/statistics/error_of_mean.hpp | 8 +++---
trunk/boost/accumulators/statistics/variance.hpp | 43 +++++++++++++++++----------------
trunk/boost/accumulators/statistics/weighted_variance.hpp | 29 ++++++++++++-----------
trunk/boost/accumulators/statistics_fwd.hpp | 12 ++++----
trunk/libs/accumulators/doc/accumulators.qbk | 50 ++++++++++++++++++++--------------------
trunk/libs/accumulators/test/variance.cpp | 8 +++---
trunk/libs/accumulators/test/weighted_variance.cpp | 10 ++++----
7 files changed, 81 insertions(+), 79 deletions(-)
Modified: trunk/boost/accumulators/statistics/error_of_mean.hpp
==============================================================================
--- trunk/boost/accumulators/statistics/error_of_mean.hpp (original)
+++ trunk/boost/accumulators/statistics/error_of_mean.hpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -51,20 +51,20 @@
{
template<>
struct error_of<mean>
- : depends_on<variance, count>
+ : depends_on<lazy_variance, count>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::error_of_mean_impl<mpl::_1, variance> impl;
+ typedef accumulators::impl::error_of_mean_impl<mpl::_1, lazy_variance> impl;
};
template<>
struct error_of<immediate_mean>
- : depends_on<immediate_variance, count>
+ : depends_on<variance, count>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::error_of_mean_impl<mpl::_1, immediate_variance> impl;
+ typedef accumulators::impl::error_of_mean_impl<mpl::_1, variance> impl;
};
}
Modified: trunk/boost/accumulators/statistics/variance.hpp
==============================================================================
--- trunk/boost/accumulators/statistics/variance.hpp (original)
+++ trunk/boost/accumulators/statistics/variance.hpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -25,7 +25,7 @@
namespace impl
{
- //! Lazy calculaation of variance.
+ //! Lazy calculation of variance.
/*!
Default sample variance implementation based on the second moment \f$ M_n^{(2)} \f$ moment<2>, mean and count.
\f[
@@ -38,13 +38,13 @@
is the estimate of the sample mean and \f$n\f$ is the number of samples.
*/
template<typename Sample, typename MeanFeature>
- struct variance_impl
+ struct lazy_variance_impl
: accumulator_base
{
// for boost::result_of
typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
- variance_impl(dont_care) {}
+ lazy_variance_impl(dont_care) {}
template<typename Args>
result_type result(Args const &args) const
@@ -81,14 +81,14 @@
can be non-negligible.
*/
template<typename Sample, typename MeanFeature, typename Tag>
- struct immediate_variance_impl
+ struct variance_impl
: accumulator_base
{
// for boost::result_of
typedef typename numeric::functional::average<Sample, std::size_t>::result_type result_type;
template<typename Args>
- immediate_variance_impl(Args const &args)
+ variance_impl(Args const &args)
: variance(numeric::average(args[sample | Sample()], numeric::one<std::size_t>::value))
{
}
@@ -125,53 +125,54 @@
//
namespace tag
{
- struct variance
+ struct lazy_variance
: depends_on<moment<2>, mean>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::variance_impl<mpl::_1, mean> impl;
+ typedef accumulators::impl::lazy_variance_impl<mpl::_1, mean> impl;
};
- struct immediate_variance
+
+ struct variance
: depends_on<count, immediate_mean>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::immediate_variance_impl<mpl::_1, mean, sample> impl;
+ typedef accumulators::impl::variance_impl<mpl::_1, mean, sample> impl;
};
}
///////////////////////////////////////////////////////////////////////////////
+// extract::lazy_variance
// extract::variance
-// extract::immediate_variance
//
namespace extract
{
+ extractor<tag::lazy_variance> const lazy_variance = {};
extractor<tag::variance> const variance = {};
- extractor<tag::immediate_variance> const immediate_variance = {};
}
+using extract::lazy_variance;
using extract::variance;
-using extract::immediate_variance;
-// variance(lazy) -> variance
+// variance(lazy) -> lazy_variance
template<>
struct as_feature<tag::variance(lazy)>
{
- typedef tag::variance type;
+ typedef tag::lazy_variance type;
};
-// variance(immediate) -> immediate_variance
+// variance(immediate) -> variance
template<>
struct as_feature<tag::variance(immediate)>
{
- typedef tag::immediate_variance type;
+ typedef tag::variance type;
};
// for the purposes of feature-based dependency resolution,
// immediate_variance provides the same feature as variance
template<>
-struct feature_of<tag::immediate_variance>
+struct feature_of<tag::lazy_variance>
: feature_of<tag::variance>
{
};
@@ -195,16 +196,16 @@
// So that immediate_variance can be automatically substituted with
// immediate_weighted_variance when the weight parameter is non-void.
template<>
-struct as_weighted_feature<tag::immediate_variance>
+struct as_weighted_feature<tag::lazy_variance>
{
- typedef tag::immediate_weighted_variance type;
+ typedef tag::lazy_weighted_variance type;
};
// for the purposes of feature-based dependency resolution,
// immediate_weighted_variance provides the same feature as immediate_variance
template<>
-struct feature_of<tag::immediate_weighted_variance>
- : feature_of<tag::immediate_variance>
+struct feature_of<tag::lazy_weighted_variance>
+ : feature_of<tag::lazy_variance>
{
};
Modified: trunk/boost/accumulators/statistics/weighted_variance.hpp
==============================================================================
--- trunk/boost/accumulators/statistics/weighted_variance.hpp (original)
+++ trunk/boost/accumulators/statistics/weighted_variance.hpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -36,14 +36,14 @@
where \f$n\f$ is the number of samples.
*/
template<typename Sample, typename Weight, typename MeanFeature>
- struct weighted_variance_impl
+ struct lazy_weighted_variance_impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
// for boost::result_of
typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
- weighted_variance_impl(dont_care) {}
+ lazy_weighted_variance_impl(dont_care) {}
template<typename Args>
result_type result(Args const &args) const
@@ -68,7 +68,7 @@
\f$n <= 1\f$.
*/
template<typename Sample, typename Weight, typename MeanFeature, typename Tag>
- struct immediate_weighted_variance_impl
+ struct weighted_variance_impl
: accumulator_base
{
typedef typename numeric::functional::multiplies<Sample, Weight>::result_type weighted_sample;
@@ -76,7 +76,7 @@
typedef typename numeric::functional::average<weighted_sample, Weight>::result_type result_type;
template<typename Args>
- immediate_weighted_variance_impl(Args const &args)
+ weighted_variance_impl(Args const &args)
: weighted_variance(numeric::average(args[sample | Sample()], numeric::one<Weight>::value))
{
}
@@ -115,19 +115,20 @@
//
namespace tag
{
- struct weighted_variance
+ struct lazy_weighted_variance
: depends_on<weighted_moment<2>, weighted_mean>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::weighted_variance_impl<mpl::_1, mpl::_2, weighted_mean> impl;
+ typedef accumulators::impl::lazy_weighted_variance_impl<mpl::_1, mpl::_2, weighted_mean> impl;
};
- struct immediate_weighted_variance
+
+ struct weighted_variance
: depends_on<count, immediate_weighted_mean>
{
/// INTERNAL ONLY
///
- typedef accumulators::impl::immediate_weighted_variance_impl<mpl::_1, mpl::_2, immediate_weighted_mean, sample> impl;
+ typedef accumulators::impl::weighted_variance_impl<mpl::_1, mpl::_2, immediate_weighted_mean, sample> impl;
};
}
@@ -137,25 +138,25 @@
//
namespace extract
{
+ extractor<tag::lazy_weighted_variance> const lazy_weighted_variance = {};
extractor<tag::weighted_variance> const weighted_variance = {};
- extractor<tag::immediate_weighted_variance> const immediate_weighted_variance = {};
}
+using extract::lazy_weighted_variance;
using extract::weighted_variance;
-using extract::immediate_weighted_variance;
-// weighted_variance(lazy) -> weighted_variance
+// weighted_variance(lazy) -> lazy_weighted_variance
template<>
struct as_feature<tag::weighted_variance(lazy)>
{
- typedef tag::weighted_variance type;
+ typedef tag::lazy_weighted_variance type;
};
-// weighted_variance(immediate) -> immediate_weighted_variance
+// weighted_variance(immediate) -> weighted_variance
template<>
struct as_feature<tag::weighted_variance(immediate)>
{
- typedef tag::immediate_weighted_variance type;
+ typedef tag::weighted_variance type;
};
////////////////////////////////////////////////////////////////////////////
Modified: trunk/boost/accumulators/statistics_fwd.hpp
==============================================================================
--- trunk/boost/accumulators/statistics_fwd.hpp (original)
+++ trunk/boost/accumulators/statistics_fwd.hpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -127,8 +127,8 @@
struct absolute_tail_variate_means;
template<typename LeftRight, typename VariateType, typename VariateTag>
struct relative_tail_variate_means;
+ struct lazy_variance;
struct variance;
- struct immediate_variance;
template<typename VariateType, typename VariateTag>
struct weighted_covariance;
struct weighted_density;
@@ -175,8 +175,8 @@
struct absolute_weighted_tail_variate_means;
template<typename LeftRight, typename VariateType, typename VariateTag>
struct relative_weighted_tail_variate_means;
+ struct lazy_weighted_variance;
struct weighted_variance;
- struct immediate_weighted_variance;
struct weighted_sum;
template<typename VariateType, typename VariateTag>
struct weighted_sum_of_variates;
@@ -273,10 +273,10 @@
struct tail_variate_means_impl;
template<typename Sample, typename MeanFeature>
- struct variance_impl;
+ struct lazy_variance_impl;
template<typename Sample, typename MeanFeature, typename Tag>
- struct immediate_variance_impl;
+ struct variance_impl;
template<typename Sample, typename Weight, typename VariateType, typename VariateTag>
struct weighted_covariance_impl;
@@ -339,10 +339,10 @@
struct weighted_tail_variate_means_impl;
template<typename Sample, typename Weight, typename MeanFeature>
- struct weighted_variance_impl;
+ struct lazy_weighted_variance_impl;
template<typename Sample, typename Weight, typename MeanFeature, typename Tag>
- struct immediate_weighted_variance_impl;
+ struct weighted_variance_impl;
} // namespace impl
Modified: trunk/libs/accumulators/doc/accumulators.qbk
==============================================================================
--- trunk/libs/accumulators/doc/accumulators.qbk (original)
+++ trunk/libs/accumulators/doc/accumulators.qbk 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -2338,20 +2338,20 @@
[section:variance variance ['and variants]]
-Lazy or iterative calculation of the variance. The lazy calculation is associated with the `tag::variance`
-feature, and the iterative calculation with the `tag::immediate_variance` feature. Both can be extracted
+Lazy or iterative calculation of the variance. The lazy calculation is associated with the `tag::lazy_variance`
+feature, and the iterative calculation with the `tag::variance` feature. Both can be extracted
using the `tag::variance()` extractor. For more implementation details, see
-[classref boost::accumulators::impl::variance_impl [^variance_impl]] and
-[classref boost::accumulators::impl::immediate_variance_impl [^immediate_variance_impl]]
+[classref boost::accumulators::impl::lazy_variance_impl [^lazy_variance_impl]] and
+[classref boost::accumulators::impl::variance_impl [^variance_impl]]
[variablelist
[[Result Type] [``
numeric::functional::average<_sample_type_, std::size_t>::result_type
``]]
- [[Depends On] [`tag::variance` depends on `tag::moment<2>` and `tag::mean` \n
- `tag::immediate_variance` depends on `tag::count` and `tag::immediate_mean`]]
- [[Variants] [`tag::variance` (a.k.a. `tag::variance(lazy))` \n
- `tag::immediate_variance` (a.k.a. `tag::variance(immediate)`)]]
+ [[Depends On] [`tag::lazy_variance` depends on `tag::moment<2>` and `tag::mean` \n
+ `tag::variance` depends on `tag::count` and `tag::immediate_mean`]]
+ [[Variants] [`tag::lazy_variance` (a.k.a. `tag::variance(lazy))` \n
+ `tag::variance` (a.k.a. `tag::variance(immediate)`)]]
[[Initialization Parameters] [['none]]]
[[Accumulator Parameters] [['none]]]
[[Extractor Parameters] [['none]]]
@@ -2361,8 +2361,8 @@
[*Example]
- // basic lazy variance
- accumulator_set<int, stats<tag::variance > > acc1;
+ // lazy variance
+ accumulator_set<int, stats<tag::variance(lazy)> > acc1;
acc1(1);
acc1(2);
@@ -2376,7 +2376,7 @@
BOOST_CHECK_CLOSE(2., variance(acc1), 1e-5);
// immediate variance
- accumulator_set<int, stats<tag::variance(immediate) > > acc2;
+ accumulator_set<int, stats<tag::variance> > acc2;
acc2(1);
acc2(2);
@@ -2388,11 +2388,10 @@
BOOST_CHECK_CLOSE(3., mean(acc2), 1e-5);
BOOST_CHECK_CLOSE(2., variance(acc2), 1e-5);
-
[*See also]
+* [classref boost::accumulators::impl::lazy_variance_impl [^lazy_variance_impl]]
* [classref boost::accumulators::impl::variance_impl [^variance_impl]]
-* [classref boost::accumulators::impl::immediate_variance_impl [^immediate_variance_impl]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.count [^count]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.mean [^mean]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.moment [^moment]]
@@ -3095,11 +3094,11 @@
[section:weighted_variance weighted_variance ['and variants]]
-Lazy or iterative calculation of the weighted variance. The lazy calculation is associated with the `tag::weighted_variance`
-feature, and the iterative calculation with the `tag::immediate_weighted_variance` feature. Both can be extracted
+Lazy or iterative calculation of the weighted variance. The lazy calculation is associated with the `tag::lazy_weighted_variance`
+feature, and the iterative calculation with the `tag::weighted_variance` feature. Both can be extracted
using the `tag::weighted_variance()` extractor. For more implementation details, see
-[classref boost::accumulators::impl::weighted_variance_impl [^weighted_variance_impl]] and
-[classref boost::accumulators::impl::immediate_weighted_variance_impl [^immediate_weighted_variance_impl]]
+[classref boost::accumulators::impl::lazy_weighted_variance_impl [^lazy_weighted_variance_impl]] and
+[classref boost::accumulators::impl::weighted_variance_impl [^weighted_variance_impl]]
[variablelist
[[Result Type] [``
@@ -3108,10 +3107,10 @@
, std::size_t
>::result_type
``]]
- [[Depends On] [`tag::weighted_variance` depends on `tag::weighted_moment<2>` and `tag::weighted_mean` \n
- `tag::immediate_weighted_variance` depends on `tag::count` and `tag::immediate_weighted_mean`]]
- [[Variants] [`tag::weighted_variance` (a.k.a. `tag::weighted_variance(lazy))` \n
- `tag::immediate_weighted_variance` (a.k.a. `tag::weighted_variance(immediate)`)]]
+ [[Depends On] [`tag::lazy_weighted_variance` depends on `tag::weighted_moment<2>` and `tag::weighted_mean` \n
+ `tag::weighted_variance` depends on `tag::count` and `tag::immediate_weighted_mean`]]
+ [[Variants] [`tag::lazy_weighted_variance` (a.k.a. `tag::weighted_variance(lazy))` \n
+ `tag::weighted_variance` (a.k.a. `tag::weighted_variance(immediate)`)]]
[[Initialization Parameters] [['none]]]
[[Accumulator Parameters] [`weight`]]
[[Extractor Parameters] [['none]]]
@@ -3121,8 +3120,8 @@
[*Example]
- // basic lazy weighted_variance
- accumulator_set<int, stats<tag::weighted_variance>, int> acc1;
+ // lazy weighted_variance
+ accumulator_set<int, stats<tag::weighted_variance(lazy)>, int> acc1;
acc1(1, weight = 2); // 2
acc1(2, weight = 3); // 6
@@ -3137,7 +3136,8 @@
BOOST_CHECK_CLOSE(10.1818182, weighted_moment<2>(acc1), 1e-5);
BOOST_CHECK_CLOSE(1.7190083, weighted_variance(acc1), 1e-5);
- accumulator_set<int, stats<tag::weighted_variance(immediate)>, int> acc2;
+ // immediate weighted_variance
+ accumulator_set<int, stats<tag::weighted_variance>, int> acc2;
acc2(1, weight = 2);
acc2(2, weight = 3);
@@ -3171,8 +3171,8 @@
[*See also]
+* [classref boost::accumulators::impl::lazy_weighted_variance_impl [^lazy_weighted_variance_impl]]
* [classref boost::accumulators::impl::weighted_variance_impl [^weighted_variance_impl]]
-* [classref boost::accumulators::impl::immediate_weighted_variance_impl [^immediate_weighted_variance_impl]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.count [^count]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.weighted_mean [^weighted_mean]]
* [link accumulators.user_s_guide.the_statistical_accumulators_library.weighted_moment [^weighted_moment]]
Modified: trunk/libs/accumulators/test/variance.cpp
==============================================================================
--- trunk/libs/accumulators/test/variance.cpp (original)
+++ trunk/libs/accumulators/test/variance.cpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -27,8 +27,8 @@
// >> sum(samples .* samples) / length(samples) - mean(samples)^2
// ans = 2
- // basic lazy variance
- accumulator_set<int, stats<tag::variance > > acc1;
+ // lazy variance, now lazy with syntactic sugar, thanks to Eric
+ accumulator_set<int, stats<tag::variance(lazy)> > acc1;
acc1(1);
acc1(2);
@@ -41,8 +41,8 @@
BOOST_CHECK_CLOSE(11., moment<2>(acc1), 1e-5);
BOOST_CHECK_CLOSE(2., variance(acc1), 1e-5);
- // immediate variance, now immediate with syntactic sugar, thanks to Eric
- accumulator_set<int, stats<tag::variance(immediate) > > acc2;
+ // immediate variance
+ accumulator_set<int, stats<tag::variance> > acc2;
acc2(1);
acc2(2);
Modified: trunk/libs/accumulators/test/weighted_variance.cpp
==============================================================================
--- trunk/libs/accumulators/test/weighted_variance.cpp (original)
+++ trunk/libs/accumulators/test/weighted_variance.cpp 2008-06-24 11:40:19 EDT (Tue, 24 Jun 2008)
@@ -19,8 +19,8 @@
//
void test_stat()
{
- // basic lazy weighted_variance
- accumulator_set<int, stats<tag::weighted_variance>, int> acc1;
+ // lazy weighted_variance
+ accumulator_set<int, stats<tag::weighted_variance(lazy)>, int> acc1;
acc1(1, weight = 2); // 2
acc1(2, weight = 3); // 6
@@ -35,7 +35,7 @@
BOOST_CHECK_CLOSE(10.1818182, weighted_moment<2>(acc1), 1e-5);
BOOST_CHECK_CLOSE(1.7190083, weighted_variance(acc1), 1e-5);
- accumulator_set<int, stats<tag::weighted_variance(immediate)>, int> acc2;
+ accumulator_set<int, stats<tag::weighted_variance>, int> acc2;
acc2(1, weight = 2);
acc2(2, weight = 3);
@@ -54,8 +54,8 @@
boost::normal_distribution<> mean_sigma(0,1);
boost::variate_generator<boost::lagged_fibonacci607&, boost::normal_distribution<> > normal(rng, mean_sigma);
- accumulator_set<double, stats<tag::weighted_variance>, double > acc_lazy;
- accumulator_set<double, stats<tag::weighted_variance(immediate)>, double > acc_immediate;
+ accumulator_set<double, stats<tag::weighted_variance(lazy)>, double > acc_lazy;
+ accumulator_set<double, stats<tag::weighted_variance>, double > acc_immediate;
for (std::size_t i=0; i<10000; ++i)
{
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk