1 /////////////////////////////////////////////////////////////////////////////// 2 // statistics_fwd.hpp 3 // 4 // Copyright 2005 Eric Niebler. Distributed under the Boost 5 // Software License, Version 1.0. (See accompanying file 6 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 8 #ifndef BOOST_ACCUMULATORS_STATISTICS_STATISTICS_FWD_HPP_EAN_23_11_2005 9 #define BOOST_ACCUMULATORS_STATISTICS_STATISTICS_FWD_HPP_EAN_23_11_2005 10 11 #include <boost/mpl/apply_fwd.hpp> // for mpl::na 12 #include <boost/mpl/print.hpp> 13 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp> 14 #include <boost/accumulators/accumulators_fwd.hpp> 15 #include <boost/accumulators/framework/depends_on.hpp> 16 #include <boost/accumulators/framework/extractor.hpp> 17 18 namespace boost { namespace accumulators 19 { 20 21 /////////////////////////////////////////////////////////////////////////////// 22 // base struct and base extractor for quantiles 23 namespace tag 24 { 25 struct quantile 26 : depends_on<> 27 { 28 typedef mpl::print<class ____MISSING_SPECIFIC_QUANTILE_FEATURE_IN_ACCUMULATOR_SET____ > impl; 29 }; 30 } 31 namespace extract 32 { 33 extractor<tag::quantile> const quantile = {}; 34 35 BOOST_ACCUMULATORS_IGNORE_GLOBAL(quantile) 36 } 37 using extract::quantile; 38 39 /////////////////////////////////////////////////////////////////////////////// 40 // base struct and base extractor for *coherent* tail means 41 namespace tag 42 { 43 struct tail_mean 44 : depends_on<> 45 { 46 typedef mpl::print<class ____MISSING_SPECIFIC_TAIL_MEAN_FEATURE_IN_ACCUMULATOR_SET____ > impl; 47 }; 48 } 49 namespace extract 50 { 51 extractor<tag::tail_mean> const tail_mean = {}; 52 53 BOOST_ACCUMULATORS_IGNORE_GLOBAL(tail_mean) 54 } 55 using extract::tail_mean; 56 57 namespace tag 58 { 59 /////////////////////////////////////////////////////////////////////////////// 60 // Variates tags 61 struct weights; 62 struct covariate1; 63 struct covariate2; 64 65 /////////////////////////////////////////////////////////////////////////////// 66 // Statistic tags 67 struct count; 68 template<typename VariateType, typename VariateTag> 69 struct covariance; 70 struct density; 71 template<typename Feature> 72 struct error_of; 73 struct extended_p_square; 74 struct extended_p_square_quantile; 75 struct extended_p_square_quantile_quadratic; 76 struct kurtosis; 77 struct max; 78 struct mean; 79 struct immediate_mean; 80 struct mean_of_weights; 81 struct immediate_mean_of_weights; 82 template<typename VariateType, typename VariateTag> 83 struct mean_of_variates; 84 template<typename VariateType, typename VariateTag> 85 struct immediate_mean_of_variates; 86 struct median; 87 struct with_density_median; 88 struct with_p_square_cumulative_distribution_median; 89 struct min; 90 template<int N> 91 struct moment; 92 template<typename LeftRight> 93 struct peaks_over_threshold; 94 template<typename LeftRight> 95 struct peaks_over_threshold_prob; 96 template<typename LeftRight> 97 struct pot_tail_mean; 98 template<typename LeftRight> 99 struct pot_tail_mean_prob; 100 template<typename LeftRight> 101 struct pot_quantile; 102 template<typename LeftRight> 103 struct pot_quantile_prob; 104 struct p_square_cumulative_distribution; 105 struct p_square_quantile; 106 struct p_square_quantile_for_median; 107 struct skewness; 108 struct sum; 109 struct sum_of_weights; 110 template<typename VariateType, typename VariateTag> 111 struct sum_of_variates; 112 struct sum_kahan; 113 struct sum_of_weights_kahan; 114 template<typename VariateType, typename VariateTag> 115 struct sum_of_variates_kahan; 116 template<typename LeftRight> 117 struct tail; 118 template<typename LeftRight> 119 struct coherent_tail_mean; 120 template<typename LeftRight> 121 struct non_coherent_tail_mean; 122 template<typename LeftRight> 123 struct tail_quantile; 124 template<typename VariateType, typename VariateTag, typename LeftRight> 125 struct tail_variate; 126 template<typename LeftRight> 127 struct tail_weights; 128 template<typename VariateType, typename VariateTag, typename LeftRight> 129 struct right_tail_variate; 130 template<typename VariateType, typename VariateTag, typename LeftRight> 131 struct left_tail_variate; 132 template<typename LeftRight, typename VariateType, typename VariateTag> 133 struct tail_variate_means; 134 template<typename LeftRight, typename VariateType, typename VariateTag> 135 struct absolute_tail_variate_means; 136 template<typename LeftRight, typename VariateType, typename VariateTag> 137 struct relative_tail_variate_means; 138 struct lazy_variance; 139 struct variance; 140 template<typename VariateType, typename VariateTag> 141 struct weighted_covariance; 142 struct weighted_density; 143 struct weighted_kurtosis; 144 struct weighted_mean; 145 struct immediate_weighted_mean; 146 template<typename VariateType, typename VariateTag> 147 struct weighted_mean_of_variates; 148 template<typename VariateType, typename VariateTag> 149 struct immediate_weighted_mean_of_variates; 150 struct weighted_median; 151 struct with_density_weighted_median; 152 struct with_p_square_cumulative_distribution_weighted_median; 153 struct weighted_extended_p_square; 154 struct weighted_extended_p_square_quantile; 155 struct weighted_extended_p_square_quantile_quadratic; 156 template<int N> 157 struct weighted_moment; 158 template<typename LeftRight> 159 struct weighted_peaks_over_threshold; 160 template<typename LeftRight> 161 struct weighted_peaks_over_threshold_prob; 162 template<typename LeftRight> 163 struct weighted_pot_quantile; 164 template<typename LeftRight> 165 struct weighted_pot_quantile_prob; 166 template<typename LeftRight> 167 struct weighted_pot_tail_mean; 168 template<typename LeftRight> 169 struct weighted_pot_tail_mean_prob; 170 struct weighted_p_square_cumulative_distribution; 171 struct weighted_p_square_quantile; 172 struct weighted_p_square_quantile_for_median; 173 struct weighted_skewness; 174 template<typename LeftRight> 175 struct weighted_tail_quantile; 176 template<typename LeftRight> 177 struct non_coherent_weighted_tail_mean; 178 template<typename LeftRight> 179 struct weighted_tail_quantile; 180 template<typename LeftRight, typename VariateType, typename VariateTag> 181 struct weighted_tail_variate_means; 182 template<typename LeftRight, typename VariateType, typename VariateTag> 183 struct absolute_weighted_tail_variate_means; 184 template<typename LeftRight, typename VariateType, typename VariateTag> 185 struct relative_weighted_tail_variate_means; 186 struct lazy_weighted_variance; 187 struct weighted_variance; 188 struct weighted_sum; 189 template<typename VariateType, typename VariateTag> 190 struct weighted_sum_of_variates; 191 struct rolling_window_plus1; 192 struct rolling_window; 193 struct rolling_sum; 194 struct rolling_count; 195 struct rolling_mean; 196 } // namespace tag 197 198 namespace impl 199 { 200 /////////////////////////////////////////////////////////////////////////////// 201 // Statistics impls 202 struct count_impl; 203 204 template<typename Sample, typename VariateType, typename VariateTag> 205 struct covariance_impl; 206 207 template<typename Sample> 208 struct density_impl; 209 210 template<typename Sample, typename Feature> 211 struct error_of_impl; 212 213 template<typename Sample, typename Variance> 214 struct error_of_mean_impl; 215 216 template<typename Sample> 217 struct extended_p_square_impl; 218 219 template<typename Sample, typename Impl1, typename Impl2> 220 struct extended_p_square_quantile_impl; 221 222 template<typename Sample> 223 struct kurtosis_impl; 224 225 template<typename Sample> 226 struct max_impl; 227 228 template<typename Sample> 229 struct median_impl; 230 231 template<typename Sample> 232 struct with_density_median_impl; 233 234 template<typename Sample> 235 struct with_p_square_cumulative_distribution_median_impl; 236 237 template<typename Sample> 238 struct min_impl; 239 240 template<typename Sample, typename SumFeature = tag::sum> 241 struct mean_impl; 242 243 template<typename Sample, typename Tag = tag::sample> 244 struct immediate_mean_impl; 245 246 template<typename N, typename Sample> 247 struct moment_impl; 248 249 template<typename Sample, typename LeftRight> 250 struct peaks_over_threshold_prob_impl; 251 252 template<typename Sample, typename Impl, typename LeftRight> 253 struct pot_quantile_impl; 254 255 template<typename Sample, typename Impl, typename LeftRight> 256 struct pot_tail_mean_impl; 257 258 template<typename Sample> 259 struct p_square_cumulative_distribution_impl; 260 261 template<typename Sample, typename Impl> 262 struct p_square_quantile_impl; 263 264 template<typename Sample> 265 struct skewness_impl; 266 267 template<typename Sample, typename Tag = tag::sample> 268 struct sum_impl; 269 270 template<typename Sample, typename Tag> 271 struct sum_kahan_impl; 272 273 template<typename Sample, typename LeftRight> 274 struct tail_impl; 275 276 template<typename Sample, typename LeftRight> 277 struct coherent_tail_mean_impl; 278 279 template<typename Sample, typename LeftRight> 280 struct non_coherent_tail_mean_impl; 281 282 template<typename Sample, typename LeftRight> 283 struct tail_quantile_impl; 284 285 template<typename VariateType, typename VariateTag, typename LeftRight> 286 struct tail_variate_impl; 287 288 template<typename Sample, typename Impl, typename LeftRight, typename VariateTag> 289 struct tail_variate_means_impl; 290 291 template<typename Sample, typename MeanFeature> 292 struct lazy_variance_impl; 293 294 template<typename Sample, typename MeanFeature, typename Tag> 295 struct variance_impl; 296 297 template<typename Sample, typename Weight, typename VariateType, typename VariateTag> 298 struct weighted_covariance_impl; 299 300 template<typename Sample, typename Weight> 301 struct weighted_density_impl; 302 303 template<typename Sample, typename Weight> 304 struct weighted_kurtosis_impl; 305 306 template<typename Sample> 307 struct weighted_median_impl; 308 309 template<typename Sample> 310 struct with_density_weighted_median_impl; 311 312 template<typename Sample, typename Weight> 313 struct with_p_square_cumulative_distribution_weighted_median_impl; 314 315 template<typename Sample, typename Weight, typename Tag> 316 struct weighted_mean_impl; 317 318 template<typename Sample, typename Weight, typename Tag> 319 struct immediate_weighted_mean_impl; 320 321 template<typename Sample, typename Weight, typename LeftRight> 322 struct weighted_peaks_over_threshold_impl; 323 324 template<typename Sample, typename Weight, typename LeftRight> 325 struct weighted_peaks_over_threshold_prob_impl; 326 327 template<typename Sample, typename Weight> 328 struct with_p_square_cumulative_distribution_weighted_median_impl; 329 330 template<typename Sample, typename Weight> 331 struct weighted_extended_p_square_impl; 332 333 template<typename N, typename Sample, typename Weight> 334 struct weighted_moment_impl; 335 336 template<typename Sample, typename Weight> 337 struct weighted_p_square_cumulative_distribution_impl; 338 339 template<typename Sample, typename Weight, typename Impl> 340 struct weighted_p_square_quantile_impl; 341 342 template<typename Sample, typename Weight> 343 struct weighted_skewness_impl; 344 345 template<typename Sample, typename Weight, typename Tag> 346 struct weighted_sum_impl; 347 348 template<typename Sample, typename Weight, typename Tag> 349 struct weighted_sum_kahan_impl; 350 351 template<typename Sample, typename Weight, typename LeftRight> 352 struct non_coherent_weighted_tail_mean_impl; 353 354 template<typename Sample, typename Weight, typename LeftRight> 355 struct weighted_tail_quantile_impl; 356 357 template<typename Sample, typename Weight, typename Impl, typename LeftRight, typename VariateType> 358 struct weighted_tail_variate_means_impl; 359 360 template<typename Sample, typename Weight, typename MeanFeature> 361 struct lazy_weighted_variance_impl; 362 363 template<typename Sample, typename Weight, typename MeanFeature, typename Tag> 364 struct weighted_variance_impl; 365 366 template<typename Sample> 367 struct rolling_window_plus1_impl; 368 369 template<typename Sample> 370 struct rolling_window_impl; 371 372 template<typename Sample> 373 struct rolling_sum_impl; 374 375 template<typename Sample> 376 struct rolling_count_impl; 377 378 template<typename Sample> 379 struct rolling_mean_impl; 380 } // namespace impl 381 382 /////////////////////////////////////////////////////////////////////////////// 383 // stats 384 // A more descriptive name for an MPL sequence of statistics. 385 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_ACCUMULATORS_MAX_FEATURES, typename Feature, mpl::na)> 386 struct stats; 387 388 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_ACCUMULATORS_MAX_FEATURES, typename Feature, mpl::na)> 389 struct with_error; 390 391 // modifiers for the mean and variance stats 392 struct lazy {}; 393 struct immediate {}; 394 395 // modifiers for the variance stat 396 // struct fast {}; 397 // struct accurate {}; 398 399 // modifiers for order 400 struct right {}; 401 struct left {}; 402 // typedef right default_order_tag_type; 403 404 // modifiers for the tail_variate_means stat 405 struct absolute {}; 406 struct relative {}; 407 408 // modifiers for median and weighted_median stats 409 struct with_density {}; 410 struct with_p_square_cumulative_distribution {}; 411 struct with_p_square_quantile {}; 412 413 // modifiers for peaks_over_threshold stat 414 struct with_threshold_value {}; 415 struct with_threshold_probability {}; 416 417 // modifiers for extended_p_square_quantile and weighted_extended_p_square_quantile stats 418 struct weighted {}; 419 struct unweighted {}; 420 struct linear {}; 421 struct quadratic {}; 422 423 // modifiers for p_square_quantile 424 struct regular {}; 425 struct for_median {}; 426 427 // modifier for sum_kahan, sum_of_weights_kahan, sum_of_variates_kahan, weighted_sum_kahan 428 struct kahan {}; 429 430 }} // namespace boost::accumulators 431 432 #endif 433