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