diff --git a/include/boost/math/statistics/univariate_statistics.hpp b/include/boost/math/statistics/univariate_statistics.hpp index f4c6d3236..8039a464a 100644 --- a/include/boost/math/statistics/univariate_statistics.hpp +++ b/include/boost/math/statistics/univariate_statistics.hpp @@ -413,6 +413,12 @@ inline auto median(RandomAccessContainer & v) return median(std::execution::seq, std::begin(v), std::end(v)); } +#if 0 +// +// Parallel gini calculation is curently broken, see: +// https://github.com/boostorg/math/issues/585 +// We will fix this at a later date, for now just use a serial implementation: +// template inline auto gini_coefficient(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) { @@ -445,6 +451,27 @@ inline auto gini_coefficient(ExecutionPolicy&& exec, RandomAccessIterator first, return detail::gini_coefficient_parallel_impl(exec, first, last); } } +#else +template +inline auto gini_coefficient(ExecutionPolicy&& exec, RandomAccessIterator first, RandomAccessIterator last) +{ + using Real = typename std::iterator_traits::value_type; + + if (!std::is_sorted(exec, first, last)) + { + std::sort(exec, first, last); + } + + if constexpr (std::is_integral_v) + { + return detail::gini_coefficient_sequential_impl(first, last); + } + else + { + return detail::gini_coefficient_sequential_impl(first, last); + } +} +#endif template inline auto gini_coefficient(ExecutionPolicy&& exec, RandomAccessContainer & v)