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 = {}; |
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 = {}; |
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 | |