26
26
27
27
namespace boost ::math::statistics {
28
28
29
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
29
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
30
30
inline auto mean (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
31
31
{
32
32
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -56,7 +56,7 @@ inline auto mean(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator
56
56
}
57
57
}
58
58
59
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
59
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
60
60
inline auto mean (ExecutionPolicy&& exec, Container const & v)
61
61
{
62
62
return mean (exec, std::cbegin (v), std::cend (v));
@@ -74,7 +74,7 @@ inline auto mean(Container const & v)
74
74
return mean (std::execution::seq, std::cbegin (v), std::cend (v));
75
75
}
76
76
77
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
77
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
78
78
inline auto variance (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
79
79
{
80
80
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -105,7 +105,7 @@ inline auto variance(ExecutionPolicy&& exec, ForwardIterator first, ForwardItera
105
105
}
106
106
}
107
107
108
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
108
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
109
109
inline auto variance (ExecutionPolicy&& exec, Container const & v)
110
110
{
111
111
return variance (exec, std::cbegin (v), std::cend (v));
@@ -123,15 +123,15 @@ inline auto variance(Container const & v)
123
123
return variance (std::execution::seq, std::cbegin (v), std::cend (v));
124
124
}
125
125
126
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
126
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
127
127
inline auto sample_variance (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
128
128
{
129
129
const auto n = std::distance (first, last);
130
130
BOOST_MATH_ASSERT_MSG (n > 1 , " At least two samples are required to compute the sample variance." );
131
131
return n*variance (exec, first, last)/(n-1 );
132
132
}
133
133
134
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
134
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
135
135
inline auto sample_variance (ExecutionPolicy&& exec, Container const & v)
136
136
{
137
137
return sample_variance (exec, std::cbegin (v), std::cend (v));
@@ -149,7 +149,7 @@ inline auto sample_variance(Container const & v)
149
149
return sample_variance (std::execution::seq, std::cbegin (v), std::cend (v));
150
150
}
151
151
152
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
152
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
153
153
inline auto mean_and_sample_variance (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
154
154
{
155
155
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -182,7 +182,7 @@ inline auto mean_and_sample_variance(ExecutionPolicy&& exec, ForwardIterator fir
182
182
}
183
183
}
184
184
185
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
185
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
186
186
inline auto mean_and_sample_variance (ExecutionPolicy&& exec, Container const & v)
187
187
{
188
188
return mean_and_sample_variance (exec, std::cbegin (v), std::cend (v));
@@ -200,7 +200,7 @@ inline auto mean_and_sample_variance(Container const & v)
200
200
return mean_and_sample_variance (std::execution::seq, std::cbegin (v), std::cend (v));
201
201
}
202
202
203
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
203
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
204
204
inline auto first_four_moments (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
205
205
{
206
206
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -237,7 +237,7 @@ inline auto first_four_moments(ExecutionPolicy&& exec, ForwardIterator first, Fo
237
237
}
238
238
}
239
239
240
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
240
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
241
241
inline auto first_four_moments (ExecutionPolicy&& exec, Container const & v)
242
242
{
243
243
return first_four_moments (exec, std::cbegin (v), std::cend (v));
@@ -256,7 +256,7 @@ inline auto first_four_moments(Container const & v)
256
256
}
257
257
258
258
// https://prod.sandia.gov/techlib-noauth/access-control.cgi/2008/086212.pdf
259
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
259
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
260
260
inline auto skewness (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
261
261
{
262
262
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -299,7 +299,7 @@ inline auto skewness(ExecutionPolicy&& exec, ForwardIterator first, ForwardItera
299
299
}
300
300
}
301
301
302
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
302
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
303
303
inline auto skewness (ExecutionPolicy&& exec, Container & v)
304
304
{
305
305
return skewness (exec, std::cbegin (v), std::cend (v));
@@ -319,7 +319,7 @@ inline auto skewness(Container const & v)
319
319
320
320
// Follows equation 1.6 of:
321
321
// https://prod.sandia.gov/techlib-noauth/access-control.cgi/2008/086212.pdf
322
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
322
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
323
323
inline auto kurtosis (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
324
324
{
325
325
const auto [M1, M2, M3, M4] = first_four_moments (exec, first, last);
@@ -330,7 +330,7 @@ inline auto kurtosis(ExecutionPolicy&& exec, ForwardIterator first, ForwardItera
330
330
return M4/(M2*M2);
331
331
}
332
332
333
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
333
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
334
334
inline auto kurtosis (ExecutionPolicy&& exec, Container const & v)
335
335
{
336
336
return kurtosis (exec, std::cbegin (v), std::cend (v));
@@ -348,13 +348,13 @@ inline auto kurtosis(Container const & v)
348
348
return kurtosis (std::execution::seq, std::cbegin (v), std::cend (v));
349
349
}
350
350
351
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
351
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
352
352
inline auto excess_kurtosis (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
353
353
{
354
354
return kurtosis (exec, first, last) - 3 ;
355
355
}
356
356
357
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
357
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
358
358
inline auto excess_kurtosis (ExecutionPolicy&& exec, Container const & v)
359
359
{
360
360
return excess_kurtosis (exec, std::cbegin (v), std::cend (v));
@@ -373,7 +373,7 @@ inline auto excess_kurtosis(Container const & v)
373
373
}
374
374
375
375
376
- template <class ExecutionPolicy , class RandomAccessIterator >
376
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, class RandomAccessIterator >
377
377
auto median (ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last)
378
378
{
379
379
const auto num_elems = std::distance (first, last);
@@ -394,7 +394,7 @@ auto median(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIter
394
394
}
395
395
396
396
397
- template <class ExecutionPolicy , class RandomAccessContainer >
397
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
398
398
inline auto median (ExecutionPolicy&& exec, RandomAccessContainer & v)
399
399
{
400
400
return median (exec, std::begin (v), std::end (v));
@@ -406,13 +406,13 @@ inline auto median(RandomAccessIterator first, RandomAccessIterator last)
406
406
return median (std::execution::seq, first, last);
407
407
}
408
408
409
- template <class RandomAccessContainer >
409
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
410
410
inline auto median (RandomAccessContainer & v)
411
411
{
412
412
return median (std::execution::seq, std::begin (v), std::end (v));
413
413
}
414
414
415
- template <class ExecutionPolicy , class RandomAccessIterator >
415
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, class RandomAccessIterator >
416
416
inline auto gini_coefficient (ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last)
417
417
{
418
418
using Real = typename std::iterator_traits<RandomAccessIterator>::value_type;
@@ -445,7 +445,7 @@ inline auto gini_coefficient(ExecutionPolicy&& exec, RandomAccessIterator first,
445
445
}
446
446
}
447
447
448
- template <class ExecutionPolicy , class RandomAccessContainer >
448
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
449
449
inline auto gini_coefficient (ExecutionPolicy&& exec, RandomAccessContainer & v)
450
450
{
451
451
return gini_coefficient (exec, std::begin (v), std::end (v));
@@ -457,20 +457,20 @@ inline auto gini_coefficient(RandomAccessIterator first, RandomAccessIterator la
457
457
return gini_coefficient (std::execution::seq, first, last);
458
458
}
459
459
460
- template <class RandomAccessContainer >
460
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
461
461
inline auto gini_coefficient (RandomAccessContainer & v)
462
462
{
463
463
return gini_coefficient (std::execution::seq, std::begin (v), std::end (v));
464
464
}
465
465
466
- template <class ExecutionPolicy , class RandomAccessIterator >
466
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, class RandomAccessIterator >
467
467
inline auto sample_gini_coefficient (ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last)
468
468
{
469
469
const auto n = std::distance (first, last);
470
470
return n*gini_coefficient (exec, first, last)/(n-1 );
471
471
}
472
472
473
- template <class ExecutionPolicy , class RandomAccessContainer >
473
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
474
474
inline auto sample_gini_coefficient (ExecutionPolicy&& exec, RandomAccessContainer & v)
475
475
{
476
476
return sample_gini_coefficient (exec, std::begin (v), std::end (v));
@@ -482,13 +482,13 @@ inline auto sample_gini_coefficient(RandomAccessIterator first, RandomAccessIter
482
482
return sample_gini_coefficient (std::execution::seq, first, last);
483
483
}
484
484
485
- template <class RandomAccessContainer >
485
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
486
486
inline auto sample_gini_coefficient (RandomAccessContainer & v)
487
487
{
488
488
return sample_gini_coefficient (std::execution::seq, std::begin (v), std::end (v));
489
489
}
490
490
491
- template <class ExecutionPolicy , class RandomAccessIterator >
491
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, class RandomAccessIterator >
492
492
auto median_absolute_deviation (ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last,
493
493
typename std::iterator_traits<RandomAccessIterator>::value_type center=std::numeric_limits<typename std::iterator_traits<RandomAccessIterator>::value_type>::quiet_NaN())
494
494
{
@@ -517,7 +517,7 @@ auto median_absolute_deviation(ExecutionPolicy&& exec, RandomAccessIterator firs
517
517
}
518
518
}
519
519
520
- template <class ExecutionPolicy , class RandomAccessContainer >
520
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
521
521
inline auto median_absolute_deviation (ExecutionPolicy&& exec, RandomAccessContainer & v,
522
522
typename RandomAccessContainer::value_type center=std::numeric_limits<typename RandomAccessContainer::value_type>::quiet_NaN())
523
523
{
@@ -531,14 +531,14 @@ inline auto median_absolute_deviation(RandomAccessIterator first, RandomAccessIt
531
531
return median_absolute_deviation (std::execution::seq, first, last, center);
532
532
}
533
533
534
- template <class RandomAccessContainer >
534
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
535
535
inline auto median_absolute_deviation (RandomAccessContainer & v,
536
536
typename RandomAccessContainer::value_type center=std::numeric_limits<typename RandomAccessContainer::value_type>::quiet_NaN())
537
537
{
538
538
return median_absolute_deviation (std::execution::seq, std::begin (v), std::end (v), center);
539
539
}
540
540
541
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator>
541
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator>
542
542
auto interquartile_range (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
543
543
{
544
544
using Real = typename std::iterator_traits<ForwardIterator>::value_type;
@@ -579,7 +579,7 @@ auto interquartile_range(ExecutionPolicy&& exec, ForwardIterator first, ForwardI
579
579
}
580
580
}
581
581
582
- template <class ExecutionPolicy , class RandomAccessContainer >
582
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
583
583
inline auto interquartile_range (ExecutionPolicy&& exec, RandomAccessContainer & v)
584
584
{
585
585
return interquartile_range (exec, std::begin (v), std::end (v));
@@ -591,13 +591,13 @@ inline auto interquartile_range(RandomAccessIterator first, RandomAccessIterator
591
591
return interquartile_range (std::execution::seq, first, last);
592
592
}
593
593
594
- template <class RandomAccessContainer >
594
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer>
595
595
inline auto interquartile_range (RandomAccessContainer & v)
596
596
{
597
597
return interquartile_range (std::execution::seq, std::begin (v), std::end (v));
598
598
}
599
599
600
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator, class OutputIterator >
600
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator, class OutputIterator >
601
601
inline OutputIterator mode (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, OutputIterator output)
602
602
{
603
603
if (!std::is_sorted (exec, first, last))
@@ -615,7 +615,7 @@ inline OutputIterator mode(ExecutionPolicy&& exec, ForwardIterator first, Forwar
615
615
return detail::mode_impl (first, last, output);
616
616
}
617
617
618
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container, class OutputIterator >
618
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container, class OutputIterator >
619
619
inline OutputIterator mode (ExecutionPolicy&& exec, Container & v, OutputIterator output)
620
620
{
621
621
return mode (exec, std::begin (v), std::end (v), output);
@@ -643,15 +643,15 @@ inline OutputIterator mode(Container & v, OutputIterator output)
643
643
644
644
// std::list is the return type for the proposed STL stats library
645
645
646
- template <class ExecutionPolicy , BOOST_MATH_FORWARD_ITER ForwardIterator, class Real = typename std::iterator_traits<ForwardIterator>::value_type>
646
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_FORWARD_ITER ForwardIterator, class Real = typename std::iterator_traits<ForwardIterator>::value_type>
647
647
inline auto mode (ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last)
648
648
{
649
649
std::list<Real> modes;
650
650
mode (exec, first, last, std::inserter (modes, modes.begin ()));
651
651
return modes;
652
652
}
653
653
654
- template <class ExecutionPolicy , BOOST_MATH_CONTAINER Container>
654
+ template <BOOST_MATH_EXECUTION_POLICY ExecutionPolicy, BOOST_MATH_CONTAINER Container>
655
655
inline auto mode (ExecutionPolicy&& exec, Container & v)
656
656
{
657
657
return mode (exec, std::begin (v), std::end (v));
@@ -953,7 +953,7 @@ Real median(RandomAccessIterator first, RandomAccessIterator last)
953
953
}
954
954
}
955
955
956
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type>
956
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type>
957
957
inline Real median (RandomAccessContainer& c)
958
958
{
959
959
return median (std::begin (c), std::end (c));
@@ -971,7 +971,7 @@ inline double gini_coefficient(RandomAccessIterator first, RandomAccessIterator
971
971
return detail::gini_coefficient_sequential_impl<double >(first, last);
972
972
}
973
973
974
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type,
974
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type,
975
975
enable_if_t <std::is_integral<Real>::value, bool > = true >
976
976
inline double gini_coefficient (RandomAccessContainer& c)
977
977
{
@@ -990,7 +990,7 @@ inline Real gini_coefficient(RandomAccessIterator first, RandomAccessIterator la
990
990
return detail::gini_coefficient_sequential_impl<Real>(first, last);
991
991
}
992
992
993
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type,
993
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type,
994
994
enable_if_t <!std::is_integral<Real>::value, bool > = true >
995
995
inline Real gini_coefficient (RandomAccessContainer& c)
996
996
{
@@ -1005,7 +1005,7 @@ inline double sample_gini_coefficient(RandomAccessIterator first, RandomAccessIt
1005
1005
return n*gini_coefficient (first, last)/(n-1 );
1006
1006
}
1007
1007
1008
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type,
1008
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type,
1009
1009
enable_if_t <std::is_integral<Real>::value, bool > = true >
1010
1010
inline double sample_gini_coefficient (RandomAccessContainer& c)
1011
1011
{
@@ -1020,7 +1020,7 @@ inline Real sample_gini_coefficient(RandomAccessIterator first, RandomAccessIter
1020
1020
return n*gini_coefficient (first, last)/(n-1 );
1021
1021
}
1022
1022
1023
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type,
1023
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type,
1024
1024
enable_if_t <!std::is_integral<Real>::value, bool > = true >
1025
1025
inline Real sample_gini_coefficient (RandomAccessContainer& c)
1026
1026
{
@@ -1055,7 +1055,7 @@ Real median_absolute_deviation(RandomAccessIterator first, RandomAccessIterator
1055
1055
}
1056
1056
}
1057
1057
1058
- template <class RandomAccessContainer , typename Real = typename RandomAccessContainer::value_type>
1058
+ template <BOOST_MATH_RANDOM_ACCESS_CONTAINER RandomAccessContainer, typename Real = typename RandomAccessContainer::value_type>
1059
1059
inline Real median_absolute_deviation (RandomAccessContainer& c,
1060
1060
typename RandomAccessContainer::value_type center=std::numeric_limits<typename RandomAccessContainer::value_type>::quiet_NaN())
1061
1061
{
0 commit comments