changeset 161:4797bbf470e7

No, that isn't going to end well. Back it out.
author Chris Cannam <cannam@all-day-breakfast.com>
date Sat, 16 Feb 2019 18:32:35 +0000
parents cff480c41f97
children d43aab368df9 9fa11135915a
files any/include/boost/math/distributions.hpp any/include/boost/math/distributions/arcsine.hpp any/include/boost/math/distributions/bernoulli.hpp any/include/boost/math/distributions/beta.hpp any/include/boost/math/distributions/binomial.hpp any/include/boost/math/distributions/cauchy.hpp any/include/boost/math/distributions/chi_squared.hpp any/include/boost/math/distributions/complement.hpp any/include/boost/math/distributions/detail/common_error_handling.hpp any/include/boost/math/distributions/detail/derived_accessors.hpp any/include/boost/math/distributions/detail/generic_mode.hpp any/include/boost/math/distributions/detail/generic_quantile.hpp any/include/boost/math/distributions/detail/hypergeometric_cdf.hpp any/include/boost/math/distributions/detail/hypergeometric_pdf.hpp any/include/boost/math/distributions/detail/hypergeometric_quantile.hpp any/include/boost/math/distributions/detail/inv_discrete_quantile.hpp any/include/boost/math/distributions/exponential.hpp any/include/boost/math/distributions/extreme_value.hpp any/include/boost/math/distributions/find_location.hpp any/include/boost/math/distributions/find_scale.hpp any/include/boost/math/distributions/fisher_f.hpp any/include/boost/math/distributions/fwd.hpp any/include/boost/math/distributions/gamma.hpp any/include/boost/math/distributions/geometric.hpp any/include/boost/math/distributions/hyperexponential.hpp any/include/boost/math/distributions/hypergeometric.hpp any/include/boost/math/distributions/inverse_chi_squared.hpp any/include/boost/math/distributions/inverse_gamma.hpp any/include/boost/math/distributions/inverse_gaussian.hpp any/include/boost/math/distributions/laplace.hpp any/include/boost/math/distributions/logistic.hpp any/include/boost/math/distributions/lognormal.hpp any/include/boost/math/distributions/negative_binomial.hpp any/include/boost/math/distributions/non_central_beta.hpp any/include/boost/math/distributions/non_central_chi_squared.hpp any/include/boost/math/distributions/non_central_f.hpp any/include/boost/math/distributions/non_central_t.hpp any/include/boost/math/distributions/normal.hpp any/include/boost/math/distributions/pareto.hpp any/include/boost/math/distributions/poisson.hpp any/include/boost/math/distributions/rayleigh.hpp any/include/boost/math/distributions/skew_normal.hpp any/include/boost/math/distributions/students_t.hpp any/include/boost/math/distributions/triangular.hpp any/include/boost/math/distributions/uniform.hpp any/include/boost/math/distributions/weibull.hpp
diffstat 46 files changed, 0 insertions(+), 19045 deletions(-) [+]
line wrap: on
line diff
--- a/any/include/boost/math/distributions.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-//  Copyright John Maddock 2006, 2007.
-//  Copyright Paul A. Bristow 2006, 2007, 2009, 2010.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// This file includes *all* the distributions.
-// this *may* be convenient if many are used
-// - to avoid including each distribution individually.
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_HPP
-#define BOOST_MATH_DISTRIBUTIONS_HPP
-
-#include <boost/math/distributions/arcsine.hpp>
-#include <boost/math/distributions/bernoulli.hpp>
-#include <boost/math/distributions/beta.hpp>
-#include <boost/math/distributions/binomial.hpp>
-#include <boost/math/distributions/cauchy.hpp>
-#include <boost/math/distributions/chi_squared.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/exponential.hpp>
-#include <boost/math/distributions/extreme_value.hpp>
-#include <boost/math/distributions/fisher_f.hpp>
-#include <boost/math/distributions/gamma.hpp>
-#include <boost/math/distributions/geometric.hpp>
-#include <boost/math/distributions/hyperexponential.hpp>
-#include <boost/math/distributions/hypergeometric.hpp>
-#include <boost/math/distributions/inverse_chi_squared.hpp>
-#include <boost/math/distributions/inverse_gamma.hpp>
-#include <boost/math/distributions/inverse_gaussian.hpp>
-#include <boost/math/distributions/laplace.hpp>
-#include <boost/math/distributions/logistic.hpp>
-#include <boost/math/distributions/lognormal.hpp>
-#include <boost/math/distributions/negative_binomial.hpp>
-#include <boost/math/distributions/non_central_chi_squared.hpp>
-#include <boost/math/distributions/non_central_beta.hpp>
-#include <boost/math/distributions/non_central_f.hpp>
-#include <boost/math/distributions/non_central_t.hpp>
-#include <boost/math/distributions/normal.hpp>
-#include <boost/math/distributions/pareto.hpp>
-#include <boost/math/distributions/poisson.hpp>
-#include <boost/math/distributions/rayleigh.hpp>
-#include <boost/math/distributions/skew_normal.hpp>
-#include <boost/math/distributions/students_t.hpp>
-#include <boost/math/distributions/triangular.hpp>
-#include <boost/math/distributions/uniform.hpp>
-#include <boost/math/distributions/weibull.hpp>
-#include <boost/math/distributions/find_scale.hpp>
-#include <boost/math/distributions/find_location.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_HPP
-
--- a/any/include/boost/math/distributions/arcsine.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,535 +0,0 @@
-// boost/math/distributions/arcsine.hpp
-
-// Copyright John Maddock 2014.
-// Copyright Paul A. Bristow 2014.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// http://en.wikipedia.org/wiki/arcsine_distribution
-
-// The arcsine Distribution is a continuous probability distribution.
-// http://en.wikipedia.org/wiki/Arcsine_distribution
-// http://www.wolframalpha.com/input/?i=ArcSinDistribution
-
-// Standard arcsine distribution is a special case of beta distribution with both a & b = one half,
-// and 0 <= x <= 1.
-
-// It is generalized to include any bounded support a <= x <= b from 0 <= x <= 1
-// by Wolfram and Wikipedia,
-// but using location and scale parameters by
-// Virtual Laboratories in Probability and Statistics http://www.math.uah.edu/stat/index.html
-// http://www.math.uah.edu/stat/special/Arcsine.html
-// The end-point version is simpler and more obvious, so we implement that.
-// TODO Perhaps provide location and scale functions?
-
-
-#ifndef BOOST_MATH_DIST_ARCSINE_HPP
-#define BOOST_MATH_DIST_ARCSINE_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/complement.hpp> // complements.
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks.
-#include <boost/math/constants/constants.hpp>
-
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-
-#if defined (BOOST_MSVC)
-#  pragma warning(push)
-#  pragma warning(disable: 4702) // Unreachable code,
-// in domain_error_imp in error_handling.
-#endif
-
-#include <utility>
-#include <exception>  // For std::domain_error.
-
-namespace boost
-{
-  namespace math
-  {
-    namespace arcsine_detail
-    {
-      // Common error checking routines for arcsine distribution functions:
-      // Duplicating for x_min and x_max provides specific error messages.
-      template <class RealType, class Policy>
-      inline bool check_x_min(const char* function, const RealType& x, RealType* result, const Policy& pol)
-      {
-        if (!(boost::math::isfinite)(x))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x_min argument is %1%, but must be finite !", x, pol);
-          return false;
-        }
-        return true;
-      } // bool check_x_min
-
-      template <class RealType, class Policy>
-      inline bool check_x_max(const char* function, const RealType& x, RealType* result, const Policy& pol)
-      {
-        if (!(boost::math::isfinite)(x))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x_max argument is %1%, but must be finite !", x, pol);
-          return false;
-        }
-        return true;
-      } // bool check_x_max
-
-
-      template <class RealType, class Policy>
-      inline bool check_x_minmax(const char* function, const RealType& x_min, const RealType& x_max, RealType* result, const Policy& pol)
-      { // Check x_min < x_max
-        if (x_min >= x_max)
-        {
-          std::string msg = "x_max argument is %1%, but must be > x_min = " + lexical_cast<std::string>(x_min) + "!";
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            msg.c_str(), x_max, pol);
-           // "x_max argument is %1%, but must be > x_min !", x_max, pol);
-            //  "x_max argument is %1%, but must be > x_min %2!", x_max, x_min, pol); would be better. 
-          // But would require replication of all helpers functions in /policies/error_handling.hpp for two values,
-          // as well as two value versions of raise_error, raise_domain_error and do_format ...
-          // so use slightly hacky lexical_cast to string instead.
-          return false;
-        }
-        return true;
-      } // bool check_x_minmax
-
-      template <class RealType, class Policy>
-      inline bool check_prob(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      {
-        if ((p < 0) || (p > 1) || !(boost::math::isfinite)(p))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Probability argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-          return false;
-        }
-        return true;
-      } // bool check_prob
-
-      template <class RealType, class Policy>
-      inline bool check_x(const char* function, const RealType& x_min, const RealType& x_max, const RealType& x, RealType* result, const Policy& pol)
-      { // Check x finite and x_min < x < x_max.
-        if (!(boost::math::isfinite)(x))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x argument is %1%, but must be finite !", x, pol);
-          return false;
-        }
-        if ((x < x_min) || (x > x_max))
-        {
-          // std::cout << x_min << ' ' << x << x_max << std::endl;
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x argument is %1%, but must be x_min < x < x_max !", x, pol);
-          // For example:
-          // Error in function boost::math::pdf(arcsine_distribution<double> const&, double) : x argument is -1.01, but must be x_min < x < x_max !
-          // TODO Perhaps show values of x_min and x_max?
-          return false;
-        }
-        return true;
-      } // bool check_x
-
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& x_min, const RealType& x_max, RealType* result, const Policy& pol)
-      { // Check both x_min and x_max finite, and x_min  < x_max.
-        return check_x_min(function, x_min, result, pol)
-            && check_x_max(function, x_max, result, pol)
-            && check_x_minmax(function, x_min, x_max, result, pol);
-      } // bool check_dist
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_x(const char* function, const RealType& x_min, const RealType& x_max, RealType x, RealType* result, const Policy& pol)
-      {
-        return check_dist(function, x_min, x_max, result, pol)
-          && arcsine_detail::check_x(function, x_min, x_max, x, result, pol);
-      } // bool check_dist_and_x
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, const RealType& x_min, const RealType& x_max, RealType p, RealType* result, const Policy& pol)
-      {
-        return check_dist(function, x_min, x_max, result, pol)
-          && check_prob(function, p, result, pol);
-      } // bool check_dist_and_prob
-
-    } // namespace arcsine_detail
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class arcsine_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      arcsine_distribution(RealType x_min = 0, RealType x_max = 1) : m_x_min(x_min), m_x_max(x_max)
-      { // Default beta (alpha = beta = 0.5) is standard arcsine with x_min = 0, x_max = 1.
-        // Generalized to allow x_min and x_max to be specified.
-        RealType result;
-        arcsine_detail::check_dist(
-          "boost::math::arcsine_distribution<%1%>::arcsine_distribution",
-          m_x_min,
-          m_x_max,
-          &result, Policy());
-      } // arcsine_distribution constructor.
-      // Accessor functions:
-      RealType x_min() const
-      {
-        return m_x_min;
-      }
-      RealType x_max() const
-      {
-        return m_x_max;
-      }
-
-    private:
-      RealType m_x_min; // Two x min and x max parameters of the arcsine distribution.
-      RealType m_x_max;
-    }; // template <class RealType, class Policy> class arcsine_distribution
-
-    // Convenient typedef to construct double version.
-    typedef arcsine_distribution<double> arcsine;
-
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const arcsine_distribution<RealType, Policy>&  dist)
-    { // Range of permissible values for random variable x.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(static_cast<RealType>(dist.x_min()), static_cast<RealType>(dist.x_max()));
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const arcsine_distribution<RealType, Policy>&  dist)
-    { // Range of supported values for random variable x.
-      // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-      return std::pair<RealType, RealType>(static_cast<RealType>(dist.x_min()), static_cast<RealType>(dist.x_max()));
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const arcsine_distribution<RealType, Policy>& dist)
-    { // Mean of arcsine distribution .
-      RealType result;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      if (false == arcsine_detail::check_dist(
-        "boost::math::mean(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-      return  (x_min + x_max) / 2;
-    } // mean
-
-    template <class RealType, class Policy>
-    inline RealType variance(const arcsine_distribution<RealType, Policy>& dist)
-    { // Variance of standard arcsine distribution = (1-0)/8 = 0.125.
-      RealType result;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-      if (false == arcsine_detail::check_dist(
-        "boost::math::variance(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-      return  (x_max - x_min) * (x_max - x_min) / 8;
-    } // variance
-
-    template <class RealType, class Policy>
-    inline RealType mode(const arcsine_distribution<RealType, Policy>& /* dist */)
-    { //There are always [*two] values for the mode, at ['x_min] and at ['x_max], default 0 and 1,
-      // so instead we raise the exception domain_error.
-      return policies::raise_domain_error<RealType>(
-        "boost::math::mode(arcsine_distribution<%1%>&)",
-        "The arcsine distribution has two modes at x_min and x_max: "
-        "so the return value is %1%.",
-        std::numeric_limits<RealType>::quiet_NaN(), Policy());
-    } // mode
-
-    template <class RealType, class Policy>
-    inline RealType median(const arcsine_distribution<RealType, Policy>& dist)
-    { // Median of arcsine distribution (a + b) / 2 == mean.
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-      RealType result;
-      if (false == arcsine_detail::check_dist(
-        "boost::math::median(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-      return  (x_min + x_max) / 2;
-    }
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const arcsine_distribution<RealType, Policy>& dist)
-    {
-      RealType result;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      if (false == arcsine_detail::check_dist(
-        "boost::math::skewness(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-      return 0;
-    } // skewness
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const arcsine_distribution<RealType, Policy>& dist)
-    {
-      RealType result;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      if (false == arcsine_detail::check_dist(
-        "boost::math::kurtosis_excess(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-      result = -3;
-      return  result / 2;
-    } // kurtosis_excess
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const arcsine_distribution<RealType, Policy>& dist)
-    {
-      RealType result;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      if (false == arcsine_detail::check_dist(
-        "boost::math::kurtosis(arcsine_distribution<%1%> const&, %1% )",
-        x_min,
-        x_max,
-        &result, Policy())
-        )
-      {
-        return result;
-      }
-
-      return 3 + kurtosis_excess(dist);
-    } // kurtosis
-
-    template <class RealType, class Policy>
-    inline RealType pdf(const arcsine_distribution<RealType, Policy>& dist, const RealType& xx)
-    { // Probability Density/Mass Function arcsine.
-      BOOST_FPU_EXCEPTION_GUARD
-      BOOST_MATH_STD_USING // For ADL of std functions.
-
-      static const char* function = "boost::math::pdf(arcsine_distribution<%1%> const&, %1%)";
-
-      RealType lo = dist.x_min();
-      RealType hi = dist.x_max();
-      RealType x = xx;
-
-      // Argument checks:
-      RealType result = 0; 
-      if (false == arcsine_detail::check_dist_and_x(
-        function,
-        lo, hi, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      using boost::math::constants::pi;
-      result = static_cast<RealType>(1) / (pi<RealType>() * sqrt((x - lo) * (hi - x)));
-      return result;
-    } // pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const arcsine_distribution<RealType, Policy>& dist, const RealType& x)
-    { // Cumulative Distribution Function arcsine.
-      BOOST_MATH_STD_USING // For ADL of std functions.
-
-      static const char* function = "boost::math::cdf(arcsine_distribution<%1%> const&, %1%)";
-
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      // Argument checks:
-      RealType result = 0;
-      if (false == arcsine_detail::check_dist_and_x(
-        function,
-        x_min, x_max, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (x == x_min)
-      {
-        return 0;
-      }
-      else if (x == x_max)
-      {
-        return 1;
-      }
-      using boost::math::constants::pi;
-      result = static_cast<RealType>(2) * asin(sqrt((x - x_min) / (x_max - x_min))) / pi<RealType>();
-      return result;
-    } // arcsine cdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const complemented2_type<arcsine_distribution<RealType, Policy>, RealType>& c)
-    { // Complemented Cumulative Distribution Function arcsine.
-      BOOST_MATH_STD_USING // For ADL of std functions.
-      static const char* function = "boost::math::cdf(arcsine_distribution<%1%> const&, %1%)";
-
-      RealType x = c.param;
-      arcsine_distribution<RealType, Policy> const& dist = c.dist;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-
-      // Argument checks:
-      RealType result = 0;
-      if (false == arcsine_detail::check_dist_and_x(
-        function,
-        x_min, x_max, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (x == x_min)
-      {
-        return 0;
-      }
-      else if (x == x_max)
-      {
-        return 1;
-      }
-      using boost::math::constants::pi;
-      // Naive version x = 1 - x;
-      // result = static_cast<RealType>(2) * asin(sqrt((x - x_min) / (x_max - x_min))) / pi<RealType>();
-      // is less accurate, so use acos instead of asin for complement.
-      result = static_cast<RealType>(2) * acos(sqrt((x - x_min) / (x_max - x_min))) / pi<RealType>();
-      return result;
-    } // arcine ccdf
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const arcsine_distribution<RealType, Policy>& dist, const RealType& p)
-    { 
-      // Quantile or Percent Point arcsine function or
-      // Inverse Cumulative probability distribution function CDF.
-      // Return x (0 <= x <= 1),
-      // for a given probability p (0 <= p <= 1).
-      // These functions take a probability as an argument
-      // and return a value such that the probability that a random variable x
-      // will be less than or equal to that value
-      // is whatever probability you supplied as an argument.
-      BOOST_MATH_STD_USING // For ADL of std functions.
-
-      using boost::math::constants::half_pi;
-
-      static const char* function = "boost::math::quantile(arcsine_distribution<%1%> const&, %1%)";
-
-      RealType result = 0; // of argument checks:
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-      if (false == arcsine_detail::check_dist_and_prob(
-        function,
-        x_min, x_max, p,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (p == 0)
-      {
-        return 0;
-      }
-      if (p == 1)
-      {
-        return 1;
-      }
-
-      RealType sin2hpip = sin(half_pi<RealType>() * p);
-      RealType sin2hpip2 = sin2hpip * sin2hpip;
-      result = -x_min * sin2hpip2 + x_min + x_max * sin2hpip2;
-
-      return result;
-    } // quantile
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<arcsine_distribution<RealType, Policy>, RealType>& c)
-    { 
-      // Complement Quantile or Percent Point arcsine function.
-      // Return the number of expected x for a given
-      // complement of the probability q.
-      BOOST_MATH_STD_USING // For ADL of std functions.
-
-      using boost::math::constants::half_pi;
-      static const char* function = "boost::math::quantile(arcsine_distribution<%1%> const&, %1%)";
-
-      // Error checks:
-      RealType q = c.param;
-      const arcsine_distribution<RealType, Policy>& dist = c.dist;
-      RealType result = 0;
-      RealType x_min = dist.x_min();
-      RealType x_max = dist.x_max();
-      if (false == arcsine_detail::check_dist_and_prob(
-        function,
-        x_min,
-        x_max,
-        q,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (q == 1)
-      {
-        return 0;
-      }
-      if (q == 0)
-      {
-        return 1;
-      }
-      // Naive RealType p = 1 - q; result = sin(half_pi<RealType>() * p); loses accuracy, so use a cos alternative instead.
-      //result = cos(half_pi<RealType>() * q); // for arcsine(0,1)
-      //result = result * result;
-      // For generalized arcsine:
-      RealType cos2hpip = cos(half_pi<RealType>() * q);
-      RealType cos2hpip2 = cos2hpip * cos2hpip;
-      result = -x_min * cos2hpip2 + x_min + x_max * cos2hpip2;
-
-      return result;
-    } // Quantile Complement
-
-  } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#if defined (BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_MATH_DIST_ARCSINE_HPP
--- a/any/include/boost/math/distributions/bernoulli.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-// boost\math\distributions\bernoulli.hpp
-
-// Copyright John Maddock 2006.
-// Copyright Paul A. Bristow 2007.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// http://en.wikipedia.org/wiki/bernoulli_distribution
-// http://mathworld.wolfram.com/BernoulliDistribution.html
-
-// bernoulli distribution is the discrete probability distribution of
-// the number (k) of successes, in a single Bernoulli trials.
-// It is a version of the binomial distribution when n = 1.
-
-// But note that the bernoulli distribution
-// (like others including the poisson, binomial & negative binomial)
-// is strictly defined as a discrete function: only integral values of k are envisaged.
-// However because of the method of calculation using a continuous gamma function,
-// it is convenient to treat it as if a continous function,
-// and permit non-integral values of k.
-// To enforce the strict mathematical model, users should use floor or ceil functions
-// on k outside this function to ensure that k is integral.
-
-#ifndef BOOST_MATH_SPECIAL_BERNOULLI_HPP
-#define BOOST_MATH_SPECIAL_BERNOULLI_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/tools/config.hpp>
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-
-#include <utility>
-
-namespace boost
-{
-  namespace math
-  {
-    namespace bernoulli_detail
-    {
-      // Common error checking routines for bernoulli distribution functions:
-      template <class RealType, class Policy>
-      inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& /* pol */)
-      {
-        if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, Policy());
-          return false;
-        }
-        return true;
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& p, RealType* result, const Policy& /* pol */, const mpl::true_&)
-      {
-        return check_success_fraction(function, p, result, Policy());
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* , const RealType& , RealType* , const Policy& /* pol */, const mpl::false_&)
-      {
-         return true;
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& p, RealType* result, const Policy& /* pol */)
-      {
-         return check_dist(function, p, result, Policy(), typename policies::constructor_error_check<Policy>::type());
-      }
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_k(const char* function, const RealType& p, RealType k, RealType* result, const Policy& pol)
-      {
-        if(check_dist(function, p, result, Policy(), typename policies::method_error_check<Policy>::type()) == false)
-        {
-          return false;
-        }
-        if(!(boost::math::isfinite)(k) || !((k == 0) || (k == 1)))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Number of successes argument is %1%, but must be 0 or 1 !", k, pol);
-          return false;
-        }
-       return true;
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, RealType p, RealType prob, RealType* result, const Policy& /* pol */)
-      {
-        if((check_dist(function, p, result, Policy(), typename policies::method_error_check<Policy>::type()) && detail::check_probability(function, prob, result, Policy())) == false)
-        {
-          return false;
-        }
-        return true;
-      }
-    } // namespace bernoulli_detail
-
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class bernoulli_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      bernoulli_distribution(RealType p = 0.5) : m_p(p)
-      { // Default probability = half suits 'fair' coin tossing
-        // where probability of heads == probability of tails.
-        RealType result; // of checks.
-        bernoulli_detail::check_dist(
-           "boost::math::bernoulli_distribution<%1%>::bernoulli_distribution",
-          m_p,
-          &result, Policy());
-      } // bernoulli_distribution constructor.
-
-      RealType success_fraction() const
-      { // Probability.
-        return m_p;
-      }
-
-    private:
-      RealType m_p; // success_fraction
-    }; // template <class RealType> class bernoulli_distribution
-
-    typedef bernoulli_distribution<double> bernoulli;
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const bernoulli_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable k = {0, 1}.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const bernoulli_distribution<RealType, Policy>& /* dist */)
-    { // Range of supported values for random variable k = {0, 1}.
-      // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-      return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const bernoulli_distribution<RealType, Policy>& dist)
-    { // Mean of bernoulli distribution = p (n = 1).
-      return dist.success_fraction();
-    } // mean
-
-    // Rely on dereived_accessors quantile(half)
-    //template <class RealType>
-    //inline RealType median(const bernoulli_distribution<RealType, Policy>& dist)
-    //{ // Median of bernoulli distribution is not defined.
-    //  return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
-    //} // median
-
-    template <class RealType, class Policy>
-    inline RealType variance(const bernoulli_distribution<RealType, Policy>& dist)
-    { // Variance of bernoulli distribution =p * q.
-      return  dist.success_fraction() * (1 - dist.success_fraction());
-    } // variance
-
-    template <class RealType, class Policy>
-    RealType pdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Probability Density/Mass Function.
-      BOOST_FPU_EXCEPTION_GUARD
-      // Error check:
-      RealType result = 0; // of checks.
-      if(false == bernoulli_detail::check_dist_and_k(
-        "boost::math::pdf(bernoulli_distribution<%1%>, %1%)",
-        dist.success_fraction(), // 0 to 1
-        k, // 0 or 1
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Assume k is integral.
-      if (k == 0)
-      {
-        return 1 - dist.success_fraction(); // 1 - p
-      }
-      else  // k == 1
-      {
-        return dist.success_fraction(); // p
-      }
-    } // pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const bernoulli_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Cumulative Distribution Function Bernoulli.
-      RealType p = dist.success_fraction();
-      // Error check:
-      RealType result = 0;
-      if(false == bernoulli_detail::check_dist_and_k(
-        "boost::math::cdf(bernoulli_distribution<%1%>, %1%)",
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (k == 0)
-      {
-        return 1 - p;
-      }
-      else
-      { // k == 1
-        return 1;
-      }
-    } // bernoulli cdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const complemented2_type<bernoulli_distribution<RealType, Policy>, RealType>& c)
-    { // Complemented Cumulative Distribution Function bernoulli.
-      RealType const& k = c.param;
-      bernoulli_distribution<RealType, Policy> const& dist = c.dist;
-      RealType p = dist.success_fraction();
-      // Error checks:
-      RealType result = 0;
-      if(false == bernoulli_detail::check_dist_and_k(
-        "boost::math::cdf(bernoulli_distribution<%1%>, %1%)",
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (k == 0)
-      {
-        return p;
-      }
-      else
-      { // k == 1
-        return 0;
-      }
-    } // bernoulli cdf complement
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const bernoulli_distribution<RealType, Policy>& dist, const RealType& p)
-    { // Quantile or Percent Point Bernoulli function.
-      // Return the number of expected successes k either 0 or 1.
-      // for a given probability p.
-
-      RealType result = 0; // of error checks:
-      if(false == bernoulli_detail::check_dist_and_prob(
-        "boost::math::quantile(bernoulli_distribution<%1%>, %1%)",
-        dist.success_fraction(),
-        p,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (p <= (1 - dist.success_fraction()))
-      { // p <= pdf(dist, 0) == cdf(dist, 0)
-        return 0;
-      }
-      else
-      {
-        return 1;
-      }
-    } // quantile
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<bernoulli_distribution<RealType, Policy>, RealType>& c)
-    { // Quantile or Percent Point bernoulli function.
-      // Return the number of expected successes k for a given
-      // complement of the probability q.
-      //
-      // Error checks:
-      RealType q = c.param;
-      const bernoulli_distribution<RealType, Policy>& dist = c.dist;
-      RealType result = 0;
-      if(false == bernoulli_detail::check_dist_and_prob(
-        "boost::math::quantile(bernoulli_distribution<%1%>, %1%)",
-        dist.success_fraction(),
-        q,
-        &result, Policy()))
-      {
-        return result;
-      }
-
-      if (q <= 1 - dist.success_fraction())
-      { // // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
-        return 1;
-      }
-      else
-      {
-        return 0;
-      }
-    } // quantile complemented.
-
-    template <class RealType, class Policy>
-    inline RealType mode(const bernoulli_distribution<RealType, Policy>& dist)
-    {
-      return static_cast<RealType>((dist.success_fraction() <= 0.5) ? 0 : 1); // p = 0.5 can be 0 or 1
-    }
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const bernoulli_distribution<RealType, Policy>& dist)
-    {
-      BOOST_MATH_STD_USING; // Aid ADL for sqrt.
-      RealType p = dist.success_fraction();
-      return (1 - 2 * p) / sqrt(p * (1 - p));
-    }
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const bernoulli_distribution<RealType, Policy>& dist)
-    {
-      RealType p = dist.success_fraction();
-      // Note Wolfram says this is kurtosis in text, but gamma2 is the kurtosis excess,
-      // and Wikipedia also says this is the kurtosis excess formula.
-      // return (6 * p * p - 6 * p + 1) / (p * (1 - p));
-      // But Wolfram kurtosis article gives this simpler formula for kurtosis excess:
-      return 1 / (1 - p) + 1/p -6;
-    }
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const bernoulli_distribution<RealType, Policy>& dist)
-    {
-      RealType p = dist.success_fraction();
-      return 1 / (1 - p) + 1/p -6 + 3;
-      // Simpler than:
-      // return (6 * p * p - 6 * p + 1) / (p * (1 - p)) + 3;
-    }
-
-  } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_BERNOULLI_HPP
-
-
-
--- a/any/include/boost/math/distributions/beta.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,541 +0,0 @@
-// boost\math\distributions\beta.hpp
-
-// Copyright John Maddock 2006.
-// Copyright Paul A. Bristow 2006.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// http://en.wikipedia.org/wiki/Beta_distribution
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda366h.htm
-// http://mathworld.wolfram.com/BetaDistribution.html
-
-// The Beta Distribution is a continuous probability distribution.
-// The beta distribution is used to model events which are constrained to take place
-// within an interval defined by maxima and minima,
-// so is used extensively in PERT and other project management systems
-// to describe the time to completion.
-// The cdf of the beta distribution is used as a convenient way
-// of obtaining the sum over a set of binomial outcomes.
-// The beta distribution is also used in Bayesian statistics.
-
-#ifndef BOOST_MATH_DIST_BETA_HPP
-#define BOOST_MATH_DIST_BETA_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for beta.
-#include <boost/math/distributions/complement.hpp> // complements.
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-
-#if defined (BOOST_MSVC)
-#  pragma warning(push)
-#  pragma warning(disable: 4702) // unreachable code
-// in domain_error_imp in error_handling
-#endif
-
-#include <utility>
-
-namespace boost
-{
-  namespace math
-  {
-    namespace beta_detail
-    {
-      // Common error checking routines for beta distribution functions:
-      template <class RealType, class Policy>
-      inline bool check_alpha(const char* function, const RealType& alpha, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(alpha) || (alpha <= 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Alpha argument is %1%, but must be > 0 !", alpha, pol);
-          return false;
-        }
-        return true;
-      } // bool check_alpha
-
-      template <class RealType, class Policy>
-      inline bool check_beta(const char* function, const RealType& beta, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(beta) || (beta <= 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Beta argument is %1%, but must be > 0 !", beta, pol);
-          return false;
-        }
-        return true;
-      } // bool check_beta
-
-      template <class RealType, class Policy>
-      inline bool check_prob(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      {
-        if((p < 0) || (p > 1) || !(boost::math::isfinite)(p))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Probability argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-          return false;
-        }
-        return true;
-      } // bool check_prob
-
-      template <class RealType, class Policy>
-      inline bool check_x(const char* function, const RealType& x, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(x) || (x < 0) || (x > 1))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x argument is %1%, but must be >= 0 and <= 1 !", x, pol);
-          return false;
-        }
-        return true;
-      } // bool check_x
-
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& alpha, const RealType& beta, RealType* result, const Policy& pol)
-      { // Check both alpha and beta.
-        return check_alpha(function, alpha, result, pol)
-          && check_beta(function, beta, result, pol);
-      } // bool check_dist
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_x(const char* function, const RealType& alpha, const RealType& beta, RealType x, RealType* result, const Policy& pol)
-      {
-        return check_dist(function, alpha, beta, result, pol)
-          && beta_detail::check_x(function, x, result, pol);
-      } // bool check_dist_and_x
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, const RealType& alpha, const RealType& beta, RealType p, RealType* result, const Policy& pol)
-      {
-        return check_dist(function, alpha, beta, result, pol)
-          && check_prob(function, p, result, pol);
-      } // bool check_dist_and_prob
-
-      template <class RealType, class Policy>
-      inline bool check_mean(const char* function, const RealType& mean, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(mean) || (mean <= 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "mean argument is %1%, but must be > 0 !", mean, pol);
-          return false;
-        }
-        return true;
-      } // bool check_mean
-      template <class RealType, class Policy>
-      inline bool check_variance(const char* function, const RealType& variance, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(variance) || (variance <= 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "variance argument is %1%, but must be > 0 !", variance, pol);
-          return false;
-        }
-        return true;
-      } // bool check_variance
-    } // namespace beta_detail
-
-    // typedef beta_distribution<double> beta;
-    // is deliberately NOT included to avoid a name clash with the beta function.
-    // Use beta_distribution<> mybeta(...) to construct type double.
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class beta_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      beta_distribution(RealType l_alpha = 1, RealType l_beta = 1) : m_alpha(l_alpha), m_beta(l_beta)
-      {
-        RealType result;
-        beta_detail::check_dist(
-           "boost::math::beta_distribution<%1%>::beta_distribution",
-          m_alpha,
-          m_beta,
-          &result, Policy());
-      } // beta_distribution constructor.
-      // Accessor functions:
-      RealType alpha() const
-      {
-        return m_alpha;
-      }
-      RealType beta() const
-      { // .
-        return m_beta;
-      }
-
-      // Estimation of the alpha & beta parameters.
-      // http://en.wikipedia.org/wiki/Beta_distribution
-      // gives formulae in section on parameter estimation.
-      // Also NIST EDA page 3 & 4 give the same.
-      // http://www.itl.nist.gov/div898/handbook/eda/section3/eda366h.htm
-      // http://www.epi.ucdavis.edu/diagnostictests/betabuster.html
-
-      static RealType find_alpha(
-        RealType mean, // Expected value of mean.
-        RealType variance) // Expected value of variance.
-      {
-        static const char* function = "boost::math::beta_distribution<%1%>::find_alpha";
-        RealType result = 0; // of error checks.
-        if(false ==
-            (
-              beta_detail::check_mean(function, mean, &result, Policy())
-              && beta_detail::check_variance(function, variance, &result, Policy())
-            )
-          )
-        {
-          return result;
-        }
-        return mean * (( (mean * (1 - mean)) / variance)- 1);
-      } // RealType find_alpha
-
-      static RealType find_beta(
-        RealType mean, // Expected value of mean.
-        RealType variance) // Expected value of variance.
-      {
-        static const char* function = "boost::math::beta_distribution<%1%>::find_beta";
-        RealType result = 0; // of error checks.
-        if(false ==
-            (
-              beta_detail::check_mean(function, mean, &result, Policy())
-              &&
-              beta_detail::check_variance(function, variance, &result, Policy())
-            )
-          )
-        {
-          return result;
-        }
-        return (1 - mean) * (((mean * (1 - mean)) /variance)-1);
-      } //  RealType find_beta
-
-      // Estimate alpha & beta from either alpha or beta, and x and probability.
-      // Uses for these parameter estimators are unclear.
-
-      static RealType find_alpha(
-        RealType beta, // from beta.
-        RealType x, //  x.
-        RealType probability) // cdf
-      {
-        static const char* function = "boost::math::beta_distribution<%1%>::find_alpha";
-        RealType result = 0; // of error checks.
-        if(false ==
-            (
-             beta_detail::check_prob(function, probability, &result, Policy())
-             &&
-             beta_detail::check_beta(function, beta, &result, Policy())
-             &&
-             beta_detail::check_x(function, x, &result, Policy())
-            )
-          )
-        {
-          return result;
-        }
-        return ibeta_inva(beta, x, probability, Policy());
-      } // RealType find_alpha(beta, a, probability)
-
-      static RealType find_beta(
-        // ibeta_invb(T b, T x, T p); (alpha, x, cdf,)
-        RealType alpha, // alpha.
-        RealType x, // probability x.
-        RealType probability) // probability cdf.
-      {
-        static const char* function = "boost::math::beta_distribution<%1%>::find_beta";
-        RealType result = 0; // of error checks.
-        if(false ==
-            (
-              beta_detail::check_prob(function, probability, &result, Policy())
-              &&
-              beta_detail::check_alpha(function, alpha, &result, Policy())
-              &&
-              beta_detail::check_x(function, x, &result, Policy())
-            )
-          )
-        {
-          return result;
-        }
-        return ibeta_invb(alpha, x, probability, Policy());
-      } //  RealType find_beta(alpha, x, probability)
-
-    private:
-      RealType m_alpha; // Two parameters of the beta distribution.
-      RealType m_beta;
-    }; // template <class RealType, class Policy> class beta_distribution
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const beta_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable x.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const beta_distribution<RealType, Policy>&  /* dist */)
-    { // Range of supported values for random variable x.
-      // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-      return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const beta_distribution<RealType, Policy>& dist)
-    { // Mean of beta distribution = np.
-      return  dist.alpha() / (dist.alpha() + dist.beta());
-    } // mean
-
-    template <class RealType, class Policy>
-    inline RealType variance(const beta_distribution<RealType, Policy>& dist)
-    { // Variance of beta distribution = np(1-p).
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      return  (a * b) / ((a + b ) * (a + b) * (a + b + 1));
-    } // variance
-
-    template <class RealType, class Policy>
-    inline RealType mode(const beta_distribution<RealType, Policy>& dist)
-    {
-      static const char* function = "boost::math::mode(beta_distribution<%1%> const&)";
-
-      RealType result;
-      if ((dist.alpha() <= 1))
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "mode undefined for alpha = %1%, must be > 1!", dist.alpha(), Policy());
-        return result;
-      }
-
-      if ((dist.beta() <= 1))
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "mode undefined for beta = %1%, must be > 1!", dist.beta(), Policy());
-        return result;
-      }
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      return (a-1) / (a + b - 2);
-    } // mode
-
-    //template <class RealType, class Policy>
-    //inline RealType median(const beta_distribution<RealType, Policy>& dist)
-    //{ // Median of beta distribution is not defined.
-    //  return tools::domain_error<RealType>(function, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
-    //} // median
-
-    //But WILL be provided by the derived accessor as quantile(0.5).
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const beta_distribution<RealType, Policy>& dist)
-    {
-      BOOST_MATH_STD_USING // ADL of std functions.
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      return (2 * (b-a) * sqrt(a + b + 1)) / ((a + b + 2) * sqrt(a * b));
-    } // skewness
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const beta_distribution<RealType, Policy>& dist)
-    {
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      RealType a_2 = a * a;
-      RealType n = 6 * (a_2 * a - a_2 * (2 * b - 1) + b * b * (b + 1) - 2 * a * b * (b + 2));
-      RealType d = a * b * (a + b + 2) * (a + b + 3);
-      return  n / d;
-    } // kurtosis_excess
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const beta_distribution<RealType, Policy>& dist)
-    {
-      return 3 + kurtosis_excess(dist);
-    } // kurtosis
-
-    template <class RealType, class Policy>
-    inline RealType pdf(const beta_distribution<RealType, Policy>& dist, const RealType& x)
-    { // Probability Density/Mass Function.
-      BOOST_FPU_EXCEPTION_GUARD
-
-      static const char* function = "boost::math::pdf(beta_distribution<%1%> const&, %1%)";
-
-      BOOST_MATH_STD_USING // for ADL of std functions
-
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-
-      // Argument checks:
-      RealType result = 0;
-      if(false == beta_detail::check_dist_and_x(
-        function,
-        a, b, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      using boost::math::beta;
-      return ibeta_derivative(a, b, x, Policy());
-    } // pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const beta_distribution<RealType, Policy>& dist, const RealType& x)
-    { // Cumulative Distribution Function beta.
-      BOOST_MATH_STD_USING // for ADL of std functions
-
-      static const char* function = "boost::math::cdf(beta_distribution<%1%> const&, %1%)";
-
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-
-      // Argument checks:
-      RealType result = 0;
-      if(false == beta_detail::check_dist_and_x(
-        function,
-        a, b, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (x == 0)
-      {
-        return 0;
-      }
-      else if (x == 1)
-      {
-        return 1;
-      }
-      return ibeta(a, b, x, Policy());
-    } // beta cdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const complemented2_type<beta_distribution<RealType, Policy>, RealType>& c)
-    { // Complemented Cumulative Distribution Function beta.
-
-      BOOST_MATH_STD_USING // for ADL of std functions
-
-      static const char* function = "boost::math::cdf(beta_distribution<%1%> const&, %1%)";
-
-      RealType const& x = c.param;
-      beta_distribution<RealType, Policy> const& dist = c.dist;
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-
-      // Argument checks:
-      RealType result = 0;
-      if(false == beta_detail::check_dist_and_x(
-        function,
-        a, b, x,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (x == 0)
-      {
-        return 1;
-      }
-      else if (x == 1)
-      {
-        return 0;
-      }
-      // Calculate cdf beta using the incomplete beta function.
-      // Use of ibeta here prevents cancellation errors in calculating
-      // 1 - x if x is very small, perhaps smaller than machine epsilon.
-      return ibetac(a, b, x, Policy());
-    } // beta cdf
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const beta_distribution<RealType, Policy>& dist, const RealType& p)
-    { // Quantile or Percent Point beta function or
-      // Inverse Cumulative probability distribution function CDF.
-      // Return x (0 <= x <= 1),
-      // for a given probability p (0 <= p <= 1).
-      // These functions take a probability as an argument
-      // and return a value such that the probability that a random variable x
-      // will be less than or equal to that value
-      // is whatever probability you supplied as an argument.
-
-      static const char* function = "boost::math::quantile(beta_distribution<%1%> const&, %1%)";
-
-      RealType result = 0; // of argument checks:
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      if(false == beta_detail::check_dist_and_prob(
-        function,
-        a, b, p,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (p == 0)
-      {
-        return 0;
-      }
-      if (p == 1)
-      {
-        return 1;
-      }
-      return ibeta_inv(a, b, p, static_cast<RealType*>(0), Policy());
-    } // quantile
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<beta_distribution<RealType, Policy>, RealType>& c)
-    { // Complement Quantile or Percent Point beta function .
-      // Return the number of expected x for a given
-      // complement of the probability q.
-
-      static const char* function = "boost::math::quantile(beta_distribution<%1%> const&, %1%)";
-
-      //
-      // Error checks:
-      RealType q = c.param;
-      const beta_distribution<RealType, Policy>& dist = c.dist;
-      RealType result = 0;
-      RealType a = dist.alpha();
-      RealType b = dist.beta();
-      if(false == beta_detail::check_dist_and_prob(
-        function,
-        a,
-        b,
-        q,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if(q == 1)
-      {
-        return 0;
-      }
-      if(q == 0)
-      {
-        return 1;
-      }
-
-      return ibetac_inv(a, b, q, static_cast<RealType*>(0), Policy());
-    } // Quantile Complement
-
-  } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#if defined (BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_MATH_DIST_BETA_HPP
-
-
--- a/any/include/boost/math/distributions/binomial.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,728 +0,0 @@
-// boost\math\distributions\binomial.hpp
-
-// Copyright John Maddock 2006.
-// Copyright Paul A. Bristow 2007.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// http://en.wikipedia.org/wiki/binomial_distribution
-
-// Binomial distribution is the discrete probability distribution of
-// the number (k) of successes, in a sequence of
-// n independent (yes or no, success or failure) Bernoulli trials.
-
-// It expresses the probability of a number of events occurring in a fixed time
-// if these events occur with a known average rate (probability of success),
-// and are independent of the time since the last event.
-
-// The number of cars that pass through a certain point on a road during a given period of time.
-// The number of spelling mistakes a secretary makes while typing a single page.
-// The number of phone calls at a call center per minute.
-// The number of times a web server is accessed per minute.
-// The number of light bulbs that burn out in a certain amount of time.
-// The number of roadkill found per unit length of road
-
-// http://en.wikipedia.org/wiki/binomial_distribution
-
-// Given a sample of N measured values k[i],
-// we wish to estimate the value of the parameter x (mean)
-// of the binomial population from which the sample was drawn.
-// To calculate the maximum likelihood value = 1/N sum i = 1 to N of k[i]
-
-// Also may want a function for EXACTLY k.
-
-// And probability that there are EXACTLY k occurrences is
-// exp(-x) * pow(x, k) / factorial(k)
-// where x is expected occurrences (mean) during the given interval.
-// For example, if events occur, on average, every 4 min,
-// and we are interested in number of events occurring in 10 min,
-// then x = 10/4 = 2.5
-
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda366i.htm
-
-// The binomial distribution is used when there are
-// exactly two mutually exclusive outcomes of a trial.
-// These outcomes are appropriately labeled "success" and "failure".
-// The binomial distribution is used to obtain
-// the probability of observing x successes in N trials,
-// with the probability of success on a single trial denoted by p.
-// The binomial distribution assumes that p is fixed for all trials.
-
-// P(x, p, n) = n!/(x! * (n-x)!) * p^x * (1-p)^(n-x)
-
-// http://mathworld.wolfram.com/BinomialCoefficient.html
-
-// The binomial coefficient (n; k) is the number of ways of picking
-// k unordered outcomes from n possibilities,
-// also known as a combination or combinatorial number.
-// The symbols _nC_k and (n; k) are used to denote a binomial coefficient,
-// and are sometimes read as "n choose k."
-// (n; k) therefore gives the number of k-subsets  possible out of a set of n distinct items.
-
-// For example:
-//  The 2-subsets of {1,2,3,4} are the six pairs {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, and {3,4}, so (4; 2)==6.
-
-// http://functions.wolfram.com/GammaBetaErf/Binomial/ for evaluation.
-
-// But note that the binomial distribution
-// (like others including the poisson, negative binomial & Bernoulli)
-// is strictly defined as a discrete function: only integral values of k are envisaged.
-// However because of the method of calculation using a continuous gamma function,
-// it is convenient to treat it as if a continous function,
-// and permit non-integral values of k.
-// To enforce the strict mathematical model, users should use floor or ceil functions
-// on k outside this function to ensure that k is integral.
-
-#ifndef BOOST_MATH_SPECIAL_BINOMIAL_HPP
-#define BOOST_MATH_SPECIAL_BINOMIAL_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for incomplete beta.
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/distributions/detail/inv_discrete_quantile.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-
-#include <utility>
-
-namespace boost
-{
-  namespace math
-  {
-
-     template <class RealType, class Policy>
-     class binomial_distribution;
-
-     namespace binomial_detail{
-        // common error checking routines for binomial distribution functions:
-        template <class RealType, class Policy>
-        inline bool check_N(const char* function, const RealType& N, RealType* result, const Policy& pol)
-        {
-           if((N < 0) || !(boost::math::isfinite)(N))
-           {
-               *result = policies::raise_domain_error<RealType>(
-                  function,
-                  "Number of Trials argument is %1%, but must be >= 0 !", N, pol);
-               return false;
-           }
-           return true;
-        }
-        template <class RealType, class Policy>
-        inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
-        {
-           if((p < 0) || (p > 1) || !(boost::math::isfinite)(p))
-           {
-               *result = policies::raise_domain_error<RealType>(
-                  function,
-                  "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-               return false;
-           }
-           return true;
-        }
-        template <class RealType, class Policy>
-        inline bool check_dist(const char* function, const RealType& N, const RealType& p, RealType* result, const Policy& pol)
-        {
-           return check_success_fraction(
-              function, p, result, pol)
-              && check_N(
-               function, N, result, pol);
-        }
-        template <class RealType, class Policy>
-        inline bool check_dist_and_k(const char* function, const RealType& N, const RealType& p, RealType k, RealType* result, const Policy& pol)
-        {
-           if(check_dist(function, N, p, result, pol) == false)
-              return false;
-           if((k < 0) || !(boost::math::isfinite)(k))
-           {
-               *result = policies::raise_domain_error<RealType>(
-                  function,
-                  "Number of Successes argument is %1%, but must be >= 0 !", k, pol);
-               return false;
-           }
-           if(k > N)
-           {
-               *result = policies::raise_domain_error<RealType>(
-                  function,
-                  "Number of Successes argument is %1%, but must be <= Number of Trials !", k, pol);
-               return false;
-           }
-           return true;
-        }
-        template <class RealType, class Policy>
-        inline bool check_dist_and_prob(const char* function, const RealType& N, RealType p, RealType prob, RealType* result, const Policy& pol)
-        {
-           if((check_dist(function, N, p, result, pol) && detail::check_probability(function, prob, result, pol)) == false)
-              return false;
-           return true;
-        }
-
-         template <class T, class Policy>
-         T inverse_binomial_cornish_fisher(T n, T sf, T p, T q, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            // mean:
-            T m = n * sf;
-            // standard deviation:
-            T sigma = sqrt(n * sf * (1 - sf));
-            // skewness
-            T sk = (1 - 2 * sf) / sigma;
-            // kurtosis:
-            // T k = (1 - 6 * sf * (1 - sf) ) / (n * sf * (1 - sf));
-            // Get the inverse of a std normal distribution:
-            T x = boost::math::erfc_inv(p > q ? 2 * q : 2 * p, pol) * constants::root_two<T>();
-            // Set the sign:
-            if(p < 0.5)
-               x = -x;
-            T x2 = x * x;
-            // w is correction term due to skewness
-            T w = x + sk * (x2 - 1) / 6;
-            /*
-            // Add on correction due to kurtosis.
-            // Disabled for now, seems to make things worse?
-            //
-            if(n >= 10)
-               w += k * x * (x2 - 3) / 24 + sk * sk * x * (2 * x2 - 5) / -36;
-               */
-            w = m + sigma * w;
-            if(w < tools::min_value<T>())
-               return sqrt(tools::min_value<T>());
-            if(w > n)
-               return n;
-            return w;
-         }
-
-      template <class RealType, class Policy>
-      RealType quantile_imp(const binomial_distribution<RealType, Policy>& dist, const RealType& p, const RealType& q, bool comp)
-      { // Quantile or Percent Point Binomial function.
-        // Return the number of expected successes k,
-        // for a given probability p.
-        //
-        // Error checks:
-        BOOST_MATH_STD_USING  // ADL of std names
-        RealType result = 0;
-        RealType trials = dist.trials();
-        RealType success_fraction = dist.success_fraction();
-        if(false == binomial_detail::check_dist_and_prob(
-           "boost::math::quantile(binomial_distribution<%1%> const&, %1%)",
-           trials,
-           success_fraction,
-           p,
-           &result, Policy()))
-        {
-           return result;
-        }
-
-        // Special cases:
-        //
-        if(p == 0)
-        {  // There may actually be no answer to this question,
-           // since the probability of zero successes may be non-zero,
-           // but zero is the best we can do:
-           return 0;
-        }
-        if(p == 1)
-        {  // Probability of n or fewer successes is always one,
-           // so n is the most sensible answer here:
-           return trials;
-        }
-        if (p <= pow(1 - success_fraction, trials))
-        { // p <= pdf(dist, 0) == cdf(dist, 0)
-          return 0; // So the only reasonable result is zero.
-        } // And root finder would fail otherwise.
-        if(success_fraction == 1)
-        {  // our formulae break down in this case:
-           return p > 0.5f ? trials : 0;
-        }
-
-        // Solve for quantile numerically:
-        //
-        RealType guess = binomial_detail::inverse_binomial_cornish_fisher(trials, success_fraction, p, q, Policy());
-        RealType factor = 8;
-        if(trials > 100)
-           factor = 1.01f; // guess is pretty accurate
-        else if((trials > 10) && (trials - 1 > guess) && (guess > 3))
-           factor = 1.15f; // less accurate but OK.
-        else if(trials < 10)
-        {
-           // pretty inaccurate guess in this area:
-           if(guess > trials / 64)
-           {
-              guess = trials / 4;
-              factor = 2;
-           }
-           else
-              guess = trials / 1024;
-        }
-        else
-           factor = 2; // trials largish, but in far tails.
-
-        typedef typename Policy::discrete_quantile_type discrete_quantile_type;
-        boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-        return detail::inverse_discrete_quantile(
-            dist,
-            comp ? q : p,
-            comp,
-            guess,
-            factor,
-            RealType(1),
-            discrete_quantile_type(),
-            max_iter);
-      } // quantile
-
-     }
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class binomial_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      binomial_distribution(RealType n = 1, RealType p = 0.5) : m_n(n), m_p(p)
-      { // Default n = 1 is the Bernoulli distribution
-        // with equal probability of 'heads' or 'tails.
-         RealType r;
-         binomial_detail::check_dist(
-            "boost::math::binomial_distribution<%1%>::binomial_distribution",
-            m_n,
-            m_p,
-            &r, Policy());
-      } // binomial_distribution constructor.
-
-      RealType success_fraction() const
-      { // Probability.
-        return m_p;
-      }
-      RealType trials() const
-      { // Total number of trials.
-        return m_n;
-      }
-
-      enum interval_type{
-         clopper_pearson_exact_interval,
-         jeffreys_prior_interval
-      };
-
-      //
-      // Estimation of the success fraction parameter.
-      // The best estimate is actually simply successes/trials,
-      // these functions are used
-      // to obtain confidence intervals for the success fraction.
-      //
-      static RealType find_lower_bound_on_p(
-         RealType trials,
-         RealType successes,
-         RealType probability,
-         interval_type t = clopper_pearson_exact_interval)
-      {
-        static const char* function = "boost::math::binomial_distribution<%1%>::find_lower_bound_on_p";
-        // Error checks:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           function, trials, RealType(0), successes, &result, Policy())
-            &&
-           binomial_detail::check_dist_and_prob(
-           function, trials, RealType(0), probability, &result, Policy()))
-        { return result; }
-
-        if(successes == 0)
-           return 0;
-
-        // NOTE!!! The Clopper Pearson formula uses "successes" not
-        // "successes+1" as usual to get the lower bound,
-        // see http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
-        return (t == clopper_pearson_exact_interval) ? ibeta_inv(successes, trials - successes + 1, probability, static_cast<RealType*>(0), Policy())
-           : ibeta_inv(successes + 0.5f, trials - successes + 0.5f, probability, static_cast<RealType*>(0), Policy());
-      }
-      static RealType find_upper_bound_on_p(
-         RealType trials,
-         RealType successes,
-         RealType probability,
-         interval_type t = clopper_pearson_exact_interval)
-      {
-        static const char* function = "boost::math::binomial_distribution<%1%>::find_upper_bound_on_p";
-        // Error checks:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           function, trials, RealType(0), successes, &result, Policy())
-            &&
-           binomial_detail::check_dist_and_prob(
-           function, trials, RealType(0), probability, &result, Policy()))
-        { return result; }
-
-        if(trials == successes)
-           return 1;
-
-        return (t == clopper_pearson_exact_interval) ? ibetac_inv(successes + 1, trials - successes, probability, static_cast<RealType*>(0), Policy())
-           : ibetac_inv(successes + 0.5f, trials - successes + 0.5f, probability, static_cast<RealType*>(0), Policy());
-      }
-      // Estimate number of trials parameter:
-      //
-      // "How many trials do I need to be P% sure of seeing k events?"
-      //    or
-      // "How many trials can I have to be P% sure of seeing fewer than k events?"
-      //
-      static RealType find_minimum_number_of_trials(
-         RealType k,     // number of events
-         RealType p,     // success fraction
-         RealType alpha) // risk level
-      {
-        static const char* function = "boost::math::binomial_distribution<%1%>::find_minimum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           function, k, p, k, &result, Policy())
-            &&
-           binomial_detail::check_dist_and_prob(
-           function, k, p, alpha, &result, Policy()))
-        { return result; }
-
-        result = ibetac_invb(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      }
-
-      static RealType find_maximum_number_of_trials(
-         RealType k,     // number of events
-         RealType p,     // success fraction
-         RealType alpha) // risk level
-      {
-        static const char* function = "boost::math::binomial_distribution<%1%>::find_maximum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           function, k, p, k, &result, Policy())
-            &&
-           binomial_detail::check_dist_and_prob(
-           function, k, p, alpha, &result, Policy()))
-        { return result; }
-
-        result = ibeta_invb(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      }
-
-    private:
-        RealType m_n; // Not sure if this shouldn't be an int?
-        RealType m_p; // success_fraction
-      }; // template <class RealType, class Policy> class binomial_distribution
-
-      typedef binomial_distribution<> binomial;
-      // typedef binomial_distribution<double> binomial;
-      // IS now included since no longer a name clash with function binomial.
-      //typedef binomial_distribution<double> binomial; // Reserved name of type double.
-
-      template <class RealType, class Policy>
-      const std::pair<RealType, RealType> range(const binomial_distribution<RealType, Policy>& dist)
-      { // Range of permissible values for random variable k.
-        using boost::math::tools::max_value;
-        return std::pair<RealType, RealType>(static_cast<RealType>(0), dist.trials());
-      }
-
-      template <class RealType, class Policy>
-      const std::pair<RealType, RealType> support(const binomial_distribution<RealType, Policy>& dist)
-      { // Range of supported values for random variable k.
-        // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-        return std::pair<RealType, RealType>(static_cast<RealType>(0),  dist.trials());
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mean(const binomial_distribution<RealType, Policy>& dist)
-      { // Mean of Binomial distribution = np.
-        return  dist.trials() * dist.success_fraction();
-      } // mean
-
-      template <class RealType, class Policy>
-      inline RealType variance(const binomial_distribution<RealType, Policy>& dist)
-      { // Variance of Binomial distribution = np(1-p).
-        return  dist.trials() * dist.success_fraction() * (1 - dist.success_fraction());
-      } // variance
-
-      template <class RealType, class Policy>
-      RealType pdf(const binomial_distribution<RealType, Policy>& dist, const RealType& k)
-      { // Probability Density/Mass Function.
-        BOOST_FPU_EXCEPTION_GUARD
-
-        BOOST_MATH_STD_USING // for ADL of std functions
-
-        RealType n = dist.trials();
-
-        // Error check:
-        RealType result = 0; // initialization silences some compiler warnings
-        if(false == binomial_detail::check_dist_and_k(
-           "boost::math::pdf(binomial_distribution<%1%> const&, %1%)",
-           n,
-           dist.success_fraction(),
-           k,
-           &result, Policy()))
-        {
-           return result;
-        }
-
-        // Special cases of success_fraction, regardless of k successes and regardless of n trials.
-        if (dist.success_fraction() == 0)
-        {  // probability of zero successes is 1:
-           return static_cast<RealType>(k == 0 ? 1 : 0);
-        }
-        if (dist.success_fraction() == 1)
-        {  // probability of n successes is 1:
-           return static_cast<RealType>(k == n ? 1 : 0);
-        }
-        // k argument may be integral, signed, or unsigned, or floating point.
-        // If necessary, it has already been promoted from an integral type.
-        if (n == 0)
-        {
-          return 1; // Probability = 1 = certainty.
-        }
-        if (k == 0)
-        { // binomial coeffic (n 0) = 1,
-          // n ^ 0 = 1
-          return pow(1 - dist.success_fraction(), n);
-        }
-        if (k == n)
-        { // binomial coeffic (n n) = 1,
-          // n ^ 0 = 1
-          return pow(dist.success_fraction(), k);  // * pow((1 - dist.success_fraction()), (n - k)) = 1
-        }
-
-        // Probability of getting exactly k successes
-        // if C(n, k) is the binomial coefficient then:
-        //
-        // f(k; n,p) = C(n, k) * p^k * (1-p)^(n-k)
-        //           = (n!/(k!(n-k)!)) * p^k * (1-p)^(n-k)
-        //           = (tgamma(n+1) / (tgamma(k+1)*tgamma(n-k+1))) * p^k * (1-p)^(n-k)
-        //           = p^k (1-p)^(n-k) / (beta(k+1, n-k+1) * (n+1))
-        //           = ibeta_derivative(k+1, n-k+1, p) / (n+1)
-        //
-        using boost::math::ibeta_derivative; // a, b, x
-        return ibeta_derivative(k+1, n-k+1, dist.success_fraction(), Policy()) / (n+1);
-
-      } // pdf
-
-      template <class RealType, class Policy>
-      inline RealType cdf(const binomial_distribution<RealType, Policy>& dist, const RealType& k)
-      { // Cumulative Distribution Function Binomial.
-        // The random variate k is the number of successes in n trials.
-        // k argument may be integral, signed, or unsigned, or floating point.
-        // If necessary, it has already been promoted from an integral type.
-
-        // Returns the sum of the terms 0 through k of the Binomial Probability Density/Mass:
-        //
-        //   i=k
-        //   --  ( n )   i      n-i
-        //   >   |   |  p  (1-p)
-        //   --  ( i )
-        //   i=0
-
-        // The terms are not summed directly instead
-        // the incomplete beta integral is employed,
-        // according to the formula:
-        // P = I[1-p]( n-k, k+1).
-        //   = 1 - I[p](k + 1, n - k)
-
-        BOOST_MATH_STD_USING // for ADL of std functions
-
-        RealType n = dist.trials();
-        RealType p = dist.success_fraction();
-
-        // Error check:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           "boost::math::cdf(binomial_distribution<%1%> const&, %1%)",
-           n,
-           p,
-           k,
-           &result, Policy()))
-        {
-           return result;
-        }
-        if (k == n)
-        {
-          return 1;
-        }
-
-        // Special cases, regardless of k.
-        if (p == 0)
-        {  // This need explanation:
-           // the pdf is zero for all cases except when k == 0.
-           // For zero p the probability of zero successes is one.
-           // Therefore the cdf is always 1:
-           // the probability of k or *fewer* successes is always 1
-           // if there are never any successes!
-           return 1;
-        }
-        if (p == 1)
-        { // This is correct but needs explanation:
-          // when k = 1
-          // all the cdf and pdf values are zero *except* when k == n,
-          // and that case has been handled above already.
-          return 0;
-        }
-        //
-        // P = I[1-p](n - k, k + 1)
-        //   = 1 - I[p](k + 1, n - k)
-        // Use of ibetac here prevents cancellation errors in calculating
-        // 1-p if p is very small, perhaps smaller than machine epsilon.
-        //
-        // Note that we do not use a finite sum here, since the incomplete
-        // beta uses a finite sum internally for integer arguments, so
-        // we'll just let it take care of the necessary logic.
-        //
-        return ibetac(k + 1, n - k, p, Policy());
-      } // binomial cdf
-
-      template <class RealType, class Policy>
-      inline RealType cdf(const complemented2_type<binomial_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function Binomial.
-        // The random variate k is the number of successes in n trials.
-        // k argument may be integral, signed, or unsigned, or floating point.
-        // If necessary, it has already been promoted from an integral type.
-
-        // Returns the sum of the terms k+1 through n of the Binomial Probability Density/Mass:
-        //
-        //   i=n
-        //   --  ( n )   i      n-i
-        //   >   |   |  p  (1-p)
-        //   --  ( i )
-        //   i=k+1
-
-        // The terms are not summed directly instead
-        // the incomplete beta integral is employed,
-        // according to the formula:
-        // Q = 1 -I[1-p]( n-k, k+1).
-        //   = I[p](k + 1, n - k)
-
-        BOOST_MATH_STD_USING // for ADL of std functions
-
-        RealType const& k = c.param;
-        binomial_distribution<RealType, Policy> const& dist = c.dist;
-        RealType n = dist.trials();
-        RealType p = dist.success_fraction();
-
-        // Error checks:
-        RealType result = 0;
-        if(false == binomial_detail::check_dist_and_k(
-           "boost::math::cdf(binomial_distribution<%1%> const&, %1%)",
-           n,
-           p,
-           k,
-           &result, Policy()))
-        {
-           return result;
-        }
-
-        if (k == n)
-        { // Probability of greater than n successes is necessarily zero:
-          return 0;
-        }
-
-        // Special cases, regardless of k.
-        if (p == 0)
-        {
-           // This need explanation: the pdf is zero for all
-           // cases except when k == 0.  For zero p the probability
-           // of zero successes is one.  Therefore the cdf is always
-           // 1: the probability of *more than* k successes is always 0
-           // if there are never any successes!
-           return 0;
-        }
-        if (p == 1)
-        {
-          // This needs explanation, when p = 1
-          // we always have n successes, so the probability
-          // of more than k successes is 1 as long as k < n.
-          // The k == n case has already been handled above.
-          return 1;
-        }
-        //
-        // Calculate cdf binomial using the incomplete beta function.
-        // Q = 1 -I[1-p](n - k, k + 1)
-        //   = I[p](k + 1, n - k)
-        // Use of ibeta here prevents cancellation errors in calculating
-        // 1-p if p is very small, perhaps smaller than machine epsilon.
-        //
-        // Note that we do not use a finite sum here, since the incomplete
-        // beta uses a finite sum internally for integer arguments, so
-        // we'll just let it take care of the necessary logic.
-        //
-        return ibeta(k + 1, n - k, p, Policy());
-      } // binomial cdf
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const binomial_distribution<RealType, Policy>& dist, const RealType& p)
-      {
-         return binomial_detail::quantile_imp(dist, p, RealType(1-p), false);
-      } // quantile
-
-      template <class RealType, class Policy>
-      RealType quantile(const complemented2_type<binomial_distribution<RealType, Policy>, RealType>& c)
-      {
-         return binomial_detail::quantile_imp(c.dist, RealType(1-c.param), c.param, true);
-      } // quantile
-
-      template <class RealType, class Policy>
-      inline RealType mode(const binomial_distribution<RealType, Policy>& dist)
-      {
-         BOOST_MATH_STD_USING // ADL of std functions.
-         RealType p = dist.success_fraction();
-         RealType n = dist.trials();
-         return floor(p * (n + 1));
-      }
-
-      template <class RealType, class Policy>
-      inline RealType median(const binomial_distribution<RealType, Policy>& dist)
-      { // Bounds for the median of the negative binomial distribution
-        // VAN DE VEN R. ; WEBER N. C. ;
-        // Univ. Sydney, school mathematics statistics, Sydney N.S.W. 2006, AUSTRALIE
-        // Metrika  (Metrika)  ISSN 0026-1335   CODEN MTRKA8
-        // 1993, vol. 40, no3-4, pp. 185-189 (4 ref.)
-
-        // Bounds for median and 50 percetage point of binomial and negative binomial distribution
-        // Metrika, ISSN   0026-1335 (Print) 1435-926X (Online)
-        // Volume 41, Number 1 / December, 1994, DOI   10.1007/BF01895303
-         BOOST_MATH_STD_USING // ADL of std functions.
-         RealType p = dist.success_fraction();
-         RealType n = dist.trials();
-         // Wikipedia says one of floor(np) -1, floor (np), floor(np) +1
-         return floor(p * n); // Chose the middle value.
-      }
-
-      template <class RealType, class Policy>
-      inline RealType skewness(const binomial_distribution<RealType, Policy>& dist)
-      {
-         BOOST_MATH_STD_USING // ADL of std functions.
-         RealType p = dist.success_fraction();
-         RealType n = dist.trials();
-         return (1 - 2 * p) / sqrt(n * p * (1 - p));
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis(const binomial_distribution<RealType, Policy>& dist)
-      {
-         RealType p = dist.success_fraction();
-         RealType n = dist.trials();
-         return 3 - 6 / n + 1 / (n * p * (1 - p));
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis_excess(const binomial_distribution<RealType, Policy>& dist)
-      {
-         RealType p = dist.success_fraction();
-         RealType q = 1 - p;
-         RealType n = dist.trials();
-         return (1 - 6 * p * q) / (n * p * q);
-      }
-
-    } // namespace math
-  } // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_BINOMIAL_HPP
-
-
--- a/any/include/boost/math/distributions/cauchy.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,362 +0,0 @@
-// Copyright John Maddock 2006, 2007.
-// Copyright Paul A. Bristow 2007.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_CAUCHY_HPP
-#define BOOST_STATS_CAUCHY_HPP
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4127) // conditional expression is constant
-#endif
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-
-template <class RealType, class Policy>
-class cauchy_distribution;
-
-namespace detail
-{
-
-template <class RealType, class Policy>
-RealType cdf_imp(const cauchy_distribution<RealType, Policy>& dist, const RealType& x, bool complement)
-{
-   //
-   // This calculates the cdf of the Cauchy distribution and/or its complement.
-   //
-   // The usual formula for the Cauchy cdf is:
-   //
-   // cdf = 0.5 + atan(x)/pi
-   //
-   // But that suffers from cancellation error as x -> -INF.
-   //
-   // Recall that for x < 0:
-   //
-   // atan(x) = -pi/2 - atan(1/x)
-   //
-   // Substituting into the above we get:
-   //
-   // CDF = -atan(1/x)  ; x < 0
-   //
-   // So the proceedure is to calculate the cdf for -fabs(x)
-   // using the above formula, and then subtract from 1 when required
-   // to get the result.
-   //
-   BOOST_MATH_STD_USING // for ADL of std functions
-   static const char* function = "boost::math::cdf(cauchy<%1%>&, %1%)";
-   RealType result = 0;
-   RealType location = dist.location();
-   RealType scale = dist.scale();
-   if(false == detail::check_location(function, location, &result, Policy()))
-   {
-     return result;
-   }
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-      return result;
-   }
-   if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-   { // cdf +infinity is unity.
-     return static_cast<RealType>((complement) ? 0 : 1);
-   }
-   if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-   { // cdf -infinity is zero.
-     return static_cast<RealType>((complement) ? 1 : 0);
-   }
-   if(false == detail::check_x(function, x, &result, Policy()))
-   { // Catches x == NaN
-      return result;
-   }
-   RealType mx = -fabs((x - location) / scale); // scale is > 0
-   if(mx > -tools::epsilon<RealType>() / 8)
-   {  // special case first: x extremely close to location.
-      return 0.5;
-   }
-   result = -atan(1 / mx) / constants::pi<RealType>();
-   return (((x > location) != complement) ? 1 - result : result);
-} // cdf
-
-template <class RealType, class Policy>
-RealType quantile_imp(
-      const cauchy_distribution<RealType, Policy>& dist,
-      const RealType& p,
-      bool complement)
-{
-   // This routine implements the quantile for the Cauchy distribution,
-   // the value p may be the probability, or its complement if complement=true.
-   //
-   // The procedure first performs argument reduction on p to avoid error
-   // when calculating the tangent, then calulates the distance from the
-   // mid-point of the distribution.  This is either added or subtracted
-   // from the location parameter depending on whether `complement` is true.
-   //
-   static const char* function = "boost::math::quantile(cauchy<%1%>&, %1%)";
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   RealType result = 0;
-   RealType location = dist.location();
-   RealType scale = dist.scale();
-   if(false == detail::check_location(function, location, &result, Policy()))
-   {
-     return result;
-   }
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_probability(function, p, &result, Policy()))
-   {
-      return result;
-   }
-   // Special cases:
-   if(p == 1)
-   {
-      return (complement ? -1 : 1) * policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   if(p == 0)
-   {
-      return (complement ? 1 : -1) * policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-
-   RealType P = p - floor(p);   // argument reduction of p:
-   if(P > 0.5)
-   {
-      P = P - 1;
-   }
-   if(P == 0.5)   // special case:
-   {
-      return location;
-   }
-   result = -scale / tan(constants::pi<RealType>() * P);
-   return complement ? RealType(location - result) : RealType(location + result);
-} // quantile
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class cauchy_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   cauchy_distribution(RealType l_location = 0, RealType l_scale = 1)
-      : m_a(l_location), m_hg(l_scale)
-   {
-    static const char* function = "boost::math::cauchy_distribution<%1%>::cauchy_distribution";
-     RealType result;
-     detail::check_location(function, l_location, &result, Policy());
-     detail::check_scale(function, l_scale, &result, Policy());
-   } // cauchy_distribution
-
-   RealType location()const
-   {
-      return m_a;
-   }
-   RealType scale()const
-   {
-      return m_hg;
-   }
-
-private:
-   RealType m_a;    // The location, this is the median of the distribution.
-   RealType m_hg;   // The scale )or shape), this is the half width at half height.
-};
-
-typedef cauchy_distribution<double> cauchy;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const cauchy_distribution<RealType, Policy>&)
-{ // Range of permissible values for random variable x.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max.
-  }
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const cauchy_distribution<RealType, Policy>& )
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-     using boost::math::tools::max_value;
-     return std::pair<RealType, RealType>(-tools::max_value<RealType>(), max_value<RealType>()); // - to + max.
-  }
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const cauchy_distribution<RealType, Policy>& dist, const RealType& x)
-{  
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(cauchy<%1%>&, %1%)";
-   RealType result = 0;
-   RealType location = dist.location();
-   RealType scale = dist.scale();
-   if(false == detail::check_scale("boost::math::pdf(cauchy<%1%>&, %1%)", scale, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_location("boost::math::pdf(cauchy<%1%>&, %1%)", location, &result, Policy()))
-   {
-      return result;
-   }
-   if((boost::math::isinf)(x))
-   {
-     return 0; // pdf + and - infinity is zero.
-   }
-   // These produce MSVC 4127 warnings, so the above used instead.
-   //if(std::numeric_limits<RealType>::has_infinity && abs(x) == std::numeric_limits<RealType>::infinity())
-   //{ // pdf + and - infinity is zero.
-   //  return 0;
-   //}
-
-   if(false == detail::check_x(function, x, &result, Policy()))
-   { // Catches x = NaN
-      return result;
-   }
-
-   RealType xs = (x - location) / scale;
-   result = 1 / (constants::pi<RealType>() * scale * (1 + xs * xs));
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const cauchy_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   return detail::cdf_imp(dist, x, false);
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const cauchy_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   return detail::quantile_imp(dist, p, false);
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<cauchy_distribution<RealType, Policy>, RealType>& c)
-{
-   return detail::cdf_imp(c.dist, c.param, true);
-} //  cdf complement
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<cauchy_distribution<RealType, Policy>, RealType>& c)
-{
-   return detail::quantile_imp(c.dist, c.param, true);
-} // quantile complement
-
-template <class RealType, class Policy>
-inline RealType mean(const cauchy_distribution<RealType, Policy>&)
-{  // There is no mean:
-   typedef typename Policy::assert_undefined_type assert_type;
-   BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-   return policies::raise_domain_error<RealType>(
-      "boost::math::mean(cauchy<%1%>&)",
-      "The Cauchy distribution does not have a mean: "
-      "the only possible return value is %1%.",
-      std::numeric_limits<RealType>::quiet_NaN(), Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType variance(const cauchy_distribution<RealType, Policy>& /*dist*/)
-{
-   // There is no variance:
-   typedef typename Policy::assert_undefined_type assert_type;
-   BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-   return policies::raise_domain_error<RealType>(
-      "boost::math::variance(cauchy<%1%>&)",
-      "The Cauchy distribution does not have a variance: "
-      "the only possible return value is %1%.",
-      std::numeric_limits<RealType>::quiet_NaN(), Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const cauchy_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-
-template <class RealType, class Policy>
-inline RealType median(const cauchy_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-template <class RealType, class Policy>
-inline RealType skewness(const cauchy_distribution<RealType, Policy>& /*dist*/)
-{
-   // There is no skewness:
-   typedef typename Policy::assert_undefined_type assert_type;
-   BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-   return policies::raise_domain_error<RealType>(
-      "boost::math::skewness(cauchy<%1%>&)",
-      "The Cauchy distribution does not have a skewness: "
-      "the only possible return value is %1%.",
-      std::numeric_limits<RealType>::quiet_NaN(), Policy()); // infinity?
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const cauchy_distribution<RealType, Policy>& /*dist*/)
-{
-   // There is no kurtosis:
-   typedef typename Policy::assert_undefined_type assert_type;
-   BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-   return policies::raise_domain_error<RealType>(
-      "boost::math::kurtosis(cauchy<%1%>&)",
-      "The Cauchy distribution does not have a kurtosis: "
-      "the only possible return value is %1%.",
-      std::numeric_limits<RealType>::quiet_NaN(), Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const cauchy_distribution<RealType, Policy>& /*dist*/)
-{
-   // There is no kurtosis excess:
-   typedef typename Policy::assert_undefined_type assert_type;
-   BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-   return policies::raise_domain_error<RealType>(
-      "boost::math::kurtosis_excess(cauchy<%1%>&)",
-      "The Cauchy distribution does not have a kurtosis: "
-      "the only possible return value is %1%.",
-      std::numeric_limits<RealType>::quiet_NaN(), Policy());
-}
-
-} // namespace math
-} // namespace boost
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_CAUCHY_HPP
--- a/any/include/boost/math/distributions/chi_squared.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,364 +0,0 @@
-// Copyright John Maddock 2006, 2007.
-// Copyright Paul A. Bristow 2008, 2010.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_CHI_SQUARED_HPP
-#define BOOST_MATH_DISTRIBUTIONS_CHI_SQUARED_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp> // for incomplete beta.
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-template <class RealType = double, class Policy = policies::policy<> >
-class chi_squared_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   chi_squared_distribution(RealType i) : m_df(i)
-   {
-      RealType result;
-      detail::check_df(
-         "boost::math::chi_squared_distribution<%1%>::chi_squared_distribution", m_df, &result, Policy());
-   } // chi_squared_distribution
-
-   RealType degrees_of_freedom()const
-   {
-      return m_df;
-   }
-
-   // Parameter estimation:
-   static RealType find_degrees_of_freedom(
-      RealType difference_from_variance,
-      RealType alpha,
-      RealType beta,
-      RealType variance,
-      RealType hint = 100);
-
-private:
-   //
-   // Data member:
-   //
-   RealType m_df; // degrees of freedom is a positive real number.
-}; // class chi_squared_distribution
-
-typedef chi_squared_distribution<double> chi_squared;
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const chi_squared_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-    return std::pair<RealType, RealType>(static_cast<RealType>(0), std::numeric_limits<RealType>::infinity()); // 0 to + infinity.
-  }
-  else
-  {
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // 0 to + max.
-  }
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const chi_squared_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), tools::max_value<RealType>()); // 0 to + infinity.
-}
-
-template <class RealType, class Policy>
-RealType pdf(const chi_squared_distribution<RealType, Policy>& dist, const RealType& chi_square)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-   RealType degrees_of_freedom = dist.degrees_of_freedom();
-   // Error check:
-   RealType error_result;
-
-   static const char* function = "boost::math::pdf(const chi_squared_distribution<%1%>&, %1%)";
-
-   if(false == detail::check_df(
-         function, degrees_of_freedom, &error_result, Policy()))
-      return error_result;
-
-   if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
-   }
-
-   if(chi_square == 0)
-   {
-      // Handle special cases:
-      if(degrees_of_freedom < 2)
-      {
-         return policies::raise_overflow_error<RealType>(
-            function, 0, Policy());
-      }
-      else if(degrees_of_freedom == 2)
-      {
-         return 0.5f;
-      }
-      else
-      {
-         return 0;
-      }
-   }
-
-   return gamma_p_derivative(degrees_of_freedom / 2, chi_square / 2, Policy()) / 2;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const chi_squared_distribution<RealType, Policy>& dist, const RealType& chi_square)
-{
-   RealType degrees_of_freedom = dist.degrees_of_freedom();
-   // Error check:
-   RealType error_result;
-   static const char* function = "boost::math::cdf(const chi_squared_distribution<%1%>&, %1%)";
-
-   if(false == detail::check_df(
-         function, degrees_of_freedom, &error_result, Policy()))
-      return error_result;
-
-   if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
-   }
-
-   return boost::math::gamma_p(degrees_of_freedom / 2, chi_square / 2, Policy());
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const chi_squared_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   RealType degrees_of_freedom = dist.degrees_of_freedom();
-   static const char* function = "boost::math::quantile(const chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false ==
-     (
-       detail::check_df(function, degrees_of_freedom, &error_result, Policy())
-       && detail::check_probability(function, p, &error_result, Policy()))
-     )
-     return error_result;
-
-   return 2 * boost::math::gamma_p_inv(degrees_of_freedom / 2, p, Policy());
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<chi_squared_distribution<RealType, Policy>, RealType>& c)
-{
-   RealType const& degrees_of_freedom = c.dist.degrees_of_freedom();
-   RealType const& chi_square = c.param;
-   static const char* function = "boost::math::cdf(const chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false == detail::check_df(
-         function, degrees_of_freedom, &error_result, Policy()))
-      return error_result;
-
-   if((chi_square < 0) || !(boost::math::isfinite)(chi_square))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Chi Square parameter was %1%, but must be > 0 !", chi_square, Policy());
-   }
-
-   return boost::math::gamma_q(degrees_of_freedom / 2, chi_square / 2, Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<chi_squared_distribution<RealType, Policy>, RealType>& c)
-{
-   RealType const& degrees_of_freedom = c.dist.degrees_of_freedom();
-   RealType const& q = c.param;
-   static const char* function = "boost::math::quantile(const chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false == (
-     detail::check_df(function, degrees_of_freedom, &error_result, Policy())
-     && detail::check_probability(function, q, &error_result, Policy()))
-     )
-    return error_result;
-
-   return 2 * boost::math::gamma_q_inv(degrees_of_freedom / 2, q, Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const chi_squared_distribution<RealType, Policy>& dist)
-{ // Mean of Chi-Squared distribution = v.
-  return dist.degrees_of_freedom();
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const chi_squared_distribution<RealType, Policy>& dist)
-{ // Variance of Chi-Squared distribution = 2v.
-  return 2 * dist.degrees_of_freedom();
-} // variance
-
-template <class RealType, class Policy>
-inline RealType mode(const chi_squared_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   static const char* function = "boost::math::mode(const chi_squared_distribution<%1%>&)";
-   // Most sources only define mode for df >= 2,
-   // but for 0 <= df <= 2, the pdf maximum actually occurs at random variate = 0;
-   // So one could extend the definition of mode thus:
-   //if(df < 0)
-   //{
-   //   return policies::raise_domain_error<RealType>(
-   //      function,
-   //      "Chi-Squared distribution only has a mode for degrees of freedom >= 0, but got degrees of freedom = %1%.",
-   //      df, Policy());
-   //}
-   //return (df <= 2) ? 0 : df - 2;
-
-   if(df < 2)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "Chi-Squared distribution only has a mode for degrees of freedom >= 2, but got degrees of freedom = %1%.",
-         df, Policy());
-   return df - 2;
-}
-
-//template <class RealType, class Policy>
-//inline RealType median(const chi_squared_distribution<RealType, Policy>& dist)
-//{ // Median is given by Quantile[dist, 1/2]
-//   RealType df = dist.degrees_of_freedom();
-//   if(df <= 1)
-//      return tools::domain_error<RealType>(
-//         BOOST_CURRENT_FUNCTION,
-//         "The Chi-Squared distribution only has a mode for degrees of freedom >= 2, but got degrees of freedom = %1%.",
-//         df);
-//   return df - RealType(2)/3;
-//}
-// Now implemented via quantile(half) in derived accessors.
-
-template <class RealType, class Policy>
-inline RealType skewness(const chi_squared_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING // For ADL
-   RealType df = dist.degrees_of_freedom();
-   return sqrt (8 / df);  // == 2 * sqrt(2 / df);
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const chi_squared_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   return 3 + 12 / df;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const chi_squared_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   return 12 / df;
-}
-
-//
-// Parameter estimation comes last:
-//
-namespace detail
-{
-
-template <class RealType, class Policy>
-struct df_estimator
-{
-   df_estimator(RealType a, RealType b, RealType variance, RealType delta)
-      : alpha(a), beta(b), ratio(delta/variance)
-   { // Constructor
-   }
-
-   RealType operator()(const RealType& df)
-   {
-      if(df <= tools::min_value<RealType>())
-         return 1;
-      chi_squared_distribution<RealType, Policy> cs(df);
-
-      RealType result;
-      if(ratio > 0)
-      {
-         RealType r = 1 + ratio;
-         result = cdf(cs, quantile(complement(cs, alpha)) / r) - beta;
-      }
-      else
-      { // ratio <= 0
-         RealType r = 1 + ratio;
-         result = cdf(complement(cs, quantile(cs, alpha) / r)) - beta;
-      }
-      return result;
-   }
-private:
-   RealType alpha;
-   RealType beta;
-   RealType ratio; // Difference from variance / variance, so fractional.
-};
-
-} // namespace detail
-
-template <class RealType, class Policy>
-RealType chi_squared_distribution<RealType, Policy>::find_degrees_of_freedom(
-   RealType difference_from_variance,
-   RealType alpha,
-   RealType beta,
-   RealType variance,
-   RealType hint)
-{
-   static const char* function = "boost::math::chi_squared_distribution<%1%>::find_degrees_of_freedom(%1%,%1%,%1%,%1%,%1%)";
-   // Check for domain errors:
-   RealType error_result;
-   if(false ==
-     detail::check_probability(function, alpha, &error_result, Policy())
-     && detail::check_probability(function, beta, &error_result, Policy()))
-   { // Either probability is outside 0 to 1.
-      return error_result;
-   }
-
-   if(hint <= 0)
-   { // No hint given, so guess df = 1.
-      hint = 1;
-   }
-
-   detail::df_estimator<RealType, Policy> f(alpha, beta, variance, difference_from_variance);
-   tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-   boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-   std::pair<RealType, RealType> r =
-     tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, Policy());
-   RealType result = r.first + (r.second - r.first) / 2;
-   if(max_iter >= policies::get_max_root_iterations<Policy>())
-   {
-      policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-         " either there is no answer to how many degrees of freedom are required"
-         " or the answer is infinite.  Current best guess is %1%", result, Policy());
-   }
-   return result;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_CHI_SQUARED_HPP
--- a/any/include/boost/math/distributions/complement.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-//  (C) Copyright John Maddock 2006.
-//  (C) Copyright Paul A. Bristow 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_COMPLEMENT_HPP
-#define BOOST_STATS_COMPLEMENT_HPP
-
-//
-// This code really defines our own tuple type.
-// It would be nice to reuse boost::math::tuple
-// while retaining our own type safety, but it's
-// not clear if that's possible.  In any case this
-// code is *very* lightweight.
-//
-namespace boost{ namespace math{
-
-template <class Dist, class RealType>
-struct complemented2_type
-{
-   complemented2_type(
-      const Dist& d, 
-      const RealType& p1)
-      : dist(d), 
-        param(p1) {}
-
-   const Dist& dist;
-   const RealType& param;
-
-private:
-   complemented2_type& operator=(const complemented2_type&);
-};
-
-template <class Dist, class RealType1, class RealType2>
-struct complemented3_type
-{
-   complemented3_type(
-      const Dist& d, 
-      const RealType1& p1,
-      const RealType2& p2)
-      : dist(d), 
-        param1(p1), 
-        param2(p2) {}
-
-   const Dist& dist;
-   const RealType1& param1;
-   const RealType2& param2;
-private:
-   complemented3_type& operator=(const complemented3_type&);
-};
-
-template <class Dist, class RealType1, class RealType2, class RealType3>
-struct complemented4_type
-{
-   complemented4_type(
-      const Dist& d, 
-      const RealType1& p1,
-      const RealType2& p2,
-      const RealType3& p3)
-      : dist(d), 
-        param1(p1), 
-        param2(p2), 
-        param3(p3) {}
-
-   const Dist& dist;
-   const RealType1& param1;
-   const RealType2& param2;
-   const RealType3& param3;
-private:
-   complemented4_type& operator=(const complemented4_type&);
-};
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
-struct complemented5_type
-{
-   complemented5_type(
-      const Dist& d, 
-      const RealType1& p1,
-      const RealType2& p2,
-      const RealType3& p3,
-      const RealType4& p4)
-      : dist(d), 
-        param1(p1), 
-        param2(p2), 
-        param3(p3), 
-        param4(p4) {}
-
-   const Dist& dist;
-   const RealType1& param1;
-   const RealType2& param2;
-   const RealType3& param3;
-   const RealType4& param4;
-private:
-   complemented5_type& operator=(const complemented5_type&);
-};
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
-struct complemented6_type
-{
-   complemented6_type(
-      const Dist& d, 
-      const RealType1& p1,
-      const RealType2& p2,
-      const RealType3& p3,
-      const RealType4& p4,
-      const RealType5& p5)
-      : dist(d), 
-        param1(p1), 
-        param2(p2), 
-        param3(p3), 
-        param4(p4), 
-        param5(p5) {}
-
-   const Dist& dist;
-   const RealType1& param1;
-   const RealType2& param2;
-   const RealType3& param3;
-   const RealType4& param4;
-   const RealType5& param5;
-private:
-   complemented6_type& operator=(const complemented6_type&);
-};
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
-struct complemented7_type
-{
-   complemented7_type(
-      const Dist& d, 
-      const RealType1& p1,
-      const RealType2& p2,
-      const RealType3& p3,
-      const RealType4& p4,
-      const RealType5& p5,
-      const RealType6& p6)
-      : dist(d), 
-        param1(p1), 
-        param2(p2), 
-        param3(p3), 
-        param4(p4), 
-        param5(p5), 
-        param6(p6) {}
-
-   const Dist& dist;
-   const RealType1& param1;
-   const RealType2& param2;
-   const RealType3& param3;
-   const RealType4& param4;
-   const RealType5& param5;
-   const RealType6& param6;
-private:
-   complemented7_type& operator=(const complemented7_type&);
-};
-
-template <class Dist, class RealType>
-inline complemented2_type<Dist, RealType> complement(const Dist& d, const RealType& r)
-{
-   return complemented2_type<Dist, RealType>(d, r);
-}
-
-template <class Dist, class RealType1, class RealType2>
-inline complemented3_type<Dist, RealType1, RealType2> complement(const Dist& d, const RealType1& r1, const RealType2& r2)
-{
-   return complemented3_type<Dist, RealType1, RealType2>(d, r1, r2);
-}
-
-template <class Dist, class RealType1, class RealType2, class RealType3>
-inline complemented4_type<Dist, RealType1, RealType2, RealType3> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3)
-{
-   return complemented4_type<Dist, RealType1, RealType2, RealType3>(d, r1, r2, r3);
-}
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4>
-inline complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4)
-{
-   return complemented5_type<Dist, RealType1, RealType2, RealType3, RealType4>(d, r1, r2, r3, r4);
-}
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5>
-inline complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5)
-{
-   return complemented6_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5>(d, r1, r2, r3, r4, r5);
-}
-
-template <class Dist, class RealType1, class RealType2, class RealType3, class RealType4, class RealType5, class RealType6>
-inline complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6> complement(const Dist& d, const RealType1& r1, const RealType2& r2, const RealType3& r3, const RealType4& r4, const RealType5& r5, const RealType6& r6)
-{
-   return complemented7_type<Dist, RealType1, RealType2, RealType3, RealType4, RealType5, RealType6>(d, r1, r2, r3, r4, r5, r6);
-}
-
-} // namespace math
-} // namespace boost
-
-#endif // BOOST_STATS_COMPLEMENT_HPP
-
--- a/any/include/boost/math/distributions/detail/common_error_handling.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,223 +0,0 @@
-// Copyright John Maddock 2006, 2007.
-// Copyright Paul A. Bristow 2006, 2007, 2012.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_COMMON_ERROR_HANDLING_HPP
-#define BOOST_MATH_DISTRIBUTIONS_COMMON_ERROR_HANDLING_HPP
-
-#include <boost/math/policies/error_handling.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-// using boost::math::isfinite;
-// using boost::math::isnan;
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
-#endif
-
-namespace boost{ namespace math{ namespace detail
-{
-
-template <class RealType, class Policy>
-inline bool check_probability(const char* function, RealType const& prob, RealType* result, const Policy& pol)
-{
-   if((prob < 0) || (prob > 1) || !(boost::math::isfinite)(prob))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Probability argument is %1%, but must be >= 0 and <= 1 !", prob, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_df(const char* function, RealType const& df, RealType* result, const Policy& pol)
-{ //  df > 0 but NOT +infinity allowed.
-   if((df <= 0) || !(boost::math::isfinite)(df))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Degrees of freedom argument is %1%, but must be > 0 !", df, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_df_gt0_to_inf(const char* function, RealType const& df, RealType* result, const Policy& pol)
-{  // df > 0 or +infinity are allowed.
-   if( (df <= 0) || (boost::math::isnan)(df) )
-   { // is bad df <= 0 or NaN or -infinity.
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Degrees of freedom argument is %1%, but must be > 0 !", df, pol);
-      return false;
-   }
-   return true;
-} // check_df_gt0_to_inf
-
-
-template <class RealType, class Policy>
-inline bool check_scale(
-      const char* function,
-      RealType scale,
-      RealType* result,
-      const Policy& pol)
-{
-   if((scale <= 0) || !(boost::math::isfinite)(scale))
-   { // Assume scale == 0 is NOT valid for any distribution.
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Scale parameter is %1%, but must be > 0 !", scale, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_location(
-      const char* function,
-      RealType location,
-      RealType* result,
-      const Policy& pol)
-{
-   if(!(boost::math::isfinite)(location))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Location parameter is %1%, but must be finite!", location, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_x(
-      const char* function,
-      RealType x,
-      RealType* result,
-      const Policy& pol)
-{
-   // Note that this test catches both infinity and NaN.
-   // Some distributions permit x to be infinite, so these must be tested 1st and return,
-   // leaving this test to catch any NaNs.
-   // See Normal, Logistic, Laplace and Cauchy for example.
-   if(!(boost::math::isfinite)(x))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate x is %1%, but must be finite!", x, pol);
-      return false;
-   }
-   return true;
-} // bool check_x
-
-template <class RealType, class Policy>
-inline bool check_x_not_NaN(
-  const char* function,
-  RealType x,
-  RealType* result,
-  const Policy& pol)
-{
-  // Note that this test catches only NaN.
-  // Some distributions permit x to be infinite, leaving this test to catch any NaNs.
-  // See Normal, Logistic, Laplace and Cauchy for example.
-  if ((boost::math::isnan)(x))
-  {
-    *result = policies::raise_domain_error<RealType>(
-      function,
-      "Random variate x is %1%, but must be finite or + or - infinity!", x, pol);
-    return false;
-  }
-  return true;
-} // bool check_x_not_NaN
-
-template <class RealType, class Policy>
-inline bool check_x_gt0(
-      const char* function,
-      RealType x,
-      RealType* result,
-      const Policy& pol)
-{
-   if(x <= 0)
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate x is %1%, but must be > 0!", x, pol);
-      return false;
-   }
-
-   return true;
-   // Note that this test catches both infinity and NaN.
-   // Some special cases permit x to be infinite, so these must be tested 1st,
-   // leaving this test to catch any NaNs.  See Normal and cauchy for example.
-} // bool check_x_gt0
-
-template <class RealType, class Policy>
-inline bool check_positive_x(
-      const char* function,
-      RealType x,
-      RealType* result,
-      const Policy& pol)
-{
-   if(!(boost::math::isfinite)(x) || (x < 0))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate x is %1%, but must be finite and >= 0!", x, pol);
-      return false;
-   }
-   return true;
-   // Note that this test catches both infinity and NaN.
-   // Some special cases permit x to be infinite, so these must be tested 1st,
-   // leaving this test to catch any NaNs.  see Normal and cauchy for example.
-}
-
-template <class RealType, class Policy>
-inline bool check_non_centrality(
-      const char* function,
-      RealType ncp,
-      RealType* result,
-      const Policy& pol)
-{
-   if((ncp < 0) || !(boost::math::isfinite)(ncp))
-   { // Assume scale == 0 is NOT valid for any distribution.
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Non centrality parameter is %1%, but must be > 0 !", ncp, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_finite(
-      const char* function,
-      RealType x,
-      RealType* result,
-      const Policy& pol)
-{
-   if(!(boost::math::isfinite)(x))
-   { // Assume scale == 0 is NOT valid for any distribution.
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Parameter is %1%, but must be finite !", x, pol);
-      return false;
-   }
-   return true;
-}
-
-} // namespace detail
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-#  pragma warning(pop)
-#endif
-
-#endif // BOOST_MATH_DISTRIBUTIONS_COMMON_ERROR_HANDLING_HPP
--- a/any/include/boost/math/distributions/detail/derived_accessors.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_DERIVED_HPP
-#define BOOST_STATS_DERIVED_HPP
-
-// This file implements various common properties of distributions
-// that can be implemented in terms of other properties:
-// variance OR standard deviation (see note below),
-// hazard, cumulative hazard (chf), coefficient_of_variation.
-//
-// Note that while both variance and standard_deviation are provided
-// here, each distribution MUST SPECIALIZE AT LEAST ONE OF THESE
-// otherwise these two versions will just call each other over and over
-// until stack space runs out ...
-
-// Of course there may be more efficient means of implementing these
-// that are specific to a particular distribution, but these generic
-// versions give these properties "for free" with most distributions.
-//
-// In order to make use of this header, it must be included AT THE END
-// of the distribution header, AFTER the distribution and its core
-// property accessors have been defined: this is so that compilers
-// that implement 2-phase lookup and early-type-checking of templates
-// can find the definitions refered to herein.
-//
-
-#include <boost/type_traits/is_same.hpp>
-#include <boost/static_assert.hpp>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4723) // potential divide by 0
-// Suppressing spurious warning in coefficient_of_variation
-#endif
-
-namespace boost{ namespace math{
-
-template <class Distribution>
-typename Distribution::value_type variance(const Distribution& dist);
-
-template <class Distribution>
-inline typename Distribution::value_type standard_deviation(const Distribution& dist)
-{
-   BOOST_MATH_STD_USING  // ADL of sqrt.
-   return sqrt(variance(dist));
-}
-
-template <class Distribution>
-inline typename Distribution::value_type variance(const Distribution& dist)
-{
-   typename Distribution::value_type result = standard_deviation(dist);
-   return result * result;
-}
-
-template <class Distribution, class RealType>
-inline typename Distribution::value_type hazard(const Distribution& dist, const RealType& x)
-{ // hazard function
-  // http://www.itl.nist.gov/div898/handbook/eda/section3/eda362.htm#HAZ
-   typedef typename Distribution::value_type value_type;
-   typedef typename Distribution::policy_type policy_type;
-   value_type p = cdf(complement(dist, x));
-   value_type d = pdf(dist, x);
-   if(d > p * tools::max_value<value_type>())
-      return policies::raise_overflow_error<value_type>(
-      "boost::math::hazard(const Distribution&, %1%)", 0, policy_type());
-   if(d == 0)
-   {
-      // This protects against 0/0, but is it the right thing to do?
-      return 0;
-   }
-   return d / p;
-}
-
-template <class Distribution, class RealType>
-inline typename Distribution::value_type chf(const Distribution& dist, const RealType& x)
-{ // cumulative hazard function.
-  // http://www.itl.nist.gov/div898/handbook/eda/section3/eda362.htm#HAZ
-   BOOST_MATH_STD_USING
-   return -log(cdf(complement(dist, x)));
-}
-
-template <class Distribution>
-inline typename Distribution::value_type coefficient_of_variation(const Distribution& dist)
-{
-   typedef typename Distribution::value_type value_type;
-   typedef typename Distribution::policy_type policy_type;
-
-   using std::abs;
-
-   value_type m = mean(dist);
-   value_type d = standard_deviation(dist);
-   if((abs(m) < 1) && (d > abs(m) * tools::max_value<value_type>()))
-   { // Checks too that m is not zero,
-      return policies::raise_overflow_error<value_type>("boost::math::coefficient_of_variation(const Distribution&, %1%)", 0, policy_type());
-   }
-   return d / m; // so MSVC warning on zerodivide is spurious, and suppressed.
-}
-//
-// Next follow overloads of some of the standard accessors with mixed
-// argument types. We just use a typecast to forward on to the "real"
-// implementation with all arguments of the same type:
-//
-template <class Distribution, class RealType>
-inline typename Distribution::value_type pdf(const Distribution& dist, const RealType& x)
-{
-   typedef typename Distribution::value_type value_type;
-   return pdf(dist, static_cast<value_type>(x));
-}
-template <class Distribution, class RealType>
-inline typename Distribution::value_type cdf(const Distribution& dist, const RealType& x)
-{
-   typedef typename Distribution::value_type value_type;
-   return cdf(dist, static_cast<value_type>(x));
-}
-template <class Distribution, class RealType>
-inline typename Distribution::value_type quantile(const Distribution& dist, const RealType& x)
-{
-   typedef typename Distribution::value_type value_type;
-   return quantile(dist, static_cast<value_type>(x));
-}
-/*
-template <class Distribution, class RealType>
-inline typename Distribution::value_type chf(const Distribution& dist, const RealType& x)
-{
-   typedef typename Distribution::value_type value_type;
-   return chf(dist, static_cast<value_type>(x));
-}
-*/
-template <class Distribution, class RealType>
-inline typename Distribution::value_type cdf(const complemented2_type<Distribution, RealType>& c)
-{
-   typedef typename Distribution::value_type value_type;
-   return cdf(complement(c.dist, static_cast<value_type>(c.param)));
-}
-
-template <class Distribution, class RealType>
-inline typename Distribution::value_type quantile(const complemented2_type<Distribution, RealType>& c)
-{
-   typedef typename Distribution::value_type value_type;
-   return quantile(complement(c.dist, static_cast<value_type>(c.param)));
-}
-
-template <class Dist>
-inline typename Dist::value_type median(const Dist& d)
-{ // median - default definition for those distributions for which a
-  // simple closed form is not known,
-  // and for which a domain_error and/or NaN generating function is NOT defined.
-  typedef typename Dist::value_type value_type;
-  return quantile(d, static_cast<value_type>(0.5f));
-}
-
-} // namespace math
-} // namespace boost
-
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_STATS_DERIVED_HPP
--- a/any/include/boost/math/distributions/detail/generic_mode.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-// Copyright John Maddock 2008.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_MODE_HPP
-#define BOOST_MATH_DISTRIBUTIONS_DETAIL_MODE_HPP
-
-#include <boost/math/tools/minima.hpp> // function minimization for mode
-#include <boost/math/policies/error_handling.hpp>
-#include <boost/math/distributions/fwd.hpp>
-
-namespace boost{ namespace math{ namespace detail{
-
-template <class Dist>
-struct pdf_minimizer
-{
-   pdf_minimizer(const Dist& d)
-      : dist(d) {}
-
-   typename Dist::value_type operator()(const typename Dist::value_type& x)
-   {
-      return -pdf(dist, x);
-   }
-private:
-   Dist dist;
-};
-
-template <class Dist>
-typename Dist::value_type generic_find_mode(const Dist& dist, typename Dist::value_type guess, const char* function, typename Dist::value_type step = 0)
-{
-   BOOST_MATH_STD_USING
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-   //
-   // Need to begin by bracketing the maxima of the PDF:
-   //
-   value_type maxval;
-   value_type upper_bound = guess;
-   value_type lower_bound;
-   value_type v = pdf(dist, guess);
-   if(v == 0)
-   {
-      //
-      // Oops we don't know how to handle this, or even in which
-      // direction we should move in, treat as an evaluation error:
-      //
-      return policies::raise_evaluation_error(
-         function, 
-         "Could not locate a starting location for the search for the mode, original guess was %1%", guess, policy_type());
-   }
-   do
-   {
-      maxval = v;
-      if(step != 0)
-         upper_bound += step;
-      else
-         upper_bound *= 2;
-      v = pdf(dist, upper_bound);
-   }while(maxval < v);
-
-   lower_bound = upper_bound;
-   do
-   {
-      maxval = v;
-      if(step != 0)
-         lower_bound -= step;
-      else
-         lower_bound /= 2;
-      v = pdf(dist, lower_bound);
-   }while(maxval < v);
-
-   boost::uintmax_t max_iter = policies::get_max_root_iterations<policy_type>();
-
-   value_type result = tools::brent_find_minima(
-      pdf_minimizer<Dist>(dist), 
-      lower_bound, 
-      upper_bound, 
-      policies::digits<value_type, policy_type>(), 
-      max_iter).first;
-   if(max_iter >= policies::get_max_root_iterations<policy_type>())
-   {
-      return policies::raise_evaluation_error<value_type>(
-         function, 
-         "Unable to locate solution in a reasonable time:"
-         " either there is no answer to the mode of the distribution"
-         " or the answer is infinite.  Current best guess is %1%", result, policy_type());
-   }
-   return result;
-}
-//
-// As above,but confined to the interval [0,1]:
-//
-template <class Dist>
-typename Dist::value_type generic_find_mode_01(const Dist& dist, typename Dist::value_type guess, const char* function)
-{
-   BOOST_MATH_STD_USING
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-   //
-   // Need to begin by bracketing the maxima of the PDF:
-   //
-   value_type maxval;
-   value_type upper_bound = guess;
-   value_type lower_bound;
-   value_type v = pdf(dist, guess);
-   do
-   {
-      maxval = v;
-      upper_bound = 1 - (1 - upper_bound) / 2;
-      if(upper_bound == 1)
-         return 1;
-      v = pdf(dist, upper_bound);
-   }while(maxval < v);
-
-   lower_bound = upper_bound;
-   do
-   {
-      maxval = v;
-      lower_bound /= 2;
-      if(lower_bound < tools::min_value<value_type>())
-         return 0;
-      v = pdf(dist, lower_bound);
-   }while(maxval < v);
-
-   boost::uintmax_t max_iter = policies::get_max_root_iterations<policy_type>();
-
-   value_type result = tools::brent_find_minima(
-      pdf_minimizer<Dist>(dist), 
-      lower_bound, 
-      upper_bound, 
-      policies::digits<value_type, policy_type>(), 
-      max_iter).first;
-   if(max_iter >= policies::get_max_root_iterations<policy_type>())
-   {
-      return policies::raise_evaluation_error<value_type>(
-         function, 
-         "Unable to locate solution in a reasonable time:"
-         " either there is no answer to the mode of the distribution"
-         " or the answer is infinite.  Current best guess is %1%", result, policy_type());
-   }
-   return result;
-}
-
-}}} // namespaces
-
-#endif // BOOST_MATH_DISTRIBUTIONS_DETAIL_MODE_HPP
--- a/any/include/boost/math/distributions/detail/generic_quantile.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-//  Copyright John Maddock 2008.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTIBUTIONS_DETAIL_GENERIC_QUANTILE_HPP
-#define BOOST_MATH_DISTIBUTIONS_DETAIL_GENERIC_QUANTILE_HPP
-
-namespace boost{ namespace math{ namespace detail{
-
-template <class Dist>
-struct generic_quantile_finder
-{
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-
-   generic_quantile_finder(const Dist& d, value_type t, bool c)
-      : dist(d), target(t), comp(c) {}
-
-   value_type operator()(const value_type& x)
-   {
-      return comp ?
-         value_type(target - cdf(complement(dist, x)))
-         : value_type(cdf(dist, x) - target);
-   }
-
-private:
-   Dist dist;
-   value_type target;
-   bool comp;
-};
-
-template <class T, class Policy>
-inline T check_range_result(const T& x, const Policy& pol, const char* function)
-{
-   if((x >= 0) && (x < tools::min_value<T>()))
-      return policies::raise_underflow_error<T>(function, 0, pol);
-   if(x <= -tools::max_value<T>())
-      return -policies::raise_overflow_error<T>(function, 0, pol);
-   if(x >= tools::max_value<T>())
-      return policies::raise_overflow_error<T>(function, 0, pol);
-   return x;
-}
-
-template <class Dist>
-typename Dist::value_type generic_quantile(const Dist& dist, const typename Dist::value_type& p, const typename Dist::value_type& guess, bool comp, const char* function)
-{
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-   typedef typename policies::normalise<
-      policy_type, 
-      policies::promote_float<false>, 
-      policies::promote_double<false>, 
-      policies::discrete_quantile<>,
-      policies::assert_undefined<> >::type forwarding_policy;
-
-   //
-   // Special cases first:
-   //
-   if(p == 0)
-   {
-      return comp
-      ? check_range_result(range(dist).second, forwarding_policy(), function)
-      : check_range_result(range(dist).first, forwarding_policy(), function);
-   }
-   if(p == 1)
-   {
-      return !comp
-      ? check_range_result(range(dist).second, forwarding_policy(), function)
-      : check_range_result(range(dist).first, forwarding_policy(), function);
-   }
-
-   generic_quantile_finder<Dist> f(dist, p, comp);
-   tools::eps_tolerance<value_type> tol(policies::digits<value_type, forwarding_policy>() - 3);
-   boost::uintmax_t max_iter = policies::get_max_root_iterations<forwarding_policy>();
-   std::pair<value_type, value_type> ir = tools::bracket_and_solve_root(
-      f, guess, value_type(2), true, tol, max_iter, forwarding_policy());
-   value_type result = ir.first + (ir.second - ir.first) / 2;
-   if(max_iter >= policies::get_max_root_iterations<forwarding_policy>())
-   {
-      return policies::raise_evaluation_error<value_type>(function, "Unable to locate solution in a reasonable time:"
-         " either there is no answer to quantile"
-         " or the answer is infinite.  Current best guess is %1%", result, forwarding_policy());
-   }
-   return result;
-}
-
-}}} // namespaces
-
-#endif // BOOST_MATH_DISTIBUTIONS_DETAIL_GENERIC_QUANTILE_HPP
-
--- a/any/include/boost/math/distributions/detail/hypergeometric_cdf.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-// Copyright 2008 John Maddock
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_CDF_HPP
-#define BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_CDF_HPP
-
-#include <boost/math/policies/error_handling.hpp>
-#include <boost/math/distributions/detail/hypergeometric_pdf.hpp>
-
-namespace boost{ namespace math{ namespace detail{
-
-   template <class T, class Policy>
-   T hypergeometric_cdf_imp(unsigned x, unsigned r, unsigned n, unsigned N, bool invert, const Policy& pol)
-   {
-#ifdef BOOST_MSVC
-#  pragma warning(push)
-#  pragma warning(disable:4267)
-#endif
-      BOOST_MATH_STD_USING
-      T result = 0;
-      T mode = floor(T(r + 1) * T(n + 1) / (N + 2));
-      if(x < mode)
-      {
-         result = hypergeometric_pdf<T>(x, r, n, N, pol);
-         T diff = result;
-         unsigned lower_limit = static_cast<unsigned>((std::max)(0, (int)(n + r) - (int)(N)));
-         while(diff > (invert ? T(1) : result) * tools::epsilon<T>())
-         {
-            diff = T(x) * T((N + x) - n - r) * diff / (T(1 + n - x) * T(1 + r - x));
-            result += diff;
-            BOOST_MATH_INSTRUMENT_VARIABLE(x);
-            BOOST_MATH_INSTRUMENT_VARIABLE(diff);
-            BOOST_MATH_INSTRUMENT_VARIABLE(result);
-            if(x == lower_limit)
-               break;
-            --x;
-         }
-      }
-      else
-      {
-         invert = !invert;
-         unsigned upper_limit = (std::min)(r, n);
-         if(x != upper_limit)
-         {
-            ++x;
-            result = hypergeometric_pdf<T>(x, r, n, N, pol);
-            T diff = result;
-            while((x <= upper_limit) && (diff > (invert ? T(1) : result) * tools::epsilon<T>()))
-            {
-               diff = T(n - x) * T(r - x) * diff / (T(x + 1) * T((N + x + 1) - n - r));
-               result += diff;
-               ++x;
-               BOOST_MATH_INSTRUMENT_VARIABLE(x);
-               BOOST_MATH_INSTRUMENT_VARIABLE(diff);
-               BOOST_MATH_INSTRUMENT_VARIABLE(result);
-            }
-         }
-      }
-      if(invert)
-         result = 1 - result;
-      return result;
-#ifdef BOOST_MSVC
-#  pragma warning(pop)
-#endif
-   }
-
-   template <class T, class Policy>
-   inline T hypergeometric_cdf(unsigned x, unsigned r, unsigned n, unsigned N, bool invert, const Policy&)
-   {
-      BOOST_FPU_EXCEPTION_GUARD
-      typedef typename tools::promote_args<T>::type result_type;
-      typedef typename policies::evaluation<result_type, Policy>::type value_type;
-      typedef typename policies::normalise<
-         Policy, 
-         policies::promote_float<false>, 
-         policies::promote_double<false>, 
-         policies::discrete_quantile<>,
-         policies::assert_undefined<> >::type forwarding_policy;
-
-      value_type result;
-      result = detail::hypergeometric_cdf_imp<value_type>(x, r, n, N, invert, forwarding_policy());
-      if(result > 1)
-      {
-         result  = 1;
-      }
-      if(result < 0)
-      {
-         result = 0;
-      }
-      return policies::checked_narrowing_cast<result_type, forwarding_policy>(result, "boost::math::hypergeometric_cdf<%1%>(%1%,%1%,%1%,%1%)");
-   }
-
-}}} // namespaces
-
-#endif
-
--- a/any/include/boost/math/distributions/detail/hypergeometric_pdf.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,488 +0,0 @@
-// Copyright 2008 Gautam Sewani
-// Copyright 2008 John Maddock
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_PDF_HPP
-#define BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_PDF_HPP
-
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/special_functions/lanczos.hpp>
-#include <boost/math/special_functions/gamma.hpp>
-#include <boost/math/special_functions/pow.hpp>
-#include <boost/math/special_functions/prime.hpp>
-#include <boost/math/policies/error_handling.hpp>
-
-#ifdef BOOST_MATH_INSTRUMENT
-#include <typeinfo>
-#endif
-
-namespace boost{ namespace math{ namespace detail{
-
-template <class T, class Func>
-void bubble_down_one(T* first, T* last, Func f)
-{
-   using std::swap;
-   T* next = first;
-   ++next;
-   while((next != last) && (!f(*first, *next)))
-   {
-      swap(*first, *next);
-      ++first;
-      ++next;
-   }
-}
-
-template <class T>
-struct sort_functor
-{
-   sort_functor(const T* exponents) : m_exponents(exponents){}
-   bool operator()(int i, int j)
-   {
-      return m_exponents[i] > m_exponents[j];
-   }
-private:
-   const T* m_exponents;
-};
-
-template <class T, class Lanczos, class Policy>
-T hypergeometric_pdf_lanczos_imp(T /*dummy*/, unsigned x, unsigned r, unsigned n, unsigned N, const Lanczos&, const Policy&)
-{
-   BOOST_MATH_STD_USING
-
-   BOOST_MATH_INSTRUMENT_FPU
-   BOOST_MATH_INSTRUMENT_VARIABLE(x);
-   BOOST_MATH_INSTRUMENT_VARIABLE(r);
-   BOOST_MATH_INSTRUMENT_VARIABLE(n);
-   BOOST_MATH_INSTRUMENT_VARIABLE(N);
-   BOOST_MATH_INSTRUMENT_VARIABLE(typeid(Lanczos).name());
-
-   T bases[9] = {
-      T(n) + static_cast<T>(Lanczos::g()) + 0.5f,
-      T(r) + static_cast<T>(Lanczos::g()) + 0.5f,
-      T(N - n) + static_cast<T>(Lanczos::g()) + 0.5f,
-      T(N - r) + static_cast<T>(Lanczos::g()) + 0.5f,
-      1 / (T(N) + static_cast<T>(Lanczos::g()) + 0.5f),
-      1 / (T(x) + static_cast<T>(Lanczos::g()) + 0.5f),
-      1 / (T(n - x) + static_cast<T>(Lanczos::g()) + 0.5f),
-      1 / (T(r - x) + static_cast<T>(Lanczos::g()) + 0.5f),
-      1 / (T(N - n - r + x) + static_cast<T>(Lanczos::g()) + 0.5f)
-   };
-   T exponents[9] = {
-      n + T(0.5f),
-      r + T(0.5f),
-      N - n + T(0.5f),
-      N - r + T(0.5f),
-      N + T(0.5f),
-      x + T(0.5f),
-      n - x + T(0.5f),
-      r - x + T(0.5f),
-      N - n - r + x + T(0.5f)
-   };
-   int base_e_factors[9] = {
-      -1, -1, -1, -1, 1, 1, 1, 1, 1
-   };
-   int sorted_indexes[9] = {
-      0, 1, 2, 3, 4, 5, 6, 7, 8
-   };
-#ifdef BOOST_MATH_INSTRUMENT
-   BOOST_MATH_INSTRUMENT_FPU
-   for(unsigned i = 0; i < 9; ++i)
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(i);
-      BOOST_MATH_INSTRUMENT_VARIABLE(bases[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(exponents[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(base_e_factors[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(sorted_indexes[i]);
-   }
-#endif
-   std::sort(sorted_indexes, sorted_indexes + 9, sort_functor<T>(exponents));
-#ifdef BOOST_MATH_INSTRUMENT
-   BOOST_MATH_INSTRUMENT_FPU
-   for(unsigned i = 0; i < 9; ++i)
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(i);
-      BOOST_MATH_INSTRUMENT_VARIABLE(bases[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(exponents[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(base_e_factors[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(sorted_indexes[i]);
-   }
-#endif
-
-   do{
-      exponents[sorted_indexes[0]] -= exponents[sorted_indexes[1]];
-      bases[sorted_indexes[1]] *= bases[sorted_indexes[0]];
-      if((bases[sorted_indexes[1]] < tools::min_value<T>()) && (exponents[sorted_indexes[1]] != 0))
-      {
-         return 0;
-      }
-      base_e_factors[sorted_indexes[1]] += base_e_factors[sorted_indexes[0]];
-      bubble_down_one(sorted_indexes, sorted_indexes + 9, sort_functor<T>(exponents));
-
-#ifdef BOOST_MATH_INSTRUMENT
-      for(unsigned i = 0; i < 9; ++i)
-      {
-         BOOST_MATH_INSTRUMENT_VARIABLE(i);
-         BOOST_MATH_INSTRUMENT_VARIABLE(bases[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(exponents[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(base_e_factors[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(sorted_indexes[i]);
-      }
-#endif
-   }while(exponents[sorted_indexes[1]] > 1);
-
-   //
-   // Combine equal powers:
-   //
-   int j = 8;
-   while(exponents[sorted_indexes[j]] == 0) --j;
-   while(j)
-   {
-      while(j && (exponents[sorted_indexes[j-1]] == exponents[sorted_indexes[j]]))
-      {
-         bases[sorted_indexes[j-1]] *= bases[sorted_indexes[j]];
-         exponents[sorted_indexes[j]] = 0;
-         base_e_factors[sorted_indexes[j-1]] += base_e_factors[sorted_indexes[j]];
-         bubble_down_one(sorted_indexes + j, sorted_indexes + 9, sort_functor<T>(exponents));
-         --j;
-      }
-      --j;
-
-#ifdef BOOST_MATH_INSTRUMENT
-      BOOST_MATH_INSTRUMENT_VARIABLE(j);
-      for(unsigned i = 0; i < 9; ++i)
-      {
-         BOOST_MATH_INSTRUMENT_VARIABLE(i);
-         BOOST_MATH_INSTRUMENT_VARIABLE(bases[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(exponents[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(base_e_factors[i]);
-         BOOST_MATH_INSTRUMENT_VARIABLE(sorted_indexes[i]);
-      }
-#endif
-   }
-
-#ifdef BOOST_MATH_INSTRUMENT
-   BOOST_MATH_INSTRUMENT_FPU
-   for(unsigned i = 0; i < 9; ++i)
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(i);
-      BOOST_MATH_INSTRUMENT_VARIABLE(bases[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(exponents[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(base_e_factors[i]);
-      BOOST_MATH_INSTRUMENT_VARIABLE(sorted_indexes[i]);
-   }
-#endif
-
-   T result;
-   BOOST_MATH_INSTRUMENT_VARIABLE(bases[sorted_indexes[0]] * exp(static_cast<T>(base_e_factors[sorted_indexes[0]])));
-   BOOST_MATH_INSTRUMENT_VARIABLE(exponents[sorted_indexes[0]]);
-   {
-      BOOST_FPU_EXCEPTION_GUARD
-      result = pow(bases[sorted_indexes[0]] * exp(static_cast<T>(base_e_factors[sorted_indexes[0]])), exponents[sorted_indexes[0]]);
-   }
-   BOOST_MATH_INSTRUMENT_VARIABLE(result);
-   for(unsigned i = 1; (i < 9) && (exponents[sorted_indexes[i]] > 0); ++i)
-   {
-      BOOST_FPU_EXCEPTION_GUARD
-      if(result < tools::min_value<T>())
-         return 0; // short circuit further evaluation
-      if(exponents[sorted_indexes[i]] == 1)
-         result *= bases[sorted_indexes[i]] * exp(static_cast<T>(base_e_factors[sorted_indexes[i]]));
-      else if(exponents[sorted_indexes[i]] == 0.5f)
-         result *= sqrt(bases[sorted_indexes[i]] * exp(static_cast<T>(base_e_factors[sorted_indexes[i]])));
-      else
-         result *= pow(bases[sorted_indexes[i]] * exp(static_cast<T>(base_e_factors[sorted_indexes[i]])), exponents[sorted_indexes[i]]);
-   
-      BOOST_MATH_INSTRUMENT_VARIABLE(result);
-   }
-
-   result *= Lanczos::lanczos_sum_expG_scaled(static_cast<T>(n + 1))
-      * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(r + 1))
-      * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(N - n + 1))
-      * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(N - r + 1))
-      / 
-      ( Lanczos::lanczos_sum_expG_scaled(static_cast<T>(N + 1))
-         * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(x + 1))
-         * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(n - x + 1))
-         * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(r - x + 1))
-         * Lanczos::lanczos_sum_expG_scaled(static_cast<T>(N - n - r + x + 1)));
-   
-   BOOST_MATH_INSTRUMENT_VARIABLE(result);
-   return result;
-}
-
-template <class T, class Policy>
-T hypergeometric_pdf_lanczos_imp(T /*dummy*/, unsigned x, unsigned r, unsigned n, unsigned N, const boost::math::lanczos::undefined_lanczos&, const Policy& pol)
-{
-   BOOST_MATH_STD_USING
-   return exp(
-      boost::math::lgamma(T(n + 1), pol)
-      + boost::math::lgamma(T(r + 1), pol)
-      + boost::math::lgamma(T(N - n + 1), pol)
-      + boost::math::lgamma(T(N - r + 1), pol)
-      - boost::math::lgamma(T(N + 1), pol)
-      - boost::math::lgamma(T(x + 1), pol)
-      - boost::math::lgamma(T(n - x + 1), pol)
-      - boost::math::lgamma(T(r - x + 1), pol)
-      - boost::math::lgamma(T(N - n - r + x + 1), pol));
-}
-
-template <class T>
-inline T integer_power(const T& x, int ex)
-{
-   if(ex < 0)
-      return 1 / integer_power(x, -ex);
-   switch(ex)
-   {
-   case 0:
-      return 1;
-   case 1:
-      return x;
-   case 2:
-      return x * x;
-   case 3:
-      return x * x * x;
-   case 4:
-      return boost::math::pow<4>(x);
-   case 5:
-      return boost::math::pow<5>(x);
-   case 6:
-      return boost::math::pow<6>(x);
-   case 7:
-      return boost::math::pow<7>(x);
-   case 8:
-      return boost::math::pow<8>(x);
-   }
-   BOOST_MATH_STD_USING
-#ifdef __SUNPRO_CC
-   return pow(x, T(ex));
-#else
-   return pow(x, ex);
-#endif
-}
-template <class T>
-struct hypergeometric_pdf_prime_loop_result_entry
-{
-   T value;
-   const hypergeometric_pdf_prime_loop_result_entry* next;
-};
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4510 4512 4610)
-#endif
-
-struct hypergeometric_pdf_prime_loop_data
-{
-   const unsigned x;
-   const unsigned r;
-   const unsigned n;
-   const unsigned N;
-   unsigned prime_index;
-   unsigned current_prime;
-};
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-template <class T>
-T hypergeometric_pdf_prime_loop_imp(hypergeometric_pdf_prime_loop_data& data, hypergeometric_pdf_prime_loop_result_entry<T>& result)
-{
-   while(data.current_prime <= data.N)
-   {
-      unsigned base = data.current_prime;
-      int prime_powers = 0;
-      while(base <= data.N)
-      {
-         prime_powers += data.n / base;
-         prime_powers += data.r / base;
-         prime_powers += (data.N - data.n) / base;
-         prime_powers += (data.N - data.r) / base;
-         prime_powers -= data.N / base;
-         prime_powers -= data.x / base;
-         prime_powers -= (data.n - data.x) / base;
-         prime_powers -= (data.r - data.x) / base;
-         prime_powers -= (data.N - data.n - data.r + data.x) / base;
-         base *= data.current_prime;
-      }
-      if(prime_powers)
-      {
-         T p = integer_power<T>(static_cast<T>(data.current_prime), prime_powers);
-         if((p > 1) && (tools::max_value<T>() / p < result.value))
-         {
-            //
-            // The next calculation would overflow, use recursion
-            // to sidestep the issue:
-            //
-            hypergeometric_pdf_prime_loop_result_entry<T> t = { p, &result };
-            data.current_prime = prime(++data.prime_index);
-            return hypergeometric_pdf_prime_loop_imp<T>(data, t);
-         }
-         if((p < 1) && (tools::min_value<T>() / p > result.value))
-         {
-            //
-            // The next calculation would underflow, use recursion
-            // to sidestep the issue:
-            //
-            hypergeometric_pdf_prime_loop_result_entry<T> t = { p, &result };
-            data.current_prime = prime(++data.prime_index);
-            return hypergeometric_pdf_prime_loop_imp<T>(data, t);
-         }
-         result.value *= p;
-      }
-      data.current_prime = prime(++data.prime_index);
-   }
-   //
-   // When we get to here we have run out of prime factors,
-   // the overall result is the product of all the partial
-   // results we have accumulated on the stack so far, these
-   // are in a linked list starting with "data.head" and ending
-   // with "result".
-   //
-   // All that remains is to multiply them together, taking
-   // care not to overflow or underflow.
-   //
-   // Enumerate partial results >= 1 in variable i
-   // and partial results < 1 in variable j:
-   //
-   hypergeometric_pdf_prime_loop_result_entry<T> const *i, *j;
-   i = &result;
-   while(i && i->value < 1)
-      i = i->next;
-   j = &result;
-   while(j && j->value >= 1)
-      j = j->next;
-
-   T prod = 1;
-
-   while(i || j)
-   {
-      while(i && ((prod <= 1) || (j == 0)))
-      {
-         prod *= i->value;
-         i = i->next;
-         while(i && i->value < 1)
-            i = i->next;
-      }
-      while(j && ((prod >= 1) || (i == 0)))
-      {
-         prod *= j->value;
-         j = j->next;
-         while(j && j->value >= 1)
-            j = j->next;
-      }
-   }
-
-   return prod;
-}
-
-template <class T, class Policy>
-inline T hypergeometric_pdf_prime_imp(unsigned x, unsigned r, unsigned n, unsigned N, const Policy&)
-{
-   hypergeometric_pdf_prime_loop_result_entry<T> result = { 1, 0 };
-   hypergeometric_pdf_prime_loop_data data = { x, r, n, N, 0, prime(0) };
-   return hypergeometric_pdf_prime_loop_imp<T>(data, result);
-}
-
-template <class T, class Policy>
-T hypergeometric_pdf_factorial_imp(unsigned x, unsigned r, unsigned n, unsigned N, const Policy&)
-{
-   BOOST_MATH_STD_USING
-   BOOST_ASSERT(N <= boost::math::max_factorial<T>::value);
-   T result = boost::math::unchecked_factorial<T>(n);
-   T num[3] = {
-      boost::math::unchecked_factorial<T>(r),
-      boost::math::unchecked_factorial<T>(N - n),
-      boost::math::unchecked_factorial<T>(N - r)
-   };
-   T denom[5] = {
-      boost::math::unchecked_factorial<T>(N),
-      boost::math::unchecked_factorial<T>(x),
-      boost::math::unchecked_factorial<T>(n - x),
-      boost::math::unchecked_factorial<T>(r - x),
-      boost::math::unchecked_factorial<T>(N - n - r + x)
-   };
-   int i = 0;
-   int j = 0;
-   while((i < 3) || (j < 5))
-   {
-      while((j < 5) && ((result >= 1) || (i >= 3)))
-      {
-         result /= denom[j];
-         ++j;
-      }
-      while((i < 3) && ((result <= 1) || (j >= 5)))
-      {
-         result *= num[i];
-         ++i;
-      }
-   }
-   return result;
-}
-
-
-template <class T, class Policy>
-inline typename tools::promote_args<T>::type 
-   hypergeometric_pdf(unsigned x, unsigned r, unsigned n, unsigned N, const Policy&)
-{
-   BOOST_FPU_EXCEPTION_GUARD
-   typedef typename tools::promote_args<T>::type result_type;
-   typedef typename policies::evaluation<result_type, Policy>::type value_type;
-   typedef typename lanczos::lanczos<value_type, Policy>::type evaluation_type;
-   typedef typename policies::normalise<
-      Policy, 
-      policies::promote_float<false>, 
-      policies::promote_double<false>, 
-      policies::discrete_quantile<>,
-      policies::assert_undefined<> >::type forwarding_policy;
-
-   value_type result;
-   if(N <= boost::math::max_factorial<value_type>::value)
-   {
-      //
-      // If N is small enough then we can evaluate the PDF via the factorials
-      // directly: table lookup of the factorials gives the best performance
-      // of the methods available:
-      //
-      result = detail::hypergeometric_pdf_factorial_imp<value_type>(x, r, n, N, forwarding_policy());
-   }
-   else if(N <= boost::math::prime(boost::math::max_prime - 1))
-   {
-      //
-      // If N is no larger than the largest prime number in our lookup table
-      // (104729) then we can use prime factorisation to evaluate the PDF,
-      // this is slow but accurate:
-      //
-      result = detail::hypergeometric_pdf_prime_imp<value_type>(x, r, n, N, forwarding_policy());
-   }
-   else
-   {
-      //
-      // Catch all case - use the lanczos approximation - where available - 
-      // to evaluate the ratio of factorials.  This is reasonably fast
-      // (almost as quick as using logarithmic evaluation in terms of lgamma)
-      // but only a few digits better in accuracy than using lgamma:
-      //
-      result = detail::hypergeometric_pdf_lanczos_imp(value_type(), x, r, n, N, evaluation_type(), forwarding_policy());
-   }
-
-   if(result > 1)
-   {
-      result = 1;
-   }
-   if(result < 0)
-   {
-      result = 0;
-   }
-
-   return policies::checked_narrowing_cast<result_type, forwarding_policy>(result, "boost::math::hypergeometric_pdf<%1%>(%1%,%1%,%1%,%1%)");
-}
-
-}}} // namespaces
-
-#endif
-
--- a/any/include/boost/math/distributions/detail/hypergeometric_quantile.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,245 +0,0 @@
-// Copyright 2008 John Maddock
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_QUANTILE_HPP
-#define BOOST_MATH_DISTRIBUTIONS_DETAIL_HG_QUANTILE_HPP
-
-#include <boost/math/policies/error_handling.hpp>
-#include <boost/math/distributions/detail/hypergeometric_pdf.hpp>
-
-namespace boost{ namespace math{ namespace detail{
-
-template <class T>
-inline unsigned round_x_from_p(unsigned x, T p, T cum, T fudge_factor, unsigned lbound, unsigned /*ubound*/, const policies::discrete_quantile<policies::integer_round_down>&)
-{
-   if((p < cum * fudge_factor) && (x != lbound))
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(x-1);
-      return --x;
-   }
-   return x;
-}
-
-template <class T>
-inline unsigned round_x_from_p(unsigned x, T p, T cum, T fudge_factor, unsigned /*lbound*/, unsigned ubound, const policies::discrete_quantile<policies::integer_round_up>&)
-{
-   if((cum < p * fudge_factor) && (x != ubound))
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(x+1);
-      return ++x;
-   }
-   return x;
-}
-
-template <class T>
-inline unsigned round_x_from_p(unsigned x, T p, T cum, T fudge_factor, unsigned lbound, unsigned ubound, const policies::discrete_quantile<policies::integer_round_inwards>&)
-{
-   if(p >= 0.5)
-      return round_x_from_p(x, p, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_down>());
-   return round_x_from_p(x, p, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_up>());
-}
-
-template <class T>
-inline unsigned round_x_from_p(unsigned x, T p, T cum, T fudge_factor, unsigned lbound, unsigned ubound, const policies::discrete_quantile<policies::integer_round_outwards>&)
-{
-   if(p >= 0.5)
-      return round_x_from_p(x, p, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_up>());
-   return round_x_from_p(x, p, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_down>());
-}
-
-template <class T>
-inline unsigned round_x_from_p(unsigned x, T /*p*/, T /*cum*/, T /*fudge_factor*/, unsigned /*lbound*/, unsigned /*ubound*/, const policies::discrete_quantile<policies::integer_round_nearest>&)
-{
-   return x;
-}
-
-template <class T>
-inline unsigned round_x_from_q(unsigned x, T q, T cum, T fudge_factor, unsigned lbound, unsigned /*ubound*/, const policies::discrete_quantile<policies::integer_round_down>&)
-{
-   if((q * fudge_factor > cum) && (x != lbound))
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(x-1);
-      return --x;
-   }
-   return x;
-}
-
-template <class T>
-inline unsigned round_x_from_q(unsigned x, T q, T cum, T fudge_factor, unsigned /*lbound*/, unsigned ubound, const policies::discrete_quantile<policies::integer_round_up>&)
-{
-   if((q < cum * fudge_factor) && (x != ubound))
-   {
-      BOOST_MATH_INSTRUMENT_VARIABLE(x+1);
-      return ++x;
-   }
-   return x;
-}
-
-template <class T>
-inline unsigned round_x_from_q(unsigned x, T q, T cum, T fudge_factor, unsigned lbound, unsigned ubound, const policies::discrete_quantile<policies::integer_round_inwards>&)
-{
-   if(q < 0.5)
-      return round_x_from_q(x, q, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_down>());
-   return round_x_from_q(x, q, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_up>());
-}
-
-template <class T>
-inline unsigned round_x_from_q(unsigned x, T q, T cum, T fudge_factor, unsigned lbound, unsigned ubound, const policies::discrete_quantile<policies::integer_round_outwards>&)
-{
-   if(q >= 0.5)
-      return round_x_from_q(x, q, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_down>());
-   return round_x_from_q(x, q, cum, fudge_factor, lbound, ubound, policies::discrete_quantile<policies::integer_round_up>());
-}
-
-template <class T>
-inline unsigned round_x_from_q(unsigned x, T /*q*/, T /*cum*/, T /*fudge_factor*/, unsigned /*lbound*/, unsigned /*ubound*/, const policies::discrete_quantile<policies::integer_round_nearest>&)
-{
-   return x;
-}
-
-template <class T, class Policy>
-unsigned hypergeometric_quantile_imp(T p, T q, unsigned r, unsigned n, unsigned N, const Policy& pol)
-{
-#ifdef BOOST_MSVC
-#  pragma warning(push)
-#  pragma warning(disable:4267)
-#endif
-   typedef typename Policy::discrete_quantile_type discrete_quantile_type;
-   BOOST_MATH_STD_USING
-   BOOST_FPU_EXCEPTION_GUARD
-   T result;
-   T fudge_factor = 1 + tools::epsilon<T>() * ((N <= boost::math::prime(boost::math::max_prime - 1)) ? 50 : 2 * N);
-   unsigned base = static_cast<unsigned>((std::max)(0, (int)(n + r) - (int)(N)));
-   unsigned lim = (std::min)(r, n);
-
-   BOOST_MATH_INSTRUMENT_VARIABLE(p);
-   BOOST_MATH_INSTRUMENT_VARIABLE(q);
-   BOOST_MATH_INSTRUMENT_VARIABLE(r);
-   BOOST_MATH_INSTRUMENT_VARIABLE(n);
-   BOOST_MATH_INSTRUMENT_VARIABLE(N);
-   BOOST_MATH_INSTRUMENT_VARIABLE(fudge_factor);
-   BOOST_MATH_INSTRUMENT_VARIABLE(base);
-   BOOST_MATH_INSTRUMENT_VARIABLE(lim);
-
-   if(p <= 0.5)
-   {
-      unsigned x = base;
-      result = hypergeometric_pdf<T>(x, r, n, N, pol);
-      T diff = result;
-      if (diff == 0)
-      {
-         ++x;
-         // We want to skip through x values as fast as we can until we start getting non-zero values,
-         // otherwise we're just making lots of expensive PDF calls:
-         T log_pdf = boost::math::lgamma(static_cast<T>(n + 1), pol)
-            + boost::math::lgamma(static_cast<T>(r + 1), pol)
-            + boost::math::lgamma(static_cast<T>(N - n + 1), pol)
-            + boost::math::lgamma(static_cast<T>(N - r + 1), pol)
-            - boost::math::lgamma(static_cast<T>(N + 1), pol)
-            - boost::math::lgamma(static_cast<T>(x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(n - x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(r - x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(N - n - r + x + 1), pol);
-         while (log_pdf < tools::log_min_value<T>())
-         {
-            log_pdf += -log(static_cast<T>(x + 1)) + log(static_cast<T>(n - x)) + log(static_cast<T>(r - x)) - log(static_cast<T>(N - n - r + x + 1));
-            ++x;
-         }
-         // By the time we get here, log_pdf may be fairly inaccurate due to
-         // roundoff errors, get a fresh PDF calculation before proceding:
-         diff = hypergeometric_pdf<T>(x, r, n, N, pol);
-      }
-      while(result < p)
-      {
-         diff = (diff > tools::min_value<T>() * 8) 
-            ? T(n - x) * T(r - x) * diff / (T(x + 1) * T(N + x + 1 - n - r))
-            : hypergeometric_pdf<T>(x + 1, r, n, N, pol);
-         if(result + diff / 2 > p)
-            break;
-         ++x;
-         result += diff;
-#ifdef BOOST_MATH_INSTRUMENT
-         if(diff != 0)
-         {
-            BOOST_MATH_INSTRUMENT_VARIABLE(x);
-            BOOST_MATH_INSTRUMENT_VARIABLE(diff);
-            BOOST_MATH_INSTRUMENT_VARIABLE(result);
-         }
-#endif
-      }
-      return round_x_from_p(x, p, result, fudge_factor, base, lim, discrete_quantile_type());
-   }
-   else
-   {
-      unsigned x = lim;
-      result = 0;
-      T diff = hypergeometric_pdf<T>(x, r, n, N, pol);
-      if (diff == 0)
-      {
-         // We want to skip through x values as fast as we can until we start getting non-zero values,
-         // otherwise we're just making lots of expensive PDF calls:
-         --x;
-         T log_pdf = boost::math::lgamma(static_cast<T>(n + 1), pol)
-            + boost::math::lgamma(static_cast<T>(r + 1), pol)
-            + boost::math::lgamma(static_cast<T>(N - n + 1), pol)
-            + boost::math::lgamma(static_cast<T>(N - r + 1), pol)
-            - boost::math::lgamma(static_cast<T>(N + 1), pol)
-            - boost::math::lgamma(static_cast<T>(x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(n - x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(r - x + 1), pol)
-            - boost::math::lgamma(static_cast<T>(N - n - r + x + 1), pol);
-         while (log_pdf < tools::log_min_value<T>())
-         {
-            log_pdf += log(static_cast<T>(x)) - log(static_cast<T>(n - x + 1)) - log(static_cast<T>(r - x + 1)) + log(static_cast<T>(N - n - r + x));
-            --x;
-         }
-         // By the time we get here, log_pdf may be fairly inaccurate due to
-         // roundoff errors, get a fresh PDF calculation before proceding:
-         diff = hypergeometric_pdf<T>(x, r, n, N, pol);
-      }
-      while(result + diff / 2 < q)
-      {
-         result += diff;
-         diff = (diff > tools::min_value<T>() * 8)
-            ? x * T(N + x - n - r) * diff / (T(1 + n - x) * T(1 + r - x))
-            : hypergeometric_pdf<T>(x - 1, r, n, N, pol);
-         --x;
-#ifdef BOOST_MATH_INSTRUMENT
-         if(diff != 0)
-         {
-            BOOST_MATH_INSTRUMENT_VARIABLE(x);
-            BOOST_MATH_INSTRUMENT_VARIABLE(diff);
-            BOOST_MATH_INSTRUMENT_VARIABLE(result);
-         }
-#endif
-      }
-      return round_x_from_q(x, q, result, fudge_factor, base, lim, discrete_quantile_type());
-   }
-#ifdef BOOST_MSVC
-#  pragma warning(pop)
-#endif
-}
-
-template <class T, class Policy>
-inline unsigned hypergeometric_quantile(T p, T q, unsigned r, unsigned n, unsigned N, const Policy&)
-{
-   BOOST_FPU_EXCEPTION_GUARD
-   typedef typename tools::promote_args<T>::type result_type;
-   typedef typename policies::evaluation<result_type, Policy>::type value_type;
-   typedef typename policies::normalise<
-      Policy, 
-      policies::promote_float<false>, 
-      policies::promote_double<false>, 
-      policies::assert_undefined<> >::type forwarding_policy;
-
-   return detail::hypergeometric_quantile_imp<value_type>(p, q, r, n, N, forwarding_policy());
-}
-
-}}} // namespaces
-
-#endif
-
--- a/any/include/boost/math/distributions/detail/inv_discrete_quantile.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,571 +0,0 @@
-//  Copyright John Maddock 2007.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
-#define BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
-
-#include <algorithm>
-
-namespace boost{ namespace math{ namespace detail{
-
-//
-// Functor for root finding algorithm:
-//
-template <class Dist>
-struct distribution_quantile_finder
-{
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-
-   distribution_quantile_finder(const Dist d, value_type p, bool c)
-      : dist(d), target(p), comp(c) {}
-
-   value_type operator()(value_type const& x)
-   {
-      return comp ? value_type(target - cdf(complement(dist, x))) : value_type(cdf(dist, x) - target);
-   }
-
-private:
-   Dist dist;
-   value_type target;
-   bool comp;
-};
-//
-// The purpose of adjust_bounds, is to toggle the last bit of the
-// range so that both ends round to the same integer, if possible.
-// If they do both round the same then we terminate the search
-// for the root *very* quickly when finding an integer result.
-// At the point that this function is called we know that "a" is
-// below the root and "b" above it, so this change can not result
-// in the root no longer being bracketed.
-//
-template <class Real, class Tol>
-void adjust_bounds(Real& /* a */, Real& /* b */, Tol const& /* tol */){}
-
-template <class Real>
-void adjust_bounds(Real& /* a */, Real& b, tools::equal_floor const& /* tol */)
-{
-   BOOST_MATH_STD_USING
-   b -= tools::epsilon<Real>() * b;
-}
-
-template <class Real>
-void adjust_bounds(Real& a, Real& /* b */, tools::equal_ceil const& /* tol */)
-{
-   BOOST_MATH_STD_USING
-   a += tools::epsilon<Real>() * a;
-}
-
-template <class Real>
-void adjust_bounds(Real& a, Real& b, tools::equal_nearest_integer const& /* tol */)
-{
-   BOOST_MATH_STD_USING
-   a += tools::epsilon<Real>() * a;
-   b -= tools::epsilon<Real>() * b;
-}
-//
-// This is where all the work is done:
-//
-template <class Dist, class Tolerance>
-typename Dist::value_type 
-   do_inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool comp,
-      typename Dist::value_type guess,
-      const typename Dist::value_type& multiplier,
-      typename Dist::value_type adder,
-      const Tolerance& tol,
-      boost::uintmax_t& max_iter)
-{
-   typedef typename Dist::value_type value_type;
-   typedef typename Dist::policy_type policy_type;
-
-   static const char* function = "boost::math::do_inverse_discrete_quantile<%1%>";
-
-   BOOST_MATH_STD_USING
-
-   distribution_quantile_finder<Dist> f(dist, p, comp);
-   //
-   // Max bounds of the distribution:
-   //
-   value_type min_bound, max_bound;
-   boost::math::tie(min_bound, max_bound) = support(dist);
-
-   if(guess > max_bound)
-      guess = max_bound;
-   if(guess < min_bound)
-      guess = min_bound;
-
-   value_type fa = f(guess);
-   boost::uintmax_t count = max_iter - 1;
-   value_type fb(fa), a(guess), b =0; // Compiler warning C4701: potentially uninitialized local variable 'b' used
-
-   if(fa == 0)
-      return guess;
-
-   //
-   // For small expected results, just use a linear search:
-   //
-   if(guess < 10)
-   {
-      b = a;
-      while((a < 10) && (fa * fb >= 0))
-      {
-         if(fb <= 0)
-         {
-            a = b;
-            b = a + 1;
-            if(b > max_bound)
-               b = max_bound;
-            fb = f(b);
-            --count;
-            if(fb == 0)
-               return b;
-            if(a == b)
-               return b; // can't go any higher!
-         }
-         else
-         {
-            b = a;
-            a = (std::max)(value_type(b - 1), value_type(0));
-            if(a < min_bound)
-               a = min_bound;
-            fa = f(a);
-            --count;
-            if(fa == 0)
-               return a;
-            if(a == b)
-               return a;  //  We can't go any lower than this!
-         }
-      }
-   }
-   //
-   // Try and bracket using a couple of additions first, 
-   // we're assuming that "guess" is likely to be accurate
-   // to the nearest int or so:
-   //
-   else if(adder != 0)
-   {
-      //
-      // If we're looking for a large result, then bump "adder" up
-      // by a bit to increase our chances of bracketing the root:
-      //
-      //adder = (std::max)(adder, 0.001f * guess);
-      if(fa < 0)
-      {
-         b = a + adder;
-         if(b > max_bound)
-            b = max_bound;
-      }
-      else
-      {
-         b = (std::max)(value_type(a - adder), value_type(0));
-         if(b < min_bound)
-            b = min_bound;
-      }
-      fb = f(b);
-      --count;
-      if(fb == 0)
-         return b;
-      if(count && (fa * fb >= 0))
-      {
-         //
-         // We didn't bracket the root, try 
-         // once more:
-         //
-         a = b;
-         fa = fb;
-         if(fa < 0)
-         {
-            b = a + adder;
-            if(b > max_bound)
-               b = max_bound;
-         }
-         else
-         {
-            b = (std::max)(value_type(a - adder), value_type(0));
-            if(b < min_bound)
-               b = min_bound;
-         }
-         fb = f(b);
-         --count;
-      }
-      if(a > b)
-      {
-         using std::swap;
-         swap(a, b);
-         swap(fa, fb);
-      }
-   }
-   //
-   // If the root hasn't been bracketed yet, try again
-   // using the multiplier this time:
-   //
-   if((boost::math::sign)(fb) == (boost::math::sign)(fa))
-   {
-      if(fa < 0)
-      {
-         //
-         // Zero is to the right of x2, so walk upwards
-         // until we find it:
-         //
-         while(((boost::math::sign)(fb) == (boost::math::sign)(fa)) && (a != b))
-         {
-            if(count == 0)
-               return policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, policy_type());
-            a = b;
-            fa = fb;
-            b *= multiplier;
-            if(b > max_bound)
-               b = max_bound;
-            fb = f(b);
-            --count;
-            BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
-         }
-      }
-      else
-      {
-         //
-         // Zero is to the left of a, so walk downwards
-         // until we find it:
-         //
-         while(((boost::math::sign)(fb) == (boost::math::sign)(fa)) && (a != b))
-         {
-            if(fabs(a) < tools::min_value<value_type>())
-            {
-               // Escape route just in case the answer is zero!
-               max_iter -= count;
-               max_iter += 1;
-               return 0;
-            }
-            if(count == 0)
-               return policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, policy_type());
-            b = a;
-            fb = fa;
-            a /= multiplier;
-            if(a < min_bound)
-               a = min_bound;
-            fa = f(a);
-            --count;
-            BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
-         }
-      }
-   }
-   max_iter -= count;
-   if(fa == 0)
-      return a;
-   if(fb == 0)
-      return b;
-   if(a == b)
-      return b;  // Ran out of bounds trying to bracket - there is no answer!
-   //
-   // Adjust bounds so that if we're looking for an integer
-   // result, then both ends round the same way:
-   //
-   adjust_bounds(a, b, tol);
-   //
-   // We don't want zero or denorm lower bounds:
-   //
-   if(a < tools::min_value<value_type>())
-      a = tools::min_value<value_type>();
-   //
-   // Go ahead and find the root:
-   //
-   std::pair<value_type, value_type> r = toms748_solve(f, a, b, fa, fb, tol, count, policy_type());
-   max_iter += count;
-   BOOST_MATH_INSTRUMENT_CODE("max_iter = " << max_iter << " count = " << count);
-   return (r.first + r.second) / 2;
-}
-//
-// Some special routine for rounding up and down:
-// We want to check and see if we are very close to an integer, and if so test to see if
-// that integer is an exact root of the cdf.  We do this because our root finder only
-// guarantees to find *a root*, and there can sometimes be many consecutive floating
-// point values which are all roots.  This is especially true if the target probability
-// is very close 1.
-//
-template <class Dist>
-inline typename Dist::value_type round_to_floor(const Dist& d, typename Dist::value_type result, typename Dist::value_type p, bool c)
-{
-   BOOST_MATH_STD_USING
-   typename Dist::value_type cc = ceil(result);
-   typename Dist::value_type pp = cc <= support(d).second ? c ? cdf(complement(d, cc)) : cdf(d, cc) : 1;
-   if(pp == p)
-      result = cc;
-   else
-      result = floor(result);
-   //
-   // Now find the smallest integer <= result for which we get an exact root:
-   //
-   while(result != 0)
-   {
-      cc = result - 1;
-      if(cc < support(d).first)
-         break;
-      pp = c ? cdf(complement(d, cc)) : cdf(d, cc);
-      if(pp == p)
-         result = cc;
-      else if(c ? pp > p : pp < p)
-         break;
-      result -= 1;
-   }
-
-   return result;
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
-
-template <class Dist>
-inline typename Dist::value_type round_to_ceil(const Dist& d, typename Dist::value_type result, typename Dist::value_type p, bool c)
-{
-   BOOST_MATH_STD_USING
-   typename Dist::value_type cc = floor(result);
-   typename Dist::value_type pp = cc >= support(d).first ? c ? cdf(complement(d, cc)) : cdf(d, cc) : 0;
-   if(pp == p)
-      result = cc;
-   else
-      result = ceil(result);
-   //
-   // Now find the largest integer >= result for which we get an exact root:
-   //
-   while(true)
-   {
-      cc = result + 1;
-      if(cc > support(d).second)
-         break;
-      pp = c ? cdf(complement(d, cc)) : cdf(d, cc);
-      if(pp == p)
-         result = cc;
-      else if(c ? pp < p : pp > p)
-         break;
-      result += 1;
-   }
-
-   return result;
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-//
-// Now finally are the public API functions.
-// There is one overload for each policy,
-// each one is responsible for selecting the correct
-// termination condition, and rounding the result
-// to an int where required.
-//
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      typename Dist::value_type p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::real>&,
-      boost::uintmax_t& max_iter)
-{
-   if(p > 0.5)
-   {
-      p = 1 - p;
-      c = !c;
-   }
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   return do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      guess, 
-      multiplier, 
-      adder, 
-      tools::eps_tolerance<typename Dist::value_type>(policies::digits<typename Dist::value_type, typename Dist::policy_type>()),
-      max_iter);
-}
-
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::integer_round_outwards>&,
-      boost::uintmax_t& max_iter)
-{
-   typedef typename Dist::value_type value_type;
-   BOOST_MATH_STD_USING
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   //
-   // What happens next depends on whether we're looking for an 
-   // upper or lower quantile:
-   //
-   if(pp < 0.5f)
-      return round_to_floor(dist, do_inverse_discrete_quantile(
-         dist, 
-         p, 
-         c,
-         (guess < 1 ? value_type(1) : (value_type)floor(guess)), 
-         multiplier, 
-         adder, 
-         tools::equal_floor(),
-         max_iter), p, c);
-   // else:
-   return round_to_ceil(dist, do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      (value_type)ceil(guess), 
-      multiplier, 
-      adder, 
-      tools::equal_ceil(),
-      max_iter), p, c);
-}
-
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::integer_round_inwards>&,
-      boost::uintmax_t& max_iter)
-{
-   typedef typename Dist::value_type value_type;
-   BOOST_MATH_STD_USING
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   //
-   // What happens next depends on whether we're looking for an 
-   // upper or lower quantile:
-   //
-   if(pp < 0.5f)
-      return round_to_ceil(dist, do_inverse_discrete_quantile(
-         dist, 
-         p, 
-         c,
-         ceil(guess), 
-         multiplier, 
-         adder, 
-         tools::equal_ceil(),
-         max_iter), p, c);
-   // else:
-   return round_to_floor(dist, do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      (guess < 1 ? value_type(1) : floor(guess)), 
-      multiplier, 
-      adder, 
-      tools::equal_floor(),
-      max_iter), p, c);
-}
-
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::integer_round_down>&,
-      boost::uintmax_t& max_iter)
-{
-   typedef typename Dist::value_type value_type;
-   BOOST_MATH_STD_USING
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   return round_to_floor(dist, do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      (guess < 1 ? value_type(1) : floor(guess)), 
-      multiplier, 
-      adder, 
-      tools::equal_floor(),
-      max_iter), p, c);
-}
-
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::integer_round_up>&,
-      boost::uintmax_t& max_iter)
-{
-   BOOST_MATH_STD_USING
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   return round_to_ceil(dist, do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      ceil(guess), 
-      multiplier, 
-      adder, 
-      tools::equal_ceil(),
-      max_iter), p, c);
-}
-
-template <class Dist>
-inline typename Dist::value_type 
-   inverse_discrete_quantile(
-      const Dist& dist,
-      const typename Dist::value_type& p,
-      bool c,
-      const typename Dist::value_type& guess,
-      const typename Dist::value_type& multiplier,
-      const typename Dist::value_type& adder,
-      const policies::discrete_quantile<policies::integer_round_nearest>&,
-      boost::uintmax_t& max_iter)
-{
-   typedef typename Dist::value_type value_type;
-   BOOST_MATH_STD_USING
-   typename Dist::value_type pp = c ? 1 - p : p;
-   if(pp <= pdf(dist, 0))
-      return 0;
-   //
-   // Note that we adjust the guess to the nearest half-integer:
-   // this increase the chances that we will bracket the root
-   // with two results that both round to the same integer quickly.
-   //
-   return round_to_floor(dist, do_inverse_discrete_quantile(
-      dist, 
-      p, 
-      c,
-      (guess < 0.5f ? value_type(1.5f) : floor(guess + 0.5f) + 0.5f), 
-      multiplier, 
-      adder, 
-      tools::equal_nearest_integer(),
-      max_iter) + 0.5f, p, c);
-}
-
-}}} // namespaces
-
-#endif // BOOST_MATH_DISTRIBUTIONS_DETAIL_INV_DISCRETE_QUANTILE
-
--- a/any/include/boost/math/distributions/exponential.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,275 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_EXPONENTIAL_HPP
-#define BOOST_STATS_EXPONENTIAL_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/special_functions/log1p.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4127) // conditional expression is constant
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
-#endif
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-namespace detail{
-//
-// Error check:
-//
-template <class RealType, class Policy>
-inline bool verify_lambda(const char* function, RealType l, RealType* presult, const Policy& pol)
-{
-   if((l <= 0) || !(boost::math::isfinite)(l))
-   {
-      *presult = policies::raise_domain_error<RealType>(
-         function,
-         "The scale parameter \"lambda\" must be > 0, but was: %1%.", l, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool verify_exp_x(const char* function, RealType x, RealType* presult, const Policy& pol)
-{
-   if((x < 0) || (boost::math::isnan)(x))
-   {
-      *presult = policies::raise_domain_error<RealType>(
-         function,
-         "The random variable must be >= 0, but was: %1%.", x, pol);
-      return false;
-   }
-   return true;
-}
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class exponential_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   exponential_distribution(RealType l_lambda = 1)
-      : m_lambda(l_lambda)
-   {
-      RealType err;
-      detail::verify_lambda("boost::math::exponential_distribution<%1%>::exponential_distribution", l_lambda, &err, Policy());
-   } // exponential_distribution
-
-   RealType lambda()const { return m_lambda; }
-
-private:
-   RealType m_lambda;
-};
-
-typedef exponential_distribution<double> exponential;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const exponential_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-    return std::pair<RealType, RealType>(static_cast<RealType>(0), std::numeric_limits<RealType>::infinity()); // 0 to + infinity.
-  }
-  else
-  {
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // 0 to + max
-  }
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const exponential_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   using boost::math::tools::min_value;
-   return std::pair<RealType, RealType>(min_value<RealType>(),  max_value<RealType>());
-   // min_value<RealType>() to avoid a discontinuity at x = 0.
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const exponential_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(const exponential_distribution<%1%>&, %1%)";
-
-   RealType lambda = dist.lambda();
-   RealType result = 0;
-   if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
-      return result;
-   if(0 == detail::verify_exp_x(function, x, &result, Policy()))
-      return result;
-   // Workaround for VC11/12 bug:
-   if ((boost::math::isinf)(x))
-      return 0;
-   result = lambda * exp(-lambda * x);
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const exponential_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const exponential_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   RealType lambda = dist.lambda();
-   if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
-      return result;
-   if(0 == detail::verify_exp_x(function, x, &result, Policy()))
-      return result;
-   result = -boost::math::expm1(-x * lambda, Policy());
-
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const exponential_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const exponential_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   RealType lambda = dist.lambda();
-   if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
-      return result;
-   if(0 == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 0)
-      return 0;
-   if(p == 1)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = -boost::math::log1p(-p, Policy()) / lambda;
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<exponential_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const exponential_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   RealType lambda = c.dist.lambda();
-   if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
-      return result;
-   if(0 == detail::verify_exp_x(function, c.param, &result, Policy()))
-      return result;
-   // Workaround for VC11/12 bug:
-   if (c.param >= tools::max_value<RealType>())
-      return 0;
-   result = exp(-c.param * lambda);
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<exponential_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const exponential_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   RealType lambda = c.dist.lambda();
-   if(0 == detail::verify_lambda(function, lambda, &result, Policy()))
-      return result;
-
-   RealType q = c.param;
-   if(0 == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   if(q == 1)
-      return 0;
-   if(q == 0)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = -log(q) / lambda;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const exponential_distribution<RealType, Policy>& dist)
-{
-   RealType result = 0;
-   RealType lambda = dist.lambda();
-   if(0 == detail::verify_lambda("boost::math::mean(const exponential_distribution<%1%>&)", lambda, &result, Policy()))
-      return result;
-   return 1 / lambda;
-}
-
-template <class RealType, class Policy>
-inline RealType standard_deviation(const exponential_distribution<RealType, Policy>& dist)
-{
-   RealType result = 0;
-   RealType lambda = dist.lambda();
-   if(0 == detail::verify_lambda("boost::math::standard_deviation(const exponential_distribution<%1%>&)", lambda, &result, Policy()))
-      return result;
-   return 1 / lambda;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const exponential_distribution<RealType, Policy>& /*dist*/)
-{
-   return 0;
-}
-
-template <class RealType, class Policy>
-inline RealType median(const exponential_distribution<RealType, Policy>& dist)
-{
-   using boost::math::constants::ln_two;
-   return ln_two<RealType>() / dist.lambda(); // ln(2) / lambda
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const exponential_distribution<RealType, Policy>& /*dist*/)
-{
-   return 2;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const exponential_distribution<RealType, Policy>& /*dist*/)
-{
-   return 9;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const exponential_distribution<RealType, Policy>& /*dist*/)
-{
-   return 6;
-}
-
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_EXPONENTIAL_HPP
--- a/any/include/boost/math/distributions/extreme_value.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_EXTREME_VALUE_HPP
-#define BOOST_STATS_EXTREME_VALUE_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/special_functions/log1p.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-//
-// This is the maximum extreme value distribution, see
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda366g.htm
-// and http://mathworld.wolfram.com/ExtremeValueDistribution.html
-// Also known as a Fisher-Tippett distribution, a log-Weibull
-// distribution or a Gumbel distribution.
-
-#include <utility>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
-#endif
-
-namespace boost{ namespace math{
-
-namespace detail{
-//
-// Error check:
-//
-template <class RealType, class Policy>
-inline bool verify_scale_b(const char* function, RealType b, RealType* presult, const Policy& pol)
-{
-   if((b <= 0) || !(boost::math::isfinite)(b))
-   {
-      *presult = policies::raise_domain_error<RealType>(
-         function,
-         "The scale parameter \"b\" must be finite and > 0, but was: %1%.", b, pol);
-      return false;
-   }
-   return true;
-}
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class extreme_value_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   extreme_value_distribution(RealType a = 0, RealType b = 1)
-      : m_a(a), m_b(b)
-   {
-      RealType err;
-      detail::verify_scale_b("boost::math::extreme_value_distribution<%1%>::extreme_value_distribution", b, &err, Policy());
-      detail::check_finite("boost::math::extreme_value_distribution<%1%>::extreme_value_distribution", a, &err, Policy());
-   } // extreme_value_distribution
-
-   RealType location()const { return m_a; }
-   RealType scale()const { return m_b; }
-
-private:
-   RealType m_a, m_b;
-};
-
-typedef extreme_value_distribution<double> extreme_value;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const extreme_value_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(
-      std::numeric_limits<RealType>::has_infinity ? -std::numeric_limits<RealType>::infinity() : -max_value<RealType>(), 
-      std::numeric_limits<RealType>::has_infinity ? std::numeric_limits<RealType>::infinity() : max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const extreme_value_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(-max_value<RealType>(),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const extreme_value_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(const extreme_value_distribution<%1%>&, %1%)";
-
-   RealType a = dist.location();
-   RealType b = dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b(function, b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if((boost::math::isinf)(x))
-      return 0.0f;
-   if(0 == detail::check_x(function, x, &result, Policy()))
-      return result;
-   RealType e = (a - x) / b;
-   if(e < tools::log_max_value<RealType>())
-      result = exp(e) * exp(-exp(e)) / b;
-   // else.... result *must* be zero since exp(e) is infinite...
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const extreme_value_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)";
-
-   if((boost::math::isinf)(x))
-      return x < 0 ? 0.0f : 1.0f;
-   RealType a = dist.location();
-   RealType b = dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b(function, b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if(0 == detail::check_x("boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)", x, &result, Policy()))
-      return result;
-
-   result = exp(-exp((a-x)/b));
-
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-RealType quantile(const extreme_value_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const extreme_value_distribution<%1%>&, %1%)";
-
-   RealType a = dist.location();
-   RealType b = dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b(function, b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if(0 == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 0)
-      return -policies::raise_overflow_error<RealType>(function, 0, Policy());
-   if(p == 1)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = a - log(-log(p)) * b;
-
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<extreme_value_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)";
-
-   if((boost::math::isinf)(c.param))
-      return c.param < 0 ? 1.0f : 0.0f;
-   RealType a = c.dist.location();
-   RealType b = c.dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b(function, b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if(0 == detail::check_x(function, c.param, &result, Policy()))
-      return result;
-
-   result = -boost::math::expm1(-exp((a-c.param)/b), Policy());
-
-   return result;
-}
-
-template <class RealType, class Policy>
-RealType quantile(const complemented2_type<extreme_value_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const extreme_value_distribution<%1%>&, %1%)";
-
-   RealType a = c.dist.location();
-   RealType b = c.dist.scale();
-   RealType q = c.param;
-   RealType result = 0;
-   if(0 == detail::verify_scale_b(function, b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite(function, a, &result, Policy()))
-      return result;
-   if(0 == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   if(q == 0)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   if(q == 1)
-      return -policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = a - log(-boost::math::log1p(-q, Policy())) * b;
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const extreme_value_distribution<RealType, Policy>& dist)
-{
-   RealType a = dist.location();
-   RealType b = dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b("boost::math::mean(const extreme_value_distribution<%1%>&)", b, &result, Policy()))
-      return result;
-   if (0 == detail::check_finite("boost::math::mean(const extreme_value_distribution<%1%>&)", a, &result, Policy()))
-      return result;
-   return a + constants::euler<RealType>() * b;
-}
-
-template <class RealType, class Policy>
-inline RealType standard_deviation(const extreme_value_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions.
-
-   RealType b = dist.scale();
-   RealType result = 0;
-   if(0 == detail::verify_scale_b("boost::math::standard_deviation(const extreme_value_distribution<%1%>&)", b, &result, Policy()))
-      return result;
-   if(0 == detail::check_finite("boost::math::standard_deviation(const extreme_value_distribution<%1%>&)", dist.location(), &result, Policy()))
-      return result;
-   return constants::pi<RealType>() * b / sqrt(static_cast<RealType>(6));
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const extreme_value_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-
-template <class RealType, class Policy>
-inline RealType median(const extreme_value_distribution<RealType, Policy>& dist)
-{
-  using constants::ln_ln_two;
-   return dist.location() - dist.scale() * ln_ln_two<RealType>();
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const extreme_value_distribution<RealType, Policy>& /*dist*/)
-{
-   //
-   // This is 12 * sqrt(6) * zeta(3) / pi^3:
-   // See http://mathworld.wolfram.com/ExtremeValueDistribution.html
-   //
-   return static_cast<RealType>(1.1395470994046486574927930193898461120875997958366L);
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const extreme_value_distribution<RealType, Policy>& /*dist*/)
-{
-   // See http://mathworld.wolfram.com/ExtremeValueDistribution.html
-   return RealType(27) / 5;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const extreme_value_distribution<RealType, Policy>& /*dist*/)
-{
-   // See http://mathworld.wolfram.com/ExtremeValueDistribution.html
-   return RealType(12) / 5;
-}
-
-
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_EXTREME_VALUE_HPP
--- a/any/include/boost/math/distributions/find_location.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-//  Copyright John Maddock 2007.
-//  Copyright Paul A. Bristow 2007.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_FIND_LOCATION_HPP
-#define BOOST_STATS_FIND_LOCATION_HPP
-
-#include <boost/math/distributions/fwd.hpp> // for all distribution signatures.
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/policies/policy.hpp>
-#include <boost/math/tools/traits.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/math/policies/error_handling.hpp>
-// using boost::math::policies::policy;
-// using boost::math::complement; // will be needed by users who want complement,
-// but NOT placed here to avoid putting it in global scope.
-
-namespace boost
-{
-  namespace math
-  {
-  // Function to find location of random variable z
-  // to give probability p (given scale)
-  // Applies to normal, lognormal, extreme value, Cauchy, (and symmetrical triangular),
-  // enforced by BOOST_STATIC_ASSERT below.
-
-    template <class Dist, class Policy>
-    inline
-      typename Dist::value_type find_location( // For example, normal mean.
-      typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p.
-      // For example, a nominal minimum acceptable z, so that p * 100 % are > z
-      typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z.
-      typename Dist::value_type scale, // scale parameter, for example, normal standard deviation.
-      const Policy& pol 
-      )
-    {
-#if !defined(BOOST_NO_SFINAE) && !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
-      // Will fail to compile here if try to use with a distribution without scale & location,
-      // for example pareto, and many others.  These tests are disabled by the pp-logic
-      // above if the compiler doesn't support the SFINAE tricks used in the traits class.
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_distribution<Dist>::value); 
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_scaled_distribution<Dist>::value);
-#endif
-      static const char* function = "boost::math::find_location<Dist, Policy>&, %1%)";
-
-      if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "Probability parameter was %1%, but must be >= 0 and <= 1!", p, pol);
-      }
-      if(!(boost::math::isfinite)(z))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "z parameter was %1%, but must be finite!", z, pol);
-      }
-      if(!(boost::math::isfinite)(scale))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "scale parameter was %1%, but must be finite!", scale, pol);
-      }
-        
-      //cout << "z " << z << ", p " << p << ",  quantile(Dist(), p) "
-      //  << quantile(Dist(), p) << ", quan * scale " << quantile(Dist(), p) * scale << endl;
-      return z - (quantile(Dist(), p) * scale);
-    } // find_location
-
-    template <class Dist>
-    inline // with default policy.
-      typename Dist::value_type find_location( // For example, normal mean.
-      typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p.
-      // For example, a nominal minimum acceptable z, so that p * 100 % are > z
-      typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z.
-      typename Dist::value_type scale) // scale parameter, for example, normal standard deviation.
-    { // Forward to find_location with default policy.
-       return (find_location<Dist>(z, p, scale, policies::policy<>()));
-    } // find_location
-
-    // So the user can start from the complement q = (1 - p) of the probability p,
-    // for example, l = find_location<normal>(complement(z, q, sd));
-
-    template <class Dist, class Real1, class Real2, class Real3>
-    inline typename Dist::value_type find_location( // Default policy.
-      complemented3_type<Real1, Real2, Real3> const& c)
-    {
-      static const char* function = "boost::math::find_location<Dist, Policy>&, %1%)";
-
-      typename Dist::value_type p = c.param1;
-      if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "Probability parameter was %1%, but must be >= 0 and <= 1!", p, policies::policy<>());
-      }
-      typename Dist::value_type z = c.dist;
-      if(!(boost::math::isfinite)(z))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "z parameter was %1%, but must be finite!", z, policies::policy<>());
-      }
-      typename Dist::value_type scale = c.param2;
-      if(!(boost::math::isfinite)(scale))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "scale parameter was %1%, but must be finite!", scale, policies::policy<>());
-      }
-       // cout << "z " << c.dist << ", quantile (Dist(), " << c.param1 << ") * scale " << c.param2 << endl;
-       return z - quantile(Dist(), p) * scale;
-    } // find_location complement
-
-
-    template <class Dist, class Real1, class Real2, class Real3, class Real4>
-    inline typename Dist::value_type find_location( // Explicit policy.
-      complemented4_type<Real1, Real2, Real3, Real4> const& c)
-    {
-      static const char* function = "boost::math::find_location<Dist, Policy>&, %1%)";
-
-      typename Dist::value_type p = c.param1;
-      if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "Probability parameter was %1%, but must be >= 0 and <= 1!", p, c.param3);
-      }
-      typename Dist::value_type z = c.dist;
-      if(!(boost::math::isfinite)(z))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "z parameter was %1%, but must be finite!", z, c.param3);
-      }
-      typename Dist::value_type scale = c.param2;
-      if(!(boost::math::isfinite)(scale))
-      {
-       return policies::raise_domain_error<typename Dist::value_type>(
-           function, "scale parameter was %1%, but must be finite!", scale, c.param3);
-      }
-       // cout << "z " << c.dist << ", quantile (Dist(), " << c.param1 << ") * scale " << c.param2 << endl;
-       return z - quantile(Dist(), p) * scale;
-    } // find_location complement
-
-  } // namespace boost
-} // namespace math
-
-#endif // BOOST_STATS_FIND_LOCATION_HPP
-
--- a/any/include/boost/math/distributions/find_scale.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-//  Copyright John Maddock 2007.
-//  Copyright Paul A. Bristow 2007.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_FIND_SCALE_HPP
-#define BOOST_STATS_FIND_SCALE_HPP
-
-#include <boost/math/distributions/fwd.hpp> // for all distribution signatures.
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/policies/policy.hpp>
-// using boost::math::policies::policy;
-#include <boost/math/tools/traits.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/math/policies/error_handling.hpp>
-// using boost::math::complement; // will be needed by users who want complement,
-// but NOT placed here to avoid putting it in global scope.
-
-namespace boost
-{
-  namespace math
-  {
-    // Function to find location of random variable z
-    // to give probability p (given scale)
-    // Applies to normal, lognormal, extreme value, Cauchy, (and symmetrical triangular),
-    // distributions that have scale.
-    // BOOST_STATIC_ASSERTs, see below, are used to enforce this.
-
-    template <class Dist, class Policy>
-    inline
-      typename Dist::value_type find_scale( // For example, normal mean.
-      typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p.
-      // For example, a nominal minimum acceptable weight z, so that p * 100 % are > z
-      typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z.
-      typename Dist::value_type location, // location parameter, for example, normal distribution mean.
-      const Policy& pol 
-      )
-    {
-#if !defined(BOOST_NO_SFINAE) && !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_distribution<Dist>::value); 
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_scaled_distribution<Dist>::value); 
-#endif
-      static const char* function = "boost::math::find_scale<Dist, Policy>(%1%, %1%, %1%, Policy)";
-
-      if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "Probability parameter was %1%, but must be >= 0 and <= 1!", p, pol);
-      }
-      if(!(boost::math::isfinite)(z))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale z parameter was %1%, but must be finite!", z, pol);
-      }
-      if(!(boost::math::isfinite)(location))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale location parameter was %1%, but must be finite!", location, pol);
-      }
-
-      //cout << "z " << z << ", p " << p << ",  quantile(Dist(), p) "
-      //<< quantile(Dist(), p) << ", z - mean " << z - location 
-      //<<", sd " << (z - location)  / quantile(Dist(), p) << endl;
-
-      //quantile(N01, 0.001) -3.09023
-      //quantile(N01, 0.01) -2.32635
-      //quantile(N01, 0.05) -1.64485
-      //quantile(N01, 0.333333) -0.430728
-      //quantile(N01, 0.5) 0  
-      //quantile(N01, 0.666667) 0.430728
-      //quantile(N01, 0.9) 1.28155
-      //quantile(N01, 0.95) 1.64485
-      //quantile(N01, 0.99) 2.32635
-      //quantile(N01, 0.999) 3.09023
-
-      typename Dist::value_type result = 
-        (z - location)  // difference between desired x and current location.
-        / quantile(Dist(), p); // standard distribution.
-
-      if (result <= 0)
-      { // If policy isn't to throw, return the scale <= 0.
-        policies::raise_evaluation_error<typename Dist::value_type>(function,
-          "Computed scale (%1%) is <= 0!" " Was the complement intended?",
-          result, Policy());
-      }
-      return result;
-    } // template <class Dist, class Policy> find_scale
-
-    template <class Dist>
-    inline // with default policy.
-      typename Dist::value_type find_scale( // For example, normal mean.
-      typename Dist::value_type z, // location of random variable z to give probability, P(X > z) == p.
-      // For example, a nominal minimum acceptable z, so that p * 100 % are > z
-      typename Dist::value_type p, // probability value desired at x, say 0.95 for 95% > z.
-      typename Dist::value_type location) // location parameter, for example, mean.
-    { // Forward to find_scale using the default policy.
-      return (find_scale<Dist>(z, p, location, policies::policy<>()));
-    } // find_scale
-
-    template <class Dist, class Real1, class Real2, class Real3, class Policy>
-    inline typename Dist::value_type find_scale(
-      complemented4_type<Real1, Real2, Real3, Policy> const& c)
-    {
-      //cout << "cparam1 q " << c.param1 // q
-      //  << ", c.dist z " << c.dist // z
-      //  << ", c.param2 l " << c.param2 // l
-      //  << ", quantile (Dist(), c.param1 = q) "
-      //  << quantile(Dist(), c.param1) //q
-      //  << endl;
-
-#if !defined(BOOST_NO_SFINAE) && !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_distribution<Dist>::value); 
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_scaled_distribution<Dist>::value); 
-#endif
-      static const char* function = "boost::math::find_scale<Dist, Policy>(complement(%1%, %1%, %1%, Policy))";
-
-      // Checks on arguments, as not complemented version,
-      // Explicit policy.
-      typename Dist::value_type q = c.param1;
-      if(!(boost::math::isfinite)(q) || (q < 0) || (q > 1))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "Probability parameter was %1%, but must be >= 0 and <= 1!", q, c.param3);
-      }
-      typename Dist::value_type z = c.dist;
-      if(!(boost::math::isfinite)(z))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale z parameter was %1%, but must be finite!", z, c.param3);
-      }
-      typename Dist::value_type location = c.param2;
-      if(!(boost::math::isfinite)(location))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale location parameter was %1%, but must be finite!", location, c.param3);
-      }
-
-      typename Dist::value_type result = 
-        (c.dist - c.param2)  // difference between desired x and current location.
-        / quantile(complement(Dist(), c.param1));
-      //     (  z    - location) / (quantile(complement(Dist(),  q)) 
-      if (result <= 0)
-      { // If policy isn't to throw, return the scale <= 0.
-        policies::raise_evaluation_error<typename Dist::value_type>(function,
-          "Computed scale (%1%) is <= 0!" " Was the complement intended?",
-          result, Policy());
-      }
-      return result;
-    } // template <class Dist, class Policy, class Real1, class Real2, class Real3> typename Dist::value_type find_scale
-
-    // So the user can start from the complement q = (1 - p) of the probability p,
-    // for example, s = find_scale<normal>(complement(z, q, l));
-
-    template <class Dist, class Real1, class Real2, class Real3>
-    inline typename Dist::value_type find_scale(
-      complemented3_type<Real1, Real2, Real3> const& c)
-    {
-      //cout << "cparam1 q " << c.param1 // q
-      //  << ", c.dist z " << c.dist // z
-      //  << ", c.param2 l " << c.param2 // l
-      //  << ", quantile (Dist(), c.param1 = q) "
-      //  << quantile(Dist(), c.param1) //q
-      //  << endl;
-
-#if !defined(BOOST_NO_SFINAE) && !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_distribution<Dist>::value); 
-      BOOST_STATIC_ASSERT(::boost::math::tools::is_scaled_distribution<Dist>::value); 
-#endif
-      static const char* function = "boost::math::find_scale<Dist, Policy>(complement(%1%, %1%, %1%, Policy))";
-
-      // Checks on arguments, as not complemented version,
-      // default policy policies::policy<>().
-      typename Dist::value_type q = c.param1;
-      if(!(boost::math::isfinite)(q) || (q < 0) || (q > 1))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "Probability parameter was %1%, but must be >= 0 and <= 1!", q, policies::policy<>());
-      }
-      typename Dist::value_type z = c.dist;
-      if(!(boost::math::isfinite)(z))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale z parameter was %1%, but must be finite!", z, policies::policy<>());
-      }
-      typename Dist::value_type location = c.param2;
-      if(!(boost::math::isfinite)(location))
-      {
-        return policies::raise_domain_error<typename Dist::value_type>(
-          function, "find_scale location parameter was %1%, but must be finite!", location, policies::policy<>());
-      }
-
-      typename Dist::value_type result = 
-        (z - location)  // difference between desired x and current location.
-        / quantile(complement(Dist(), q));
-      //     (  z    - location) / (quantile(complement(Dist(),  q)) 
-      if (result <= 0)
-      { // If policy isn't to throw, return the scale <= 0.
-        policies::raise_evaluation_error<typename Dist::value_type>(function,
-          "Computed scale (%1%) is <= 0!" " Was the complement intended?",
-          result, policies::policy<>()); // This is only the default policy - also Want a version with Policy here.
-      }
-      return result;
-    } // template <class Dist, class Real1, class Real2, class Real3> typename Dist::value_type find_scale
-
-  } // namespace boost
-} // namespace math
-
-#endif // BOOST_STATS_FIND_SCALE_HPP
--- a/any/include/boost/math/distributions/fisher_f.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,387 +0,0 @@
-// Copyright John Maddock 2006.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_FISHER_F_HPP
-#define BOOST_MATH_DISTRIBUTIONS_FISHER_F_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for incomplete beta.
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-template <class RealType = double, class Policy = policies::policy<> >
-class fisher_f_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   fisher_f_distribution(const RealType& i, const RealType& j) : m_df1(i), m_df2(j)
-   {
-      static const char* function = "fisher_f_distribution<%1%>::fisher_f_distribution";
-      RealType result;
-      detail::check_df(
-         function, m_df1, &result, Policy());
-      detail::check_df(
-         function, m_df2, &result, Policy());
-   } // fisher_f_distribution
-
-   RealType degrees_of_freedom1()const
-   {
-      return m_df1;
-   }
-   RealType degrees_of_freedom2()const
-   {
-      return m_df2;
-   }
-
-private:
-   //
-   // Data members:
-   //
-   RealType m_df1;  // degrees of freedom are a real number.
-   RealType m_df2;  // degrees of freedom are a real number.
-};
-
-typedef fisher_f_distribution<double> fisher_f;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const fisher_f_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const fisher_f_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-RealType pdf(const fisher_f_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   static const char* function = "boost::math::pdf(fisher_f_distribution<%1%> const&, %1%)";
-   if(false == (detail::check_df(
-         function, df1, &error_result, Policy())
-         && detail::check_df(
-         function, df2, &error_result, Policy())))
-      return error_result;
-
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Random variable parameter was %1%, but must be > 0 !", x, Policy());
-   }
-
-   if(x == 0)
-   {
-      // special cases:
-      if(df1 < 2)
-         return policies::raise_overflow_error<RealType>(
-            function, 0, Policy());
-      else if(df1 == 2)
-         return 1;
-      else
-         return 0;
-   }
-
-   //
-   // You reach this formula by direct differentiation of the
-   // cdf expressed in terms of the incomplete beta.
-   //
-   // There are two versions so we don't pass a value of z
-   // that is very close to 1 to ibeta_derivative: for some values
-   // of df1 and df2, all the change takes place in this area.
-   //
-   RealType v1x = df1 * x;
-   RealType result;
-   if(v1x > df2)
-   {
-      result = (df2 * df1) / ((df2 + v1x) * (df2 + v1x));
-      result *= ibeta_derivative(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy());
-   }
-   else
-   {
-      result = df2 + df1 * x;
-      result = (result * df1 - x * df1 * df1) / (result * result);
-      result *= ibeta_derivative(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
-   }
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const fisher_f_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   static const char* function = "boost::math::cdf(fisher_f_distribution<%1%> const&, %1%)";
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-         function, df1, &error_result, Policy())
-         && detail::check_df(
-         function, df2, &error_result, Policy()))
-      return error_result;
-
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
-   }
-
-   RealType v1x = df1 * x;
-   //
-   // There are two equivalent formulas used here, the aim is
-   // to prevent the final argument to the incomplete beta
-   // from being too close to 1: for some values of df1 and df2
-   // the rate of change can be arbitrarily large in this area,
-   // whilst the value we're passing will have lost information
-   // content as a result of being 0.999999something.  Better
-   // to switch things around so we're passing 1-z instead.
-   //
-   return v1x > df2
-      ? boost::math::ibetac(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy())
-      : boost::math::ibeta(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const fisher_f_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   static const char* function = "boost::math::quantile(fisher_f_distribution<%1%> const&, %1%)";
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == (detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy())
-         && detail::check_probability(
-            function, p, &error_result, Policy())))
-      return error_result;
-
-   // With optimizations turned on, gcc wrongly warns about y being used
-   // uninitializated unless we initialize it to something:
-   RealType x, y(0);
-
-   x = boost::math::ibeta_inv(df1 / 2, df2 / 2, p, &y, Policy());
-
-   return df2 * x / (df1 * y);
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<fisher_f_distribution<RealType, Policy>, RealType>& c)
-{
-   static const char* function = "boost::math::cdf(fisher_f_distribution<%1%> const&, %1%)";
-   RealType df1 = c.dist.degrees_of_freedom1();
-   RealType df2 = c.dist.degrees_of_freedom2();
-   RealType x = c.param;
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-         function, df1, &error_result, Policy())
-         && detail::check_df(
-         function, df2, &error_result, Policy()))
-      return error_result;
-
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
-   }
-
-   RealType v1x = df1 * x;
-   //
-   // There are two equivalent formulas used here, the aim is
-   // to prevent the final argument to the incomplete beta
-   // from being too close to 1: for some values of df1 and df2
-   // the rate of change can be arbitrarily large in this area,
-   // whilst the value we're passing will have lost information
-   // content as a result of being 0.999999something.  Better
-   // to switch things around so we're passing 1-z instead.
-   //
-   return v1x > df2
-      ? boost::math::ibeta(df2 / 2, df1 / 2, df2 / (df2 + v1x), Policy())
-      : boost::math::ibetac(df1 / 2, df2 / 2, v1x / (df2 + v1x), Policy());
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<fisher_f_distribution<RealType, Policy>, RealType>& c)
-{
-   static const char* function = "boost::math::quantile(fisher_f_distribution<%1%> const&, %1%)";
-   RealType df1 = c.dist.degrees_of_freedom1();
-   RealType df2 = c.dist.degrees_of_freedom2();
-   RealType p = c.param;
-   // Error check:
-   RealType error_result = 0;
-   if(false == (detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy())
-         && detail::check_probability(
-            function, p, &error_result, Policy())))
-      return error_result;
-
-   RealType x, y;
-
-   x = boost::math::ibetac_inv(df1 / 2, df2 / 2, p, &y, Policy());
-
-   return df2 * x / (df1 * y);
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const fisher_f_distribution<RealType, Policy>& dist)
-{ // Mean of F distribution = v.
-   static const char* function = "boost::math::mean(fisher_f_distribution<%1%> const&)";
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy()))
-      return error_result;
-   if(df2 <= 2)
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mean.", df2, Policy());
-   }
-   return df2 / (df2 - 2);
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const fisher_f_distribution<RealType, Policy>& dist)
-{ // Variance of F distribution.
-   static const char* function = "boost::math::variance(fisher_f_distribution<%1%> const&)";
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy()))
-      return error_result;
-   if(df2 <= 4)
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Second degree of freedom was %1% but must be > 4 in order for the distribution to have a valid variance.", df2, Policy());
-   }
-   return 2 * df2 * df2 * (df1 + df2 - 2) / (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));
-} // variance
-
-template <class RealType, class Policy>
-inline RealType mode(const fisher_f_distribution<RealType, Policy>& dist)
-{
-   static const char* function = "boost::math::mode(fisher_f_distribution<%1%> const&)";
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy()))
-      return error_result;
-   if(df2 <= 2)
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Second degree of freedom was %1% but must be > 2 in order for the distribution to have a mode.", df2, Policy());
-   }
-   return df2 * (df1 - 2) / (df1 * (df2 + 2));
-}
-
-//template <class RealType, class Policy>
-//inline RealType median(const fisher_f_distribution<RealType, Policy>& dist)
-//{ // Median of Fisher F distribution is not defined.
-//  return tools::domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
-//  } // median
-
-// Now implemented via quantile(half) in derived accessors.
-
-template <class RealType, class Policy>
-inline RealType skewness(const fisher_f_distribution<RealType, Policy>& dist)
-{
-   static const char* function = "boost::math::skewness(fisher_f_distribution<%1%> const&)";
-   BOOST_MATH_STD_USING // ADL of std names
-   // See http://mathworld.wolfram.com/F-Distribution.html
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy()))
-      return error_result;
-   if(df2 <= 6)
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Second degree of freedom was %1% but must be > 6 in order for the distribution to have a skewness.", df2, Policy());
-   }
-   return 2 * (df2 + 2 * df1 - 2) * sqrt((2 * df2 - 8) / (df1 * (df2 + df1 - 2))) / (df2 - 6);
-}
-
-template <class RealType, class Policy>
-RealType kurtosis_excess(const fisher_f_distribution<RealType, Policy>& dist);
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const fisher_f_distribution<RealType, Policy>& dist)
-{
-   return 3 + kurtosis_excess(dist);
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const fisher_f_distribution<RealType, Policy>& dist)
-{
-   static const char* function = "boost::math::kurtosis_excess(fisher_f_distribution<%1%> const&)";
-   // See http://mathworld.wolfram.com/F-Distribution.html
-   RealType df1 = dist.degrees_of_freedom1();
-   RealType df2 = dist.degrees_of_freedom2();
-   // Error check:
-   RealType error_result = 0;
-   if(false == detail::check_df(
-            function, df1, &error_result, Policy())
-         && detail::check_df(
-            function, df2, &error_result, Policy()))
-      return error_result;
-   if(df2 <= 8)
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "Second degree of freedom was %1% but must be > 8 in order for the distribution to have a kutosis.", df2, Policy());
-   }
-   RealType df2_2 = df2 * df2;
-   RealType df1_2 = df1 * df1;
-   RealType n = -16 + 20 * df2 - 8 * df2_2 + df2_2 * df2 + 44 * df1 - 32 * df2 * df1 + 5 * df2_2 * df1 - 22 * df1_2 + 5 * df2 * df1_2;
-   n *= 12;
-   RealType d = df1 * (df2 - 6) * (df2 - 8) * (df1 + df2 - 2);
-   return n / d;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_FISHER_F_HPP
--- a/any/include/boost/math/distributions/fwd.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-// fwd.hpp Forward declarations of Boost.Math distributions.
-
-// Copyright Paul A. Bristow 2007, 2010, 2012, 2014.
-// Copyright John Maddock 2007.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_FWD_HPP
-#define BOOST_MATH_DISTRIBUTIONS_FWD_HPP
-
-// 33 distributions at Boost 1.9.1 after adding hyperexpon and arcsine
-
-namespace boost{ namespace math{
-
-template <class RealType, class Policy>
-class arcsine_distribution;
-
-template <class RealType, class Policy>
-class bernoulli_distribution;
-
-template <class RealType, class Policy>
-class beta_distribution;
-
-template <class RealType, class Policy>
-class binomial_distribution;
-
-template <class RealType, class Policy>
-class cauchy_distribution;
-
-template <class RealType, class Policy>
-class chi_squared_distribution;
-
-template <class RealType, class Policy>
-class exponential_distribution;
-
-template <class RealType, class Policy>
-class extreme_value_distribution;
-
-template <class RealType, class Policy>
-class fisher_f_distribution;
-
-template <class RealType, class Policy>
-class gamma_distribution;
-
-template <class RealType, class Policy>
-class geometric_distribution;
-
-template <class RealType, class Policy>
-class hyperexponential_distribution;
-
-template <class RealType, class Policy>
-class hypergeometric_distribution;
-
-template <class RealType, class Policy>
-class inverse_chi_squared_distribution;
-
-template <class RealType, class Policy>
-class inverse_gamma_distribution;
-
-template <class RealType, class Policy>
-class inverse_gaussian_distribution;
-
-template <class RealType, class Policy>
-class laplace_distribution;
-
-template <class RealType, class Policy>
-class logistic_distribution;
-
-template <class RealType, class Policy>
-class lognormal_distribution;
-
-template <class RealType, class Policy>
-class negative_binomial_distribution;
-
-template <class RealType, class Policy>
-class non_central_beta_distribution;
-
-template <class RealType, class Policy>
-class non_central_chi_squared_distribution;
-
-template <class RealType, class Policy>
-class non_central_f_distribution;
-
-template <class RealType, class Policy>
-class non_central_t_distribution;
-
-template <class RealType, class Policy>
-class normal_distribution;
-
-template <class RealType, class Policy>
-class pareto_distribution;
-
-template <class RealType, class Policy>
-class poisson_distribution;
-
-template <class RealType, class Policy>
-class rayleigh_distribution;
-
-template <class RealType, class Policy>
-class skew_normal_distribution;
-
-template <class RealType, class Policy>
-class students_t_distribution;
-
-template <class RealType, class Policy>
-class triangular_distribution;
-
-template <class RealType, class Policy>
-class uniform_distribution;
-
-template <class RealType, class Policy>
-class weibull_distribution;
-
-}} // namespaces
-
-#define BOOST_MATH_DECLARE_DISTRIBUTIONS(Type, Policy)\
-   typedef boost::math::arcsine_distribution<Type, Policy> arcsine;\
-   typedef boost::math::bernoulli_distribution<Type, Policy> bernoulli;\
-   typedef boost::math::beta_distribution<Type, Policy> beta;\
-   typedef boost::math::binomial_distribution<Type, Policy> binomial;\
-   typedef boost::math::cauchy_distribution<Type, Policy> cauchy;\
-   typedef boost::math::chi_squared_distribution<Type, Policy> chi_squared;\
-   typedef boost::math::exponential_distribution<Type, Policy> exponential;\
-   typedef boost::math::extreme_value_distribution<Type, Policy> extreme_value;\
-   typedef boost::math::fisher_f_distribution<Type, Policy> fisher_f;\
-   typedef boost::math::gamma_distribution<Type, Policy> gamma;\
-   typedef boost::math::geometric_distribution<Type, Policy> geometric;\
-   typedef boost::math::hypergeometric_distribution<Type, Policy> hypergeometric;\
-   typedef boost::math::inverse_chi_squared_distribution<Type, Policy> inverse_chi_squared;\
-   typedef boost::math::inverse_gaussian_distribution<Type, Policy> inverse_gaussian;\
-   typedef boost::math::inverse_gamma_distribution<Type, Policy> inverse_gamma;\
-   typedef boost::math::laplace_distribution<Type, Policy> laplace;\
-   typedef boost::math::logistic_distribution<Type, Policy> logistic;\
-   typedef boost::math::lognormal_distribution<Type, Policy> lognormal;\
-   typedef boost::math::negative_binomial_distribution<Type, Policy> negative_binomial;\
-   typedef boost::math::non_central_beta_distribution<Type, Policy> non_central_beta;\
-   typedef boost::math::non_central_chi_squared_distribution<Type, Policy> non_central_chi_squared;\
-   typedef boost::math::non_central_f_distribution<Type, Policy> non_central_f;\
-   typedef boost::math::non_central_t_distribution<Type, Policy> non_central_t;\
-   typedef boost::math::normal_distribution<Type, Policy> normal;\
-   typedef boost::math::pareto_distribution<Type, Policy> pareto;\
-   typedef boost::math::poisson_distribution<Type, Policy> poisson;\
-   typedef boost::math::rayleigh_distribution<Type, Policy> rayleigh;\
-   typedef boost::math::skew_normal_distribution<Type, Policy> skew_normal;\
-   typedef boost::math::students_t_distribution<Type, Policy> students_t;\
-   typedef boost::math::triangular_distribution<Type, Policy> triangular;\
-   typedef boost::math::uniform_distribution<Type, Policy> uniform;\
-   typedef boost::math::weibull_distribution<Type, Policy> weibull;
-
-#endif // BOOST_MATH_DISTRIBUTIONS_FWD_HPP
--- a/any/include/boost/math/distributions/gamma.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_GAMMA_HPP
-#define BOOST_STATS_GAMMA_HPP
-
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda366b.htm
-// http://mathworld.wolfram.com/GammaDistribution.html
-// http://en.wikipedia.org/wiki/Gamma_distribution
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-namespace detail
-{
-
-template <class RealType, class Policy>
-inline bool check_gamma_shape(
-      const char* function,
-      RealType shape,
-      RealType* result, const Policy& pol)
-{
-   if((shape <= 0) || !(boost::math::isfinite)(shape))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Shape parameter is %1%, but must be > 0 !", shape, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_gamma_x(
-      const char* function,
-      RealType const& x,
-      RealType* result, const Policy& pol)
-{
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate is %1% but must be >= 0 !", x, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_gamma(
-      const char* function,
-      RealType scale,
-      RealType shape,
-      RealType* result, const Policy& pol)
-{
-   return check_scale(function, scale, result, pol) && check_gamma_shape(function, shape, result, pol);
-}
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class gamma_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   gamma_distribution(RealType l_shape, RealType l_scale = 1)
-      : m_shape(l_shape), m_scale(l_scale)
-   {
-      RealType result;
-      detail::check_gamma("boost::math::gamma_distribution<%1%>::gamma_distribution", l_scale, l_shape, &result, Policy());
-   }
-
-   RealType shape()const
-   {
-      return m_shape;
-   }
-
-   RealType scale()const
-   {
-      return m_scale;
-   }
-private:
-   //
-   // Data members:
-   //
-   RealType m_shape;     // distribution shape
-   RealType m_scale;     // distribution scale
-};
-
-// NO typedef because of clash with name of gamma function.
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const gamma_distribution<RealType, Policy>& /* dist */)
-{ // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const gamma_distribution<RealType, Policy>& /* dist */)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   using boost::math::tools::min_value;
-   return std::pair<RealType, RealType>(min_value<RealType>(),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const gamma_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_gamma_x(function, x, &result, Policy()))
-      return result;
-
-   if(x == 0)
-   {
-      return 0;
-   }
-   result = gamma_p_derivative(shape, x / scale, Policy()) / scale;
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const gamma_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_gamma_x(function, x, &result, Policy()))
-      return result;
-
-   result = boost::math::gamma_p(shape, x / scale, Policy());
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const gamma_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 1)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = gamma_p_inv(shape, p, Policy()) * scale;
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<gamma_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_gamma_x(function, c.param, &result, Policy()))
-      return result;
-
-   result = gamma_q(shape, c.param / scale, Policy());
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<gamma_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-   RealType q = c.param;
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   if(q == 0)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = gamma_q_inv(shape, q, Policy()) * scale;
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::mean(const gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-
-   result = shape * scale;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType variance(const gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::variance(const gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-
-   result = shape * scale * scale;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::mode(const gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-
-   if(shape < 1)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "The mode of the gamma distribution is only defined for values of the shape parameter >= 1, but got %1%.",
-         shape, Policy());
-
-   result = (shape - 1) * scale;
-   return result;
-}
-
-//template <class RealType, class Policy>
-//inline RealType median(const gamma_distribution<RealType, Policy>& dist)
-//{  // Rely on default definition in derived accessors.
-//}
-
-template <class RealType, class Policy>
-inline RealType skewness(const gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::skewness(const gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-
-   result = 2 / sqrt(shape);
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::kurtosis_excess(const gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_gamma(function, scale, shape, &result, Policy()))
-      return result;
-
-   result = 6 / shape;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const gamma_distribution<RealType, Policy>& dist)
-{
-   return kurtosis_excess(dist) + 3;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_GAMMA_HPP
-
-
--- a/any/include/boost/math/distributions/geometric.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,516 +0,0 @@
-// boost\math\distributions\geometric.hpp
-
-// Copyright John Maddock 2010.
-// Copyright Paul A. Bristow 2010.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// geometric distribution is a discrete probability distribution.
-// It expresses the probability distribution of the number (k) of
-// events, occurrences, failures or arrivals before the first success.
-// supported on the set {0, 1, 2, 3...}
-
-// Note that the set includes zero (unlike some definitions that start at one).
-
-// The random variate k is the number of events, occurrences or arrivals.
-// k argument may be integral, signed, or unsigned, or floating point.
-// If necessary, it has already been promoted from an integral type.
-
-// Note that the geometric distribution
-// (like others including the binomial, geometric & Bernoulli)
-// is strictly defined as a discrete function:
-// only integral values of k are envisaged.
-// However because the method of calculation uses a continuous gamma function,
-// it is convenient to treat it as if a continous function,
-// and permit non-integral values of k.
-// To enforce the strict mathematical model, users should use floor or ceil functions
-// on k outside this function to ensure that k is integral.
-
-// See http://en.wikipedia.org/wiki/geometric_distribution
-// http://documents.wolfram.com/v5/Add-onsLinks/StandardPackages/Statistics/DiscreteDistributions.html
-// http://mathworld.wolfram.com/GeometricDistribution.html
-
-#ifndef BOOST_MATH_SPECIAL_GEOMETRIC_HPP
-#define BOOST_MATH_SPECIAL_GEOMETRIC_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for ibeta(a, b, x) == Ix(a, b).
-#include <boost/math/distributions/complement.hpp> // complement.
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks domain_error & logic_error.
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
-
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/if.hpp>
-
-#include <limits> // using std::numeric_limits;
-#include <utility>
-
-#if defined (BOOST_MSVC)
-#  pragma warning(push)
-// This believed not now necessary, so commented out.
-//#  pragma warning(disable: 4702) // unreachable code.
-// in domain_error_imp in error_handling.
-#endif
-
-namespace boost
-{
-  namespace math
-  {
-    namespace geometric_detail
-    {
-      // Common error checking routines for geometric distribution function:
-      template <class RealType, class Policy>
-      inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      {
-        if( !(boost::math::isfinite)(p) || (p < 0) || (p > 1) )
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-          return false;
-        }
-        return true;
-      }
-
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      {
-        return check_success_fraction(function, p, result, pol);
-      }
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_k(const char* function,  const RealType& p, RealType k, RealType* result, const Policy& pol)
-      {
-        if(check_dist(function, p, result, pol) == false)
-        {
-          return false;
-        }
-        if( !(boost::math::isfinite)(k) || (k < 0) )
-        { // Check k failures.
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Number of failures argument is %1%, but must be >= 0 !", k, pol);
-          return false;
-        }
-        return true;
-      } // Check_dist_and_k
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, RealType p, RealType prob, RealType* result, const Policy& pol)
-      {
-        if((check_dist(function, p, result, pol) && detail::check_probability(function, prob, result, pol)) == false)
-        {
-          return false;
-        }
-        return true;
-      } // check_dist_and_prob
-    } //  namespace geometric_detail
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class geometric_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      geometric_distribution(RealType p) : m_p(p)
-      { // Constructor stores success_fraction p.
-        RealType result;
-        geometric_detail::check_dist(
-          "geometric_distribution<%1%>::geometric_distribution",
-          m_p, // Check success_fraction 0 <= p <= 1.
-          &result, Policy());
-      } // geometric_distribution constructor.
-
-      // Private data getter class member functions.
-      RealType success_fraction() const
-      { // Probability of success as fraction in range 0 to 1.
-        return m_p;
-      }
-      RealType successes() const
-      { // Total number of successes r = 1 (for compatibility with negative binomial?).
-        return 1;
-      }
-
-      // Parameter estimation.
-      // (These are copies of negative_binomial distribution with successes = 1).
-      static RealType find_lower_bound_on_p(
-        RealType trials,
-        RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
-      {
-        static const char* function = "boost::math::geometric<%1%>::find_lower_bound_on_p";
-        RealType result = 0;  // of error checks.
-        RealType successes = 1;
-        RealType failures = trials - successes;
-        if(false == detail::check_probability(function, alpha, &result, Policy())
-          && geometric_detail::check_dist_and_k(
-          function, RealType(0), failures, &result, Policy()))
-        {
-          return result;
-        }
-        // Use complement ibeta_inv function for lower bound.
-        // This is adapted from the corresponding binomial formula
-        // here: http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
-        // This is a Clopper-Pearson interval, and may be overly conservative,
-        // see also "A Simple Improved Inferential Method for Some
-        // Discrete Distributions" Yong CAI and K. KRISHNAMOORTHY
-        // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
-        //
-        return ibeta_inv(successes, failures + 1, alpha, static_cast<RealType*>(0), Policy());
-      } // find_lower_bound_on_p
-
-      static RealType find_upper_bound_on_p(
-        RealType trials,
-        RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
-      {
-        static const char* function = "boost::math::geometric<%1%>::find_upper_bound_on_p";
-        RealType result = 0;  // of error checks.
-        RealType successes = 1;
-        RealType failures = trials - successes;
-        if(false == geometric_detail::check_dist_and_k(
-          function, RealType(0), failures, &result, Policy())
-          && detail::check_probability(function, alpha, &result, Policy()))
-        {
-          return result;
-        }
-        if(failures == 0)
-        {
-           return 1;
-        }// Use complement ibetac_inv function for upper bound.
-        // Note adjusted failures value: *not* failures+1 as usual.
-        // This is adapted from the corresponding binomial formula
-        // here: http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
-        // This is a Clopper-Pearson interval, and may be overly conservative,
-        // see also "A Simple Improved Inferential Method for Some
-        // Discrete Distributions" Yong CAI and K. Krishnamoorthy
-        // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
-        //
-        return ibetac_inv(successes, failures, alpha, static_cast<RealType*>(0), Policy());
-      } // find_upper_bound_on_p
-
-      // Estimate number of trials :
-      // "How many trials do I need to be P% sure of seeing k or fewer failures?"
-
-      static RealType find_minimum_number_of_trials(
-        RealType k,     // number of failures (k >= 0).
-        RealType p,     // success fraction 0 <= p <= 1.
-        RealType alpha) // risk level threshold 0 <= alpha <= 1.
-      {
-        static const char* function = "boost::math::geometric<%1%>::find_minimum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == geometric_detail::check_dist_and_k(
-          function, p, k, &result, Policy())
-          && detail::check_probability(function, alpha, &result, Policy()))
-        {
-          return result;
-        }
-        result = ibeta_inva(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      } // RealType find_number_of_failures
-
-      static RealType find_maximum_number_of_trials(
-        RealType k,     // number of failures (k >= 0).
-        RealType p,     // success fraction 0 <= p <= 1.
-        RealType alpha) // risk level threshold 0 <= alpha <= 1.
-      {
-        static const char* function = "boost::math::geometric<%1%>::find_maximum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == geometric_detail::check_dist_and_k(
-          function, p, k, &result, Policy())
-          &&  detail::check_probability(function, alpha, &result, Policy()))
-        { 
-          return result;
-        }
-        result = ibetac_inva(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      } // RealType find_number_of_trials complemented
-
-    private:
-      //RealType m_r; // successes fixed at unity.
-      RealType m_p; // success_fraction
-    }; // template <class RealType, class Policy> class geometric_distribution
-
-    typedef geometric_distribution<double> geometric; // Reserved name of type double.
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const geometric_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable k.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // max_integer?
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const geometric_distribution<RealType, Policy>& /* dist */)
-    { // Range of supported values for random variable k.
-       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>()); // max_integer?
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const geometric_distribution<RealType, Policy>& dist)
-    { // Mean of geometric distribution = (1-p)/p.
-      return (1 - dist.success_fraction() ) / dist.success_fraction();
-    } // mean
-
-    // median implemented via quantile(half) in derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType mode(const geometric_distribution<RealType, Policy>&)
-    { // Mode of geometric distribution = zero.
-      BOOST_MATH_STD_USING // ADL of std functions.
-      return 0;
-    } // mode
-    
-    template <class RealType, class Policy>
-    inline RealType variance(const geometric_distribution<RealType, Policy>& dist)
-    { // Variance of Binomial distribution = (1-p) / p^2.
-      return  (1 - dist.success_fraction())
-        / (dist.success_fraction() * dist.success_fraction());
-    } // variance
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const geometric_distribution<RealType, Policy>& dist)
-    { // skewness of geometric distribution = 2-p / (sqrt(r(1-p))
-      BOOST_MATH_STD_USING // ADL of std functions.
-      RealType p = dist.success_fraction();
-      return (2 - p) / sqrt(1 - p);
-    } // skewness
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const geometric_distribution<RealType, Policy>& dist)
-    { // kurtosis of geometric distribution
-      // http://en.wikipedia.org/wiki/geometric is kurtosis_excess so add 3
-      RealType p = dist.success_fraction();
-      return 3 + (p*p - 6*p + 6) / (1 - p);
-    } // kurtosis
-
-     template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const geometric_distribution<RealType, Policy>& dist)
-    { // kurtosis excess of geometric distribution
-      // http://mathworld.wolfram.com/Kurtosis.html table of kurtosis_excess
-      RealType p = dist.success_fraction();
-      return (p*p - 6*p + 6) / (1 - p);
-    } // kurtosis_excess
-
-    // RealType standard_deviation(const geometric_distribution<RealType, Policy>& dist)
-    // standard_deviation provided by derived accessors.
-    // RealType hazard(const geometric_distribution<RealType, Policy>& dist)
-    // hazard of geometric distribution provided by derived accessors.
-    // RealType chf(const geometric_distribution<RealType, Policy>& dist)
-    // chf of geometric distribution provided by derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType pdf(const geometric_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Probability Density/Mass Function.
-      BOOST_FPU_EXCEPTION_GUARD
-      BOOST_MATH_STD_USING  // For ADL of math functions.
-      static const char* function = "boost::math::pdf(const geometric_distribution<%1%>&, %1%)";
-
-      RealType p = dist.success_fraction();
-      RealType result = 0;
-      if(false == geometric_detail::check_dist_and_k(
-        function,
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if (k == 0)
-      {
-        return p; // success_fraction
-      }
-      RealType q = 1 - p;  // Inaccurate for small p?
-      // So try to avoid inaccuracy for large or small p.
-      // but has little effect > last significant bit.
-      //cout << "p *  pow(q, k) " << result << endl; // seems best whatever p
-      //cout << "exp(p * k * log1p(-p)) " << p * exp(k * log1p(-p)) << endl;
-      //if (p < 0.5)
-      //{
-      //  result = p *  pow(q, k);
-      //}
-      //else
-      //{
-      //  result = p * exp(k * log1p(-p));
-      //}
-      result = p * pow(q, k);
-      return result;
-    } // geometric_pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const geometric_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Cumulative Distribution Function of geometric.
-      static const char* function = "boost::math::cdf(const geometric_distribution<%1%>&, %1%)";
-
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      RealType p = dist.success_fraction();
-      // Error check:
-      RealType result = 0;
-      if(false == geometric_detail::check_dist_and_k(
-        function,
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      if(k == 0)
-      {
-        return p; // success_fraction
-      }
-      //RealType q = 1 - p;  // Bad for small p
-      //RealType probability = 1 - std::pow(q, k+1);
-
-      RealType z = boost::math::log1p(-p, Policy()) * (k + 1);
-      RealType probability = -boost::math::expm1(z, Policy());
-
-      return probability;
-    } // cdf Cumulative Distribution Function geometric.
-
-      template <class RealType, class Policy>
-      inline RealType cdf(const complemented2_type<geometric_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function geometric.
-      BOOST_MATH_STD_USING
-      static const char* function = "boost::math::cdf(const geometric_distribution<%1%>&, %1%)";
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      RealType const& k = c.param;
-      geometric_distribution<RealType, Policy> const& dist = c.dist;
-      RealType p = dist.success_fraction();
-      // Error check:
-      RealType result = 0;
-      if(false == geometric_detail::check_dist_and_k(
-        function,
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      RealType z = boost::math::log1p(-p, Policy()) * (k+1);
-      RealType probability = exp(z);
-      return probability;
-    } // cdf Complemented Cumulative Distribution Function geometric.
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const geometric_distribution<RealType, Policy>& dist, const RealType& x)
-    { // Quantile, percentile/100 or Percent Point geometric function.
-      // Return the number of expected failures k for a given probability p.
-
-      // Inverse cumulative Distribution Function or Quantile (percentile / 100) of geometric Probability.
-      // k argument may be integral, signed, or unsigned, or floating point.
-
-      static const char* function = "boost::math::quantile(const geometric_distribution<%1%>&, %1%)";
-      BOOST_MATH_STD_USING // ADL of std functions.
-
-      RealType success_fraction = dist.success_fraction();
-      // Check dist and x.
-      RealType result = 0;
-      if(false == geometric_detail::check_dist_and_prob
-        (function, success_fraction, x, &result, Policy()))
-      {
-        return result;
-      }
-
-      // Special cases.
-      if (x == 1)
-      {  // Would need +infinity failures for total confidence.
-        result = policies::raise_overflow_error<RealType>(
-            function,
-            "Probability argument is 1, which implies infinite failures !", Policy());
-        return result;
-       // usually means return +std::numeric_limits<RealType>::infinity();
-       // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-      }
-      if (x == 0)
-      { // No failures are expected if P = 0.
-        return 0; // Total trials will be just dist.successes.
-      }
-      // if (P <= pow(dist.success_fraction(), 1))
-      if (x <= success_fraction)
-      { // p <= pdf(dist, 0) == cdf(dist, 0)
-        return 0;
-      }
-      if (x == 1)
-      {
-        return 0;
-      }
-   
-      // log(1-x) /log(1-success_fraction) -1; but use log1p in case success_fraction is small
-      result = boost::math::log1p(-x, Policy()) / boost::math::log1p(-success_fraction, Policy()) - 1;
-      // Subtract a few epsilons here too?
-      // to make sure it doesn't slip over, so ceil would be one too many.
-      return result;
-    } // RealType quantile(const geometric_distribution dist, p)
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<geometric_distribution<RealType, Policy>, RealType>& c)
-    {  // Quantile or Percent Point Binomial function.
-       // Return the number of expected failures k for a given
-       // complement of the probability Q = 1 - P.
-       static const char* function = "boost::math::quantile(const geometric_distribution<%1%>&, %1%)";
-       BOOST_MATH_STD_USING
-       // Error checks:
-       RealType x = c.param;
-       const geometric_distribution<RealType, Policy>& dist = c.dist;
-       RealType success_fraction = dist.success_fraction();
-       RealType result = 0;
-       if(false == geometric_detail::check_dist_and_prob(
-          function,
-          success_fraction,
-          x,
-          &result, Policy()))
-       {
-          return result;
-       }
-
-       // Special cases:
-       if(x == 1)
-       {  // There may actually be no answer to this question,
-          // since the probability of zero failures may be non-zero,
-          return 0; // but zero is the best we can do:
-       }
-       if (-x <= boost::math::powm1(dist.success_fraction(), dist.successes(), Policy()))
-       {  // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
-          return 0; //
-       }
-       if(x == 0)
-       {  // Probability 1 - Q  == 1 so infinite failures to achieve certainty.
-          // Would need +infinity failures for total confidence.
-          result = policies::raise_overflow_error<RealType>(
-             function,
-             "Probability argument complement is 0, which implies infinite failures !", Policy());
-          return result;
-          // usually means return +std::numeric_limits<RealType>::infinity();
-          // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-       }
-       // log(x) /log(1-success_fraction) -1; but use log1p in case success_fraction is small
-       result = log(x) / boost::math::log1p(-success_fraction, Policy()) - 1;
-      return result;
-
-    } // quantile complement
-
- } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#if defined (BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_MATH_SPECIAL_GEOMETRIC_HPP
--- a/any/include/boost/math/distributions/hyperexponential.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,634 +0,0 @@
-//  Copyright 2014 Marco Guazzone (marco.guazzone@gmail.com)
-//
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-// This module implements the Hyper-Exponential distribution.
-//
-// References:
-// - "Queueing Theory in Manufacturing Systems Analysis and Design" by H.T. Papadopolous, C. Heavey and J. Browne (Chapman & Hall/CRC, 1993)
-// - http://reference.wolfram.com/language/ref/HyperexponentialDistribution.html
-// - http://en.wikipedia.org/wiki/Hyperexponential_distribution
-//
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_HYPEREXPONENTIAL_HPP
-#define BOOST_MATH_DISTRIBUTIONS_HYPEREXPONENTIAL_HPP
-
-
-#include <boost/config.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/exponential.hpp>
-#include <boost/math/policies/policy.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <boost/math/tools/precision.hpp>
-#include <boost/math/tools/roots.hpp>
-#include <boost/range/begin.hpp>
-#include <boost/range/end.hpp>
-#include <boost/range/size.hpp>
-#include <boost/type_traits/has_pre_increment.hpp>
-#include <cstddef>
-#include <iterator>
-#include <limits>
-#include <numeric>
-#include <utility>
-#include <vector>
-
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
-# include <initializer_list>
-#endif
-
-#ifdef _MSC_VER
-# pragma warning (push)
-# pragma warning(disable:4127) // conditional expression is constant
-# pragma warning(disable:4389) // '==' : signed/unsigned mismatch in test_tools
-#endif // _MSC_VER
-
-namespace boost { namespace math {
-
-namespace detail {
-
-template <typename Dist>
-typename Dist::value_type generic_quantile(const Dist& dist, const typename Dist::value_type& p, const typename Dist::value_type& guess, bool comp, const char* function);
-
-} // Namespace detail
-
-
-template <typename RealT, typename PolicyT>
-class hyperexponential_distribution;
-
-
-namespace /*<unnamed>*/ { namespace hyperexp_detail {
-
-template <typename T>
-void normalize(std::vector<T>& v)
-{
-   if(!v.size())
-      return;  // Our error handlers will get this later
-    const T sum = std::accumulate(v.begin(), v.end(), static_cast<T>(0));
-    T final_sum = 0;
-    const typename std::vector<T>::iterator end = --v.end();
-    for (typename std::vector<T>::iterator it = v.begin();
-         it != end;
-         ++it)
-    {
-        *it /= sum;
-        final_sum += *it;
-    }
-    *end = 1 - final_sum;  // avoids round off errors, ensures the probs really do sum to 1.
-}
-
-template <typename RealT, typename PolicyT>
-bool check_probabilities(char const* function, std::vector<RealT> const& probabilities, RealT* presult, PolicyT const& pol)
-{
-    BOOST_MATH_STD_USING
-    const std::size_t n = probabilities.size();
-    RealT sum = 0;
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        if (probabilities[i] < 0
-            || probabilities[i] > 1
-            || !(boost::math::isfinite)(probabilities[i]))
-        {
-            *presult = policies::raise_domain_error<RealT>(function,
-                                                           "The elements of parameter \"probabilities\" must be >= 0 and <= 1, but at least one of them was: %1%.",
-                                                           probabilities[i],
-                                                           pol);
-            return false;
-        }
-        sum += probabilities[i];
-    }
-
-    //
-    // We try to keep phase probabilities correctly normalized in the distribution constructors,
-    // however in practice we have to allow for a very slight divergence from a sum of exactly 1:
-    //
-    if (fabs(sum - 1) > tools::epsilon<RealT>() * 2)
-    {
-        *presult = policies::raise_domain_error<RealT>(function,
-                                                       "The elements of parameter \"probabilities\" must sum to 1, but their sum is: %1%.",
-                                                       sum,
-                                                       pol);
-        return false;
-    }
-
-    return true;
-}
-
-template <typename RealT, typename PolicyT>
-bool check_rates(char const* function, std::vector<RealT> const& rates, RealT* presult, PolicyT const& pol)
-{
-    const std::size_t n = rates.size();
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        if (rates[i] <= 0
-            || !(boost::math::isfinite)(rates[i]))
-        {
-            *presult = policies::raise_domain_error<RealT>(function,
-                                                           "The elements of parameter \"rates\" must be > 0, but at least one of them is: %1%.",
-                                                           rates[i],
-                                                           pol);
-            return false;
-        }
-    }
-    return true;
-}
-
-template <typename RealT, typename PolicyT>
-bool check_dist(char const* function, std::vector<RealT> const& probabilities, std::vector<RealT> const& rates, RealT* presult, PolicyT const& pol)
-{
-    BOOST_MATH_STD_USING
-    if (probabilities.size() != rates.size())
-    {
-        *presult = policies::raise_domain_error<RealT>(function,
-                                                       "The parameters \"probabilities\" and \"rates\" must have the same length, but their size differ by: %1%.",
-                                                       fabs(static_cast<RealT>(probabilities.size())-static_cast<RealT>(rates.size())),
-                                                       pol);
-        return false;
-    }
-
-    return check_probabilities(function, probabilities, presult, pol)
-           && check_rates(function, rates, presult, pol);
-}
-
-template <typename RealT, typename PolicyT>
-bool check_x(char const* function, RealT x, RealT* presult, PolicyT const& pol)
-{
-    if (x < 0 || (boost::math::isnan)(x))
-    {
-        *presult = policies::raise_domain_error<RealT>(function, "The random variable must be >= 0, but is: %1%.", x, pol);
-        return false;
-    }
-    return true;
-}
-
-template <typename RealT, typename PolicyT>
-bool check_probability(char const* function, RealT p, RealT* presult, PolicyT const& pol)
-{
-    if (p < 0 || p > 1 || (boost::math::isnan)(p))
-    {
-        *presult = policies::raise_domain_error<RealT>(function, "The probability be >= 0 and <= 1, but is: %1%.", p, pol);
-        return false;
-    }
-    return true;
-}
-
-template <typename RealT, typename PolicyT>
-RealT quantile_impl(hyperexponential_distribution<RealT, PolicyT> const& dist, RealT const& p, bool comp)
-{
-    // Don't have a closed form so try to numerically solve the inverse CDF...
-
-    typedef typename policies::evaluation<RealT, PolicyT>::type value_type;
-    typedef typename policies::normalise<PolicyT,
-                                         policies::promote_float<false>,
-                                         policies::promote_double<false>,
-                                         policies::discrete_quantile<>,
-                                         policies::assert_undefined<> >::type forwarding_policy;
-
-    static const char* function = comp ? "boost::math::quantile(const boost::math::complemented2_type<boost::math::hyperexponential_distribution<%1%>, %1%>&)"
-                                       : "boost::math::quantile(const boost::math::hyperexponential_distribution<%1%>&, %1%)";
-
-    RealT result = 0;
-
-    if (!check_probability(function, p, &result, PolicyT()))
-    {
-        return result;
-    }
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    // A possible (but inaccurate) approximation is given below, where the
-    // quantile is given by the weighted sum of exponential quantiles:
-    RealT guess = 0;
-    if (comp)
-    {
-        for (std::size_t i = 0; i < n; ++i)
-        {
-            const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-            guess += probs[i]*quantile(complement(exp, p));
-        }
-    }
-    else
-    {
-        for (std::size_t i = 0; i < n; ++i)
-        {
-            const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-            guess += probs[i]*quantile(exp, p);
-        }
-    }
-
-    // Fast return in case the Hyper-Exponential is essentially an Exponential
-    if (n == 1)
-    {
-        return guess;
-    }
-
-    value_type q;
-    q = detail::generic_quantile(hyperexponential_distribution<RealT,forwarding_policy>(probs, rates),
-                                 p,
-                                 guess,
-                                 comp,
-                                 function);
-
-    result = policies::checked_narrowing_cast<RealT,forwarding_policy>(q, function);
-
-    return result;
-}
-
-}} // Namespace <unnamed>::hyperexp_detail
-
-
-template <typename RealT = double, typename PolicyT = policies::policy<> >
-class hyperexponential_distribution
-{
-    public: typedef RealT value_type;
-    public: typedef PolicyT policy_type;
-
-
-    public: hyperexponential_distribution()
-    : probs_(1, 1),
-      rates_(1, 1)
-    {
-        RealT err;
-        hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-                                    probs_,
-                                    rates_,
-                                    &err,
-                                    PolicyT());
-    }
-
-    // Four arg constructor: no ambiguity here, the arguments must be two pairs of iterators:
-    public: template <typename ProbIterT, typename RateIterT>
-            hyperexponential_distribution(ProbIterT prob_first, ProbIterT prob_last,
-                                          RateIterT rate_first, RateIterT rate_last)
-    : probs_(prob_first, prob_last),
-      rates_(rate_first, rate_last)
-    {
-        hyperexp_detail::normalize(probs_);
-        RealT err;
-        hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-                                    probs_,
-                                    rates_,
-                                    &err,
-                                    PolicyT());
-    }
-
-    // Two arg constructor from 2 ranges, we SFINAE this out of existance if
-    // either argument type is incrementable as in that case the type is
-    // probably an iterator:
-    public: template <typename ProbRangeT, typename RateRangeT>
-            hyperexponential_distribution(ProbRangeT const& prob_range,
-                                          RateRangeT const& rate_range,
-                                          typename boost::disable_if_c<boost::has_pre_increment<ProbRangeT>::value || boost::has_pre_increment<RateRangeT>::value>::type* = 0)
-    : probs_(boost::begin(prob_range), boost::end(prob_range)),
-      rates_(boost::begin(rate_range), boost::end(rate_range))
-    {
-        hyperexp_detail::normalize(probs_);
-
-        RealT err;
-        hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-                                    probs_,
-                                    rates_,
-                                    &err,
-                                    PolicyT());
-    }
-
-    // Two arg constructor for a pair of iterators: we SFINAE this out of
-    // existance if neither argument types are incrementable.
-    // Note that we allow different argument types here to allow for
-    // construction from an array plus a pointer into that array.
-    public: template <typename RateIterT, typename RateIterT2>
-            hyperexponential_distribution(RateIterT const& rate_first, 
-                                          RateIterT2 const& rate_last, 
-                                          typename boost::enable_if_c<boost::has_pre_increment<RateIterT>::value || boost::has_pre_increment<RateIterT2>::value>::type* = 0)
-    : probs_(std::distance(rate_first, rate_last), 1), // will be normalized below
-      rates_(rate_first, rate_last)
-    {
-        hyperexp_detail::normalize(probs_);
-
-        RealT err;
-        hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-                                    probs_,
-                                    rates_,
-                                    &err,
-                                    PolicyT());
-    }
-
-#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
-      // Initializer list constructor: allows for construction from array literals:
-public: hyperexponential_distribution(std::initializer_list<RealT> l1, std::initializer_list<RealT> l2)
-      : probs_(l1.begin(), l1.end()),
-        rates_(l2.begin(), l2.end())
-      {
-         hyperexp_detail::normalize(probs_);
-
-         RealT err;
-         hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-            probs_,
-            rates_,
-            &err,
-            PolicyT());
-      }
-
-public: hyperexponential_distribution(std::initializer_list<RealT> l1)
-      : probs_(l1.size(), 1),
-        rates_(l1.begin(), l1.end())
-      {
-         hyperexp_detail::normalize(probs_);
-
-         RealT err;
-         hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-            probs_,
-            rates_,
-            &err,
-            PolicyT());
-      }
-#endif // !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
-
-    // Single argument constructor: argument must be a range.
-    public: template <typename RateRangeT>
-    hyperexponential_distribution(RateRangeT const& rate_range)
-    : probs_(boost::size(rate_range), 1), // will be normalized below
-      rates_(boost::begin(rate_range), boost::end(rate_range))
-    {
-        hyperexp_detail::normalize(probs_);
-
-        RealT err;
-        hyperexp_detail::check_dist("boost::math::hyperexponential_distribution<%1%>::hyperexponential_distribution",
-                                    probs_,
-                                    rates_,
-                                    &err,
-                                    PolicyT());
-    }
-
-    public: std::vector<RealT> probabilities() const
-    {
-        return probs_;
-    }
-
-    public: std::vector<RealT> rates() const
-    {
-        return rates_;
-    }
-
-    public: std::size_t num_phases() const
-    {
-        return rates_.size();
-    }
-
-
-    private: std::vector<RealT> probs_;
-    private: std::vector<RealT> rates_;
-}; // class hyperexponential_distribution
-
-
-// Convenient type synonym for double.
-typedef hyperexponential_distribution<double> hyperexponential;
-
-
-// Range of permissible values for random variable x
-template <typename RealT, typename PolicyT>
-std::pair<RealT,RealT> range(hyperexponential_distribution<RealT,PolicyT> const&)
-{
-    if (std::numeric_limits<RealT>::has_infinity)
-    {
-        return std::make_pair(static_cast<RealT>(0), std::numeric_limits<RealT>::infinity()); // 0 to +inf.
-    }
-
-    return std::make_pair(static_cast<RealT>(0), tools::max_value<RealT>()); // 0 to +<max value>
-}
-
-// Range of supported values for random variable x.
-// This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-template <typename RealT, typename PolicyT>
-std::pair<RealT,RealT> support(hyperexponential_distribution<RealT,PolicyT> const&)
-{
-    return std::make_pair(tools::min_value<RealT>(), tools::max_value<RealT>()); // <min value> to +<max value>.
-}
-
-template <typename RealT, typename PolicyT>
-RealT pdf(hyperexponential_distribution<RealT, PolicyT> const& dist, RealT const& x)
-{
-    BOOST_MATH_STD_USING
-    RealT result = 0;
-
-    if (!hyperexp_detail::check_x("boost::math::pdf(const boost::math::hyperexponential_distribution<%1%>&, %1%)", x, &result, PolicyT()))
-    {
-        return result;
-    }
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-        result += probs[i]*pdf(exp, x);
-        //result += probs[i]*rates[i]*exp(-rates[i]*x);
-    }
-
-    return result;
-}
-
-template <typename RealT, typename PolicyT>
-RealT cdf(hyperexponential_distribution<RealT, PolicyT> const& dist, RealT const& x)
-{
-    RealT result = 0;
-
-    if (!hyperexp_detail::check_x("boost::math::cdf(const boost::math::hyperexponential_distribution<%1%>&, %1%)", x, &result, PolicyT()))
-    {
-        return result;
-    }
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-        result += probs[i]*cdf(exp, x);
-    }
-
-    return result;
-}
-
-template <typename RealT, typename PolicyT>
-RealT quantile(hyperexponential_distribution<RealT, PolicyT> const& dist, RealT const& p)
-{
-    return hyperexp_detail::quantile_impl(dist, p , false);
-}
-
-template <typename RealT, typename PolicyT>
-RealT cdf(complemented2_type<hyperexponential_distribution<RealT,PolicyT>, RealT> const& c)
-{
-    RealT const& x = c.param;
-    hyperexponential_distribution<RealT,PolicyT> const& dist = c.dist;
-
-    RealT result = 0;
-
-    if (!hyperexp_detail::check_x("boost::math::cdf(boost::math::complemented2_type<const boost::math::hyperexponential_distribution<%1%>&, %1%>)", x, &result, PolicyT()))
-    {
-        return result;
-    }
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-        result += probs[i]*cdf(complement(exp, x));
-    }
-
-    return result;
-}
-
-
-template <typename RealT, typename PolicyT>
-RealT quantile(complemented2_type<hyperexponential_distribution<RealT, PolicyT>, RealT> const& c)
-{
-    RealT const& p = c.param;
-    hyperexponential_distribution<RealT,PolicyT> const& dist = c.dist;
-
-    return hyperexp_detail::quantile_impl(dist, p , true);
-}
-
-template <typename RealT, typename PolicyT>
-RealT mean(hyperexponential_distribution<RealT, PolicyT> const& dist)
-{
-    RealT result = 0;
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const exponential_distribution<RealT,PolicyT> exp(rates[i]);
-
-        result += probs[i]*mean(exp);
-    }
-
-    return result;
-}
-
-template <typename RealT, typename PolicyT>
-RealT variance(hyperexponential_distribution<RealT, PolicyT> const& dist)
-{
-    RealT result = 0;
-
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        result += probs[i]/(rates[i]*rates[i]);
-    }
-
-    const RealT mean = boost::math::mean(dist);
-
-    result = 2*result-mean*mean;
-
-    return result;
-}
-
-template <typename RealT, typename PolicyT>
-RealT skewness(hyperexponential_distribution<RealT,PolicyT> const& dist)
-{
-    BOOST_MATH_STD_USING
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    RealT s1 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i}
-    RealT s2 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i^2}
-    RealT s3 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i^3}
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const RealT p = probs[i];
-        const RealT r = rates[i];
-        const RealT r2 = r*r;
-        const RealT r3 = r2*r;
-
-        s1 += p/r;
-        s2 += p/r2;
-        s3 += p/r3;
-    }
-
-    const RealT s1s1 = s1*s1;
-
-    const RealT num = (6*s3 - (3*(2*s2 - s1s1) + s1s1)*s1);
-    const RealT den = (2*s2 - s1s1);
-
-    return num / pow(den, static_cast<RealT>(1.5));
-}
-
-template <typename RealT, typename PolicyT>
-RealT kurtosis(hyperexponential_distribution<RealT,PolicyT> const& dist)
-{
-    const std::size_t n = dist.num_phases();
-    const std::vector<RealT> probs = dist.probabilities();
-    const std::vector<RealT> rates = dist.rates();
-
-    RealT s1 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i}
-    RealT s2 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i^2}
-    RealT s3 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i^3}
-    RealT s4 = 0; // \sum_{i=1}^n \frac{p_i}{\lambda_i^4}
-    for (std::size_t i = 0; i < n; ++i)
-    {
-        const RealT p = probs[i];
-        const RealT r = rates[i];
-        const RealT r2 = r*r;
-        const RealT r3 = r2*r;
-        const RealT r4 = r3*r;
-
-        s1 += p/r;
-        s2 += p/r2;
-        s3 += p/r3;
-        s4 += p/r4;
-    }
-
-    const RealT s1s1 = s1*s1;
-
-    const RealT num = (24*s4 - 24*s3*s1 + 3*(2*(2*s2 - s1s1) + s1s1)*s1s1);
-    const RealT den = (2*s2 - s1s1);
-
-    return num/(den*den);
-}
-
-template <typename RealT, typename PolicyT>
-RealT kurtosis_excess(hyperexponential_distribution<RealT,PolicyT> const& dist)
-{
-    return kurtosis(dist) - 3;
-}
-
-template <typename RealT, typename PolicyT>
-RealT mode(hyperexponential_distribution<RealT,PolicyT> const& /*dist*/)
-{
-    return 0;
-}
-
-}} // namespace boost::math
-
-#ifdef BOOST_MSVC
-#pragma warning (pop)
-#endif
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-#include <boost/math/distributions/detail/generic_quantile.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_HYPEREXPONENTIAL
--- a/any/include/boost/math/distributions/hypergeometric.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-// Copyright 2008 Gautam Sewani
-// Copyright 2008 John Maddock
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_HYPERGEOMETRIC_HPP
-#define BOOST_MATH_DISTRIBUTIONS_HYPERGEOMETRIC_HPP
-
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/hypergeometric_pdf.hpp>
-#include <boost/math/distributions/detail/hypergeometric_cdf.hpp>
-#include <boost/math/distributions/detail/hypergeometric_quantile.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-
-
-namespace boost { namespace math {
-
-   template <class RealType = double, class Policy = policies::policy<> >
-   class hypergeometric_distribution
-   {
-   public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      hypergeometric_distribution(unsigned r, unsigned n, unsigned N) // Constructor.
-         : m_n(n), m_N(N), m_r(r)
-      {
-         static const char* function = "boost::math::hypergeometric_distribution<%1%>::hypergeometric_distribution";
-         RealType ret;
-         check_params(function, &ret);
-      }
-      // Accessor functions.
-      unsigned total()const
-      {
-         return m_N;
-      }
-
-      unsigned defective()const
-      {
-         return m_r;
-      }
-
-      unsigned sample_count()const
-      {
-         return m_n;
-      }
-
-      bool check_params(const char* function, RealType* result)const
-      {
-         if(m_r > m_N)
-         {
-            *result = boost::math::policies::raise_domain_error<RealType>(
-               function, "Parameter r out of range: must be <= N but got %1%", static_cast<RealType>(m_r), Policy());
-            return false;
-         }
-         if(m_n > m_N)
-         {
-            *result = boost::math::policies::raise_domain_error<RealType>(
-               function, "Parameter n out of range: must be <= N but got %1%", static_cast<RealType>(m_n), Policy());
-            return false;
-         }
-         return true;
-      }
-      bool check_x(unsigned x, const char* function, RealType* result)const
-      {
-         if(x < static_cast<unsigned>((std::max)(0, (int)(m_n + m_r) - (int)(m_N))))
-         {
-            *result = boost::math::policies::raise_domain_error<RealType>(
-               function, "Random variable out of range: must be > 0 and > m + r - N but got %1%", static_cast<RealType>(x), Policy());
-            return false;
-         }
-         if(x > (std::min)(m_r, m_n))
-         {
-            *result = boost::math::policies::raise_domain_error<RealType>(
-               function, "Random variable out of range: must be less than both n and r but got %1%", static_cast<RealType>(x), Policy());
-            return false;
-         }
-         return true;
-      }
-
-   private:
-      // Data members:
-      unsigned m_n;  // number of items picked
-      unsigned m_N; // number of "total" items
-      unsigned m_r; // number of "defective" items
-
-   }; // class hypergeometric_distribution
-
-   typedef hypergeometric_distribution<double> hypergeometric;
-
-   template <class RealType, class Policy>
-   inline const std::pair<unsigned, unsigned> range(const hypergeometric_distribution<RealType, Policy>& dist)
-   { // Range of permissible values for random variable x.
-#ifdef BOOST_MSVC
-#  pragma warning(push)
-#  pragma warning(disable:4267)
-#endif
-      unsigned r = dist.defective();
-      unsigned n = dist.sample_count();
-      unsigned N = dist.total();
-      unsigned l = static_cast<unsigned>((std::max)(0, (int)(n + r) - (int)(N)));
-      unsigned u = (std::min)(r, n);
-      return std::pair<unsigned, unsigned>(l, u);
-#ifdef BOOST_MSVC
-#  pragma warning(pop)
-#endif
-   }
-
-   template <class RealType, class Policy>
-   inline const std::pair<unsigned, unsigned> support(const hypergeometric_distribution<RealType, Policy>& d)
-   { 
-      return range(d);
-   }
-
-   template <class RealType, class Policy>
-   inline RealType pdf(const hypergeometric_distribution<RealType, Policy>& dist, const unsigned& x)
-   {
-      static const char* function = "boost::math::pdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType result = 0;
-      if(!dist.check_params(function, &result))
-         return result;
-      if(!dist.check_x(x, function, &result))
-         return result;
-
-      return boost::math::detail::hypergeometric_pdf<RealType>(
-         x, dist.defective(), dist.sample_count(), dist.total(), Policy());
-   }
-
-   template <class RealType, class Policy, class U>
-   inline RealType pdf(const hypergeometric_distribution<RealType, Policy>& dist, const U& x)
-   {
-      BOOST_MATH_STD_USING
-      static const char* function = "boost::math::pdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType r = static_cast<RealType>(x);
-      unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
-      if(u != r)
-      {
-         return boost::math::policies::raise_domain_error<RealType>(
-            function, "Random variable out of range: must be an integer but got %1%", r, Policy());
-      }
-      return pdf(dist, u);
-   }
-
-   template <class RealType, class Policy>
-   inline RealType cdf(const hypergeometric_distribution<RealType, Policy>& dist, const unsigned& x)
-   {
-      static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType result = 0;
-      if(!dist.check_params(function, &result))
-         return result;
-      if(!dist.check_x(x, function, &result))
-         return result;
-
-      return boost::math::detail::hypergeometric_cdf<RealType>(
-         x, dist.defective(), dist.sample_count(), dist.total(), false, Policy());
-   }
-
-   template <class RealType, class Policy, class U>
-   inline RealType cdf(const hypergeometric_distribution<RealType, Policy>& dist, const U& x)
-   {
-      BOOST_MATH_STD_USING
-      static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType r = static_cast<RealType>(x);
-      unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
-      if(u != r)
-      {
-         return boost::math::policies::raise_domain_error<RealType>(
-            function, "Random variable out of range: must be an integer but got %1%", r, Policy());
-      }
-      return cdf(dist, u);
-   }
-
-   template <class RealType, class Policy>
-   inline RealType cdf(const complemented2_type<hypergeometric_distribution<RealType, Policy>, unsigned>& c)
-   {
-      static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType result = 0;
-      if(!c.dist.check_params(function, &result))
-         return result;
-      if(!c.dist.check_x(c.param, function, &result))
-         return result;
-
-      return boost::math::detail::hypergeometric_cdf<RealType>(
-         c.param, c.dist.defective(), c.dist.sample_count(), c.dist.total(), true, Policy());
-   }
-
-   template <class RealType, class Policy, class U>
-   inline RealType cdf(const complemented2_type<hypergeometric_distribution<RealType, Policy>, U>& c)
-   {
-      BOOST_MATH_STD_USING
-      static const char* function = "boost::math::cdf(const hypergeometric_distribution<%1%>&, const %1%&)";
-      RealType r = static_cast<RealType>(c.param);
-      unsigned u = itrunc(r, typename policies::normalise<Policy, policies::rounding_error<policies::ignore_error> >::type());
-      if(u != r)
-      {
-         return boost::math::policies::raise_domain_error<RealType>(
-            function, "Random variable out of range: must be an integer but got %1%", r, Policy());
-      }
-      return cdf(complement(c.dist, u));
-   }
-
-   template <class RealType, class Policy>
-   inline RealType quantile(const hypergeometric_distribution<RealType, Policy>& dist, const RealType& p)
-   {
-      BOOST_MATH_STD_USING // for ADL of std functions
-
-         // Checking function argument
-         RealType result = 0;
-      const char* function = "boost::math::quantile(const hypergeometric_distribution<%1%>&, %1%)";
-      if (false == dist.check_params(function, &result)) return result;
-      if(false == detail::check_probability(function, p, &result, Policy())) return result;
-
-      return static_cast<RealType>(detail::hypergeometric_quantile(p, RealType(1 - p), dist.defective(), dist.sample_count(), dist.total(), Policy()));
-   } // quantile
-
-   template <class RealType, class Policy>
-   inline RealType quantile(const complemented2_type<hypergeometric_distribution<RealType, Policy>, RealType>& c)
-   {
-      BOOST_MATH_STD_USING // for ADL of std functions
-
-      // Checking function argument
-      RealType result = 0;
-      const char* function = "quantile(const complemented2_type<hypergeometric_distribution<%1%>, %1%>&)";
-      if (false == c.dist.check_params(function, &result)) return result;
-      if(false == detail::check_probability(function, c.param, &result, Policy())) return result;
-
-      return static_cast<RealType>(detail::hypergeometric_quantile(RealType(1 - c.param), c.param, c.dist.defective(), c.dist.sample_count(), c.dist.total(), Policy()));
-   } // quantile
-
-   template <class RealType, class Policy>
-   inline RealType mean(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      return static_cast<RealType>(dist.defective() * dist.sample_count()) / dist.total();
-   } // RealType mean(const hypergeometric_distribution<RealType, Policy>& dist)
-
-   template <class RealType, class Policy>
-   inline RealType variance(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      RealType r = static_cast<RealType>(dist.defective());
-      RealType n = static_cast<RealType>(dist.sample_count());
-      RealType N = static_cast<RealType>(dist.total());
-      return n * r  * (N - r) * (N - n) / (N * N * (N - 1));
-   } // RealType variance(const hypergeometric_distribution<RealType, Policy>& dist)
-
-   template <class RealType, class Policy>
-   inline RealType mode(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      BOOST_MATH_STD_USING
-      RealType r = static_cast<RealType>(dist.defective());
-      RealType n = static_cast<RealType>(dist.sample_count());
-      RealType N = static_cast<RealType>(dist.total());
-      return floor((r + 1) * (n + 1) / (N + 2));
-   }
-
-   template <class RealType, class Policy>
-   inline RealType skewness(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      BOOST_MATH_STD_USING
-      RealType r = static_cast<RealType>(dist.defective());
-      RealType n = static_cast<RealType>(dist.sample_count());
-      RealType N = static_cast<RealType>(dist.total());
-      return (N - 2 * r) * sqrt(N - 1) * (N - 2 * n) / (sqrt(n * r * (N - r) * (N - n)) * (N - 2));
-   } // RealType skewness(const hypergeometric_distribution<RealType, Policy>& dist)
-
-   template <class RealType, class Policy>
-   inline RealType kurtosis_excess(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      RealType r = static_cast<RealType>(dist.defective());
-      RealType n = static_cast<RealType>(dist.sample_count());
-      RealType N = static_cast<RealType>(dist.total());
-      RealType t1 = N * N * (N - 1) / (r * (N - 2) * (N - 3) * (N - r));
-      RealType t2 = (N * (N + 1) - 6 * N * (N - r)) / (n * (N - n))
-         + 3 * r * (N - r) * (N + 6) / (N * N) - 6;
-      return t1 * t2;
-   } // RealType kurtosis_excess(const hypergeometric_distribution<RealType, Policy>& dist)
-
-   template <class RealType, class Policy>
-   inline RealType kurtosis(const hypergeometric_distribution<RealType, Policy>& dist)
-   {
-      return kurtosis_excess(dist) + 3;
-   } // RealType kurtosis_excess(const hypergeometric_distribution<RealType, Policy>& dist)
-}} // namespaces
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // include guard
--- a/any/include/boost/math/distributions/inverse_chi_squared.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-// Copyright John Maddock 2010.
-// Copyright Paul A. Bristow 2010.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_INVERSE_CHI_SQUARED_HPP
-#define BOOST_MATH_DISTRIBUTIONS_INVERSE_CHI_SQUARED_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp> // for incomplete beta.
-#include <boost/math/distributions/complement.hpp> // for complements.
-#include <boost/math/distributions/detail/common_error_handling.hpp> // for error checks.
-#include <boost/math/special_functions/fpclassify.hpp> // for isfinite
-
-// See http://en.wikipedia.org/wiki/Scaled-inverse-chi-square_distribution
-// for definitions of this scaled version.
-// See http://en.wikipedia.org/wiki/Inverse-chi-square_distribution
-// for unscaled version.
-
-// http://reference.wolfram.com/mathematica/ref/InverseChiSquareDistribution.html
-// Weisstein, Eric W. "Inverse Chi-Squared Distribution." From MathWorld--A Wolfram Web Resource.
-// http://mathworld.wolfram.com/InverseChi-SquaredDistribution.html
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-namespace detail
-{
-  template <class RealType, class Policy>
-  inline bool check_inverse_chi_squared( // Check both distribution parameters.
-        const char* function,
-        RealType degrees_of_freedom, // degrees_of_freedom (aka nu).
-        RealType scale,  // scale (aka sigma^2)
-        RealType* result,
-        const Policy& pol)
-  {
-     return check_scale(function, scale, result, pol)
-       && check_df(function, degrees_of_freedom,
-       result, pol);
-  } // bool check_inverse_chi_squared
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class inverse_chi_squared_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   inverse_chi_squared_distribution(RealType df, RealType l_scale) : m_df(df), m_scale (l_scale)
-   {
-      RealType result;
-      detail::check_df(
-         "boost::math::inverse_chi_squared_distribution<%1%>::inverse_chi_squared_distribution",
-         m_df, &result, Policy())
-         && detail::check_scale(
-"boost::math::inverse_chi_squared_distribution<%1%>::inverse_chi_squared_distribution",
-         m_scale, &result,  Policy());
-   } // inverse_chi_squared_distribution constructor 
-
-   inverse_chi_squared_distribution(RealType df = 1) : m_df(df)
-   {
-      RealType result;
-      m_scale = 1 / m_df ; // Default scale = 1 / degrees of freedom (Wikipedia definition 1).
-      detail::check_df(
-         "boost::math::inverse_chi_squared_distribution<%1%>::inverse_chi_squared_distribution",
-         m_df, &result, Policy());
-   } // inverse_chi_squared_distribution
-
-   RealType degrees_of_freedom()const
-   {
-      return m_df; // aka nu
-   }
-   RealType scale()const
-   {
-      return m_scale;  // aka xi
-   }
-
-   // Parameter estimation:  NOT implemented yet.
-   //static RealType find_degrees_of_freedom(
-   //   RealType difference_from_variance,
-   //   RealType alpha,
-   //   RealType beta,
-   //   RealType variance,
-   //   RealType hint = 100);
-
-private:
-   // Data members:
-   RealType m_df;  // degrees of freedom are treated as a real number.
-   RealType m_scale;  // distribution scale.
-
-}; // class chi_squared_distribution
-
-typedef inverse_chi_squared_distribution<double> inverse_chi_squared;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const inverse_chi_squared_distribution<RealType, Policy>& /*dist*/)
-{  // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // 0 to + infinity.
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const inverse_chi_squared_distribution<RealType, Policy>& /*dist*/)
-{  // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), tools::max_value<RealType>()); // 0 to + infinity.
-}
-
-template <class RealType, class Policy>
-RealType pdf(const inverse_chi_squared_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions.
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-   RealType error_result;
-
-   static const char* function = "boost::math::pdf(const inverse_chi_squared_distribution<%1%>&, %1%)";
-
-   if(false == detail::check_inverse_chi_squared
-     (function, df, scale, &error_result, Policy())
-     )
-   { // Bad distribution.
-      return error_result;
-   }
-   if((x < 0) || !(boost::math::isfinite)(x))
-   { // Bad x.
-      return policies::raise_domain_error<RealType>(
-         function, "inverse Chi Square parameter was %1%, but must be >= 0 !", x, Policy());
-   }
-
-   if(x == 0)
-   { // Treat as special case.
-     return 0;
-   }
-   // Wikipedia scaled inverse chi sq (df, scale) related to inv gamma (df/2, df * scale /2) 
-   // so use inverse gamma pdf with shape = df/2, scale df * scale /2 
-   // RealType shape = df /2; // inv_gamma shape
-   // RealType scale = df * scale/2; // inv_gamma scale
-   // RealType result = gamma_p_derivative(shape, scale / x, Policy()) * scale / (x * x);
-   RealType result = df * scale/2 / x;
-   if(result < tools::min_value<RealType>())
-      return 0; // Random variable is near enough infinite.
-   result = gamma_p_derivative(df/2, result, Policy()) * df * scale/2;
-   if(result != 0) // prevent 0 / 0,  gamma_p_derivative -> 0 faster than x^2
-      result /= (x * x);
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const inverse_chi_squared_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   static const char* function = "boost::math::cdf(const inverse_chi_squared_distribution<%1%>&, %1%)";
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-   RealType error_result;
-
-   if(false ==
-       detail::check_inverse_chi_squared(function, df, scale, &error_result, Policy())
-     )
-   { // Bad distribution.
-      return error_result;
-   }
-   if((x < 0) || !(boost::math::isfinite)(x))
-   { // Bad x.
-      return policies::raise_domain_error<RealType>(
-         function, "inverse Chi Square parameter was %1%, but must be >= 0 !", x, Policy());
-   }
-   if (x == 0)
-   { // Treat zero as a special case.
-     return 0;
-   }
-   // RealType shape = df /2; // inv_gamma shape,
-   // RealType scale = df * scale/2; // inv_gamma scale,
-   // result = boost::math::gamma_q(shape, scale / x, Policy()); // inverse_gamma code.
-   return boost::math::gamma_q(df / 2, (df * (scale / 2)) / x, Policy());
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const inverse_chi_squared_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   using boost::math::gamma_q_inv;
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-
-   static const char* function = "boost::math::quantile(const inverse_chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false == detail::check_df(
-         function, df, &error_result, Policy())
-         && detail::check_probability(
-            function, p, &error_result, Policy()))
-   {
-      return error_result;
-   }
-   if(false == detail::check_probability(
-            function, p, &error_result, Policy()))
-   {
-      return error_result;
-   }
-   // RealType shape = df /2; // inv_gamma shape,
-   // RealType scale = df * scale/2; // inv_gamma scale,
-   // result = scale / gamma_q_inv(shape, p, Policy());
-      RealType result = gamma_q_inv(df /2, p, Policy());
-      if(result == 0)
-         return policies::raise_overflow_error<RealType, Policy>(function, "Random variable is infinite.", Policy());
-      result = df * (scale / 2) / result;
-      return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<inverse_chi_squared_distribution<RealType, Policy>, RealType>& c)
-{
-   using boost::math::gamma_q_inv;
-   RealType const& df = c.dist.degrees_of_freedom();
-   RealType const& scale = c.dist.scale();
-   RealType const& x = c.param;
-   static const char* function = "boost::math::cdf(const inverse_chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false == detail::check_df(
-         function, df, &error_result, Policy()))
-   {
-      return error_result;
-   }
-   if (x == 0)
-   { // Treat zero as a special case.
-     return 1;
-   }
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      return policies::raise_domain_error<RealType>(
-         function, "inverse Chi Square parameter was %1%, but must be > 0 !", x, Policy());
-   }
-   // RealType shape = df /2; // inv_gamma shape,
-   // RealType scale = df * scale/2; // inv_gamma scale,
-   // result = gamma_p(shape, scale/c.param, Policy()); use inv_gamma.
-
-   return gamma_p(df / 2, (df * scale/2) / x, Policy()); // OK
-} // cdf(complemented
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<inverse_chi_squared_distribution<RealType, Policy>, RealType>& c)
-{
-   using boost::math::gamma_q_inv;
-
-   RealType const& df = c.dist.degrees_of_freedom();
-   RealType const& scale = c.dist.scale();
-   RealType const& q = c.param;
-   static const char* function = "boost::math::quantile(const inverse_chi_squared_distribution<%1%>&, %1%)";
-   // Error check:
-   RealType error_result;
-   if(false == detail::check_df(function, df, &error_result, Policy()))
-   {
-      return error_result;
-   }
-   if(false == detail::check_probability(function, q, &error_result, Policy()))
-   {
-      return error_result;
-   }
-   // RealType shape = df /2; // inv_gamma shape,
-   // RealType scale = df * scale/2; // inv_gamma scale,
-   // result = scale / gamma_p_inv(shape, q, Policy());  // using inv_gamma.
-   RealType result = gamma_p_inv(df/2, q, Policy());
-   if(result == 0)
-      return policies::raise_overflow_error<RealType, Policy>(function, "Random variable is infinite.", Policy());
-   result = (df * scale / 2) / result;
-   return result;
-} // quantile(const complement
-
-template <class RealType, class Policy>
-inline RealType mean(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{ // Mean of inverse Chi-Squared distribution.
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-
-   static const char* function = "boost::math::mean(const inverse_chi_squared_distribution<%1%>&)";
-   if(df <= 2)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a mode for degrees of freedom > 2, but got degrees of freedom = %1%.",
-         df, Policy());
-  return (df * scale) / (df - 2);
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{ // Variance of inverse Chi-Squared distribution.
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-   static const char* function = "boost::math::variance(const inverse_chi_squared_distribution<%1%>&)";
-   if(df <= 4)
-   {
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a variance for degrees of freedom > 4, but got degrees of freedom = %1%.",
-         df, Policy());
-   }
-   return 2 * df * df * scale * scale / ((df - 2)*(df - 2) * (df - 4));
-} // variance
-
-template <class RealType, class Policy>
-inline RealType mode(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{ // mode is not defined in Mathematica.
-  // See Discussion section http://en.wikipedia.org/wiki/Talk:Scaled-inverse-chi-square_distribution
-  // for origin of the formula used below.
-
-   RealType df = dist.degrees_of_freedom();
-   RealType scale = dist.scale();
-   static const char* function = "boost::math::mode(const inverse_chi_squared_distribution<%1%>&)";
-   if(df < 0)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a mode for degrees of freedom >= 0, but got degrees of freedom = %1%.",
-         df, Policy());
-   return (df * scale) / (df + 2);
-}
-
-//template <class RealType, class Policy>
-//inline RealType median(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-//{ // Median is given by Quantile[dist, 1/2]
-//   RealType df = dist.degrees_of_freedom();
-//   if(df <= 1)
-//      return tools::domain_error<RealType>(
-//         BOOST_CURRENT_FUNCTION,
-//         "The inverse_Chi-Squared distribution only has a median for degrees of freedom >= 0, but got degrees of freedom = %1%.",
-//         df);
-//   return df;
-//}
-// Now implemented via quantile(half) in derived accessors.
-
-template <class RealType, class Policy>
-inline RealType skewness(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING // For ADL
-   RealType df = dist.degrees_of_freedom();
-   static const char* function = "boost::math::skewness(const inverse_chi_squared_distribution<%1%>&)";
-   if(df <= 6)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a skewness for degrees of freedom > 6, but got degrees of freedom = %1%.",
-         df, Policy());
-
-   return 4 * sqrt (2 * (df - 4)) / (df - 6);  // Not a function of scale.
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   static const char* function = "boost::math::kurtosis(const inverse_chi_squared_distribution<%1%>&)";
-   if(df <= 8)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a kurtosis for degrees of freedom > 8, but got degrees of freedom = %1%.",
-         df, Policy());
-
-   return kurtosis_excess(dist) + 3;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const inverse_chi_squared_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   static const char* function = "boost::math::kurtosis(const inverse_chi_squared_distribution<%1%>&)";
-   if(df <= 8)
-      return policies::raise_domain_error<RealType>(
-         function,
-         "inverse Chi-Squared distribution only has a kurtosis excess for degrees of freedom > 8, but got degrees of freedom = %1%.",
-         df, Policy());
-
-   return 12 * (5 * df - 22) / ((df - 6 )*(df - 8));  // Not a function of scale.
-}
-
-//
-// Parameter estimation comes last:
-//
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_INVERSE_CHI_SQUARED_HPP
--- a/any/include/boost/math/distributions/inverse_gamma.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,461 +0,0 @@
-// inverse_gamma.hpp
-
-//  Copyright Paul A. Bristow 2010.
-//  Copyright John Maddock 2010.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_INVERSE_GAMMA_HPP
-#define BOOST_STATS_INVERSE_GAMMA_HPP
-
-// Inverse Gamma Distribution is a two-parameter family
-// of continuous probability distributions
-// on the positive real line, which is the distribution of
-// the reciprocal of a variable distributed according to the gamma distribution.
-
-// http://en.wikipedia.org/wiki/Inverse-gamma_distribution
-// http://rss.acs.unt.edu/Rdoc/library/pscl/html/igamma.html
-
-// See also gamma distribution at gamma.hpp:
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda366b.htm
-// http://mathworld.wolfram.com/GammaDistribution.html
-// http://en.wikipedia.org/wiki/Gamma_distribution
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-namespace detail
-{
-
-template <class RealType, class Policy>
-inline bool check_inverse_gamma_shape(
-      const char* function, // inverse_gamma
-      RealType shape, // shape aka alpha
-      RealType* result, // to update, perhaps with NaN
-      const Policy& pol)
-{  // Sources say shape argument must be > 0
-   // but seems logical to allow shape zero as special case,
-   // returning pdf and cdf zero (but not < 0).
-   // (Functions like mean, variance with other limits on shape are checked
-   // in version including an operator & limit below).
-   if((shape < 0) || !(boost::math::isfinite)(shape))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Shape parameter is %1%, but must be >= 0 !", shape, pol);
-      return false;
-   }
-   return true;
-} //bool check_inverse_gamma_shape
-
-template <class RealType, class Policy>
-inline bool check_inverse_gamma_x(
-      const char* function,
-      RealType const& x,
-      RealType* result, const Policy& pol)
-{
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate is %1% but must be >= 0 !", x, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_inverse_gamma(
-      const char* function, // TODO swap these over, so shape is first.
-      RealType scale,  // scale aka beta
-      RealType shape, // shape aka alpha
-      RealType* result, const Policy& pol)
-{
-   return check_scale(function, scale, result, pol)
-     && check_inverse_gamma_shape(function, shape, result, pol);
-} // bool check_inverse_gamma
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class inverse_gamma_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   inverse_gamma_distribution(RealType l_shape = 1, RealType l_scale = 1)
-      : m_shape(l_shape), m_scale(l_scale)
-   {
-      RealType result;
-      detail::check_inverse_gamma(
-        "boost::math::inverse_gamma_distribution<%1%>::inverse_gamma_distribution",
-        l_scale, l_shape, &result, Policy());
-   }
-
-   RealType shape()const
-   {
-      return m_shape;
-   }
-
-   RealType scale()const
-   {
-      return m_scale;
-   }
-private:
-   //
-   // Data members:
-   //
-   RealType m_shape;     // distribution shape
-   RealType m_scale;     // distribution scale
-};
-
-typedef inverse_gamma_distribution<double> inverse_gamma;
-// typedef - but potential clash with name of inverse gamma *function*.
-// but there is a typedef for gamma
-//   typedef boost::math::gamma_distribution<Type, Policy> gamma;
-
-// Allow random variable x to be zero, treated as a special case (unlike some definitions).
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const inverse_gamma_distribution<RealType, Policy>& /* dist */)
-{  // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const inverse_gamma_distribution<RealType, Policy>& /* dist */)
-{  // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   using boost::math::tools::min_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const inverse_gamma_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(const inverse_gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-   { // distribution parameters bad.
-      return result;
-   } 
-   if(x == 0)
-   { // Treat random variate zero as a special case.
-      return 0;
-   }
-   else if(false == detail::check_inverse_gamma_x(function, x, &result, Policy()))
-   { // x bad.
-      return result;
-   }
-   result = scale / x;
-   if(result < tools::min_value<RealType>())
-      return 0;  // random variable is infinite or so close as to make no difference.
-   result = gamma_p_derivative(shape, result, Policy()) * scale;
-   if(0 != result)
-   {
-      if(x < 0)
-      {
-         // x * x may under or overflow, likewise our result,
-         // so be extra careful about the arithmetic:
-         RealType lim = tools::max_value<RealType>() * x;
-         if(lim < result)
-            return policies::raise_overflow_error<RealType, Policy>(function, "PDF is infinite.", Policy());
-         result /= x;
-         if(lim < result)
-            return policies::raise_overflow_error<RealType, Policy>(function, "PDF is infinite.", Policy());
-         result /= x;
-      }
-      result /= (x * x);
-   }
-   // better than naive
-   // result = (pow(scale, shape) * pow(x, (-shape -1)) * exp(-scale/x) ) / tgamma(shape);
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const inverse_gamma_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const inverse_gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-   { // distribution parameters bad.
-      return result;
-   }
-   if (x == 0)
-   { // Treat zero as a special case.
-     return 0;
-   }
-   else if(false == detail::check_inverse_gamma_x(function, x, &result, Policy()))
-   { // x bad
-      return result;
-   }
-   result = boost::math::gamma_q(shape, scale / x, Policy());
-   // result = tgamma(shape, scale / x) / tgamma(shape); // naive using tgamma
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const inverse_gamma_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-   using boost::math::gamma_q_inv;
-
-   static const char* function = "boost::math::quantile(const inverse_gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-   if(p == 1)
-   {
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   result = gamma_q_inv(shape, p, Policy());
-   if((result < 1) && (result * tools::max_value<RealType>() < scale))
-      return policies::raise_overflow_error<RealType, Policy>(function, "Value of random variable in inverse gamma distribution quantile is infinite.", Policy());
-   result = scale / result;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<inverse_gamma_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_inverse_gamma_x(function, c.param, &result, Policy()))
-      return result;
-
-   if(c.param == 0)
-      return 1; // Avoid division by zero
-
-   //result = 1. - gamma_q(shape, c.param / scale, Policy());
-   result = gamma_p(shape, scale/c.param, Policy());
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<inverse_gamma_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const inverse_gamma_distribution<%1%>&, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-   RealType q = c.param;
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   if(q == 0)
-   {
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   result = gamma_p_inv(shape, q, Policy());
-   if((result < 1) && (result * tools::max_value<RealType>() < scale))
-      return policies::raise_overflow_error<RealType, Policy>(function, "Value of random variable in inverse gamma distribution quantile is infinite.", Policy());
-   result = scale / result;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::mean(const inverse_gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-     return result;
-   }
-   if((shape <= 1) || !(boost::math::isfinite)(shape))
-   {
-     result = policies::raise_domain_error<RealType>(
-       function,
-       "Shape parameter is %1%, but for a defined mean it must be > 1", shape, Policy());
-     return result;
-   }
-  result = scale / (shape - 1);
-  return result;
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::variance(const inverse_gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-      if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-     return result;
-   }
-   if((shape <= 2) || !(boost::math::isfinite)(shape))
-   {
-     result = policies::raise_domain_error<RealType>(
-       function,
-       "Shape parameter is %1%, but for a defined variance it must be > 2", shape, Policy());
-     return result;
-   }
-   result = (scale * scale) / ((shape - 1) * (shape -1) * (shape -2));
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::mode(const inverse_gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_inverse_gamma(function, scale, shape, &result, Policy()))
-   {
-      return result;
-   }
-   // Only defined for shape >= 0, but is checked by check_inverse_gamma.
-   result = scale / (shape + 1);
-   return result;
-}
-
-//template <class RealType, class Policy>
-//inline RealType median(const gamma_distribution<RealType, Policy>& dist)
-//{  // Wikipedia does not define median,
-     // so rely on default definition quantile(0.5) in derived accessors.
-//  return result.
-//}
-
-template <class RealType, class Policy>
-inline RealType skewness(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::skewness(const inverse_gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-   RealType result = 0;
-
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-     return result;
-   }
-   if((shape <= 3) || !(boost::math::isfinite)(shape))
-   {
-     result = policies::raise_domain_error<RealType>(
-       function,
-       "Shape parameter is %1%, but for a defined skewness it must be > 3", shape, Policy());
-     return result;
-   }
-   result = (4 * sqrt(shape - 2) ) / (shape - 3);
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::kurtosis_excess(const inverse_gamma_distribution<%1%>&)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-     return result;
-   }
-   if((shape <= 4) || !(boost::math::isfinite)(shape))
-   {
-     result = policies::raise_domain_error<RealType>(
-       function,
-       "Shape parameter is %1%, but for a defined kurtosis excess it must be > 4", shape, Policy());
-     return result;
-   }
-   result = (30 * shape - 66) / ((shape - 3) * (shape - 4));
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const inverse_gamma_distribution<RealType, Policy>& dist)
-{
-  static const char* function = "boost::math::kurtosis(const inverse_gamma_distribution<%1%>&)";
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-
-  if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-     return result;
-   }
-   if((shape <= 4) || !(boost::math::isfinite)(shape))
-   {
-     result = policies::raise_domain_error<RealType>(
-       function,
-       "Shape parameter is %1%, but for a defined kurtosis it must be > 4", shape, Policy());
-     return result;
-   }
-  return kurtosis_excess(dist) + 3;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_INVERSE_GAMMA_HPP
--- a/any/include/boost/math/distributions/inverse_gaussian.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,527 +0,0 @@
-//  Copyright John Maddock 2010.
-//  Copyright Paul A. Bristow 2010.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_INVERSE_GAUSSIAN_HPP
-#define BOOST_STATS_INVERSE_GAUSSIAN_HPP
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4512) // assignment operator could not be generated
-#endif
-
-// http://en.wikipedia.org/wiki/Normal-inverse_Gaussian_distribution
-// http://mathworld.wolfram.com/InverseGaussianDistribution.html
-
-// The normal-inverse Gaussian distribution
-// also called the Wald distribution (some sources limit this to when mean = 1).
-
-// It is the continuous probability distribution
-// that is defined as the normal variance-mean mixture where the mixing density is the 
-// inverse Gaussian distribution. The tails of the distribution decrease more slowly
-// than the normal distribution. It is therefore suitable to model phenomena
-// where numerically large values are more probable than is the case for the normal distribution.
-
-// The Inverse Gaussian distribution was first studied in relationship to Brownian motion.
-// In 1956 M.C.K. Tweedie used the name 'Inverse Gaussian' because there is an inverse 
-// relationship between the time to cover a unit distance and distance covered in unit time.
-
-// Examples are returns from financial assets and turbulent wind speeds. 
-// The normal-inverse Gaussian distributions form
-// a subclass of the generalised hyperbolic distributions.
-
-// See also
-
-// http://en.wikipedia.org/wiki/Normal_distribution
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3661.htm
-// Also:
-// Weisstein, Eric W. "Normal Distribution."
-// From MathWorld--A Wolfram Web Resource.
-// http://mathworld.wolfram.com/NormalDistribution.html
-
-// http://www.jstatsoft.org/v26/i04/paper General class of inverse Gaussian distributions.
-// ig package - withdrawn but at http://cran.r-project.org/src/contrib/Archive/ig/
-
-// http://www.stat.ucl.ac.be/ISdidactique/Rhelp/library/SuppDists/html/inverse_gaussian.html
-// R package for dinverse_gaussian, ...
-
-// http://www.statsci.org/s/inverse_gaussian.s  and http://www.statsci.org/s/inverse_gaussian.html
-
-//#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/erf.hpp> // for erf/erfc.
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/normal.hpp>
-#include <boost/math/distributions/gamma.hpp> // for gamma function
-// using boost::math::gamma_p;
-
-#include <boost/math/tools/tuple.hpp>
-//using std::tr1::tuple;
-//using std::tr1::make_tuple;
-#include <boost/math/tools/roots.hpp>
-//using boost::math::tools::newton_raphson_iterate;
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-template <class RealType = double, class Policy = policies::policy<> >
-class inverse_gaussian_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   inverse_gaussian_distribution(RealType l_mean = 1, RealType l_scale = 1)
-      : m_mean(l_mean), m_scale(l_scale)
-   { // Default is a 1,1 inverse_gaussian distribution.
-     static const char* function = "boost::math::inverse_gaussian_distribution<%1%>::inverse_gaussian_distribution";
-
-     RealType result;
-     detail::check_scale(function, l_scale, &result, Policy());
-     detail::check_location(function, l_mean, &result, Policy());
-     detail::check_x_gt0(function, l_mean, &result, Policy());
-   }
-
-   RealType mean()const
-   { // alias for location.
-      return m_mean; // aka mu
-   }
-
-   // Synonyms, provided to allow generic use of find_location and find_scale.
-   RealType location()const
-   { // location, aka mu.
-      return m_mean;
-   }
-   RealType scale()const
-   { // scale, aka lambda.
-      return m_scale;
-   }
-
-   RealType shape()const
-   { // shape, aka phi = lambda/mu.
-      return m_scale / m_mean;
-   }
-
-private:
-   //
-   // Data members:
-   //
-   RealType m_mean;  // distribution mean or location, aka mu.
-   RealType m_scale;    // distribution standard deviation or scale, aka lambda.
-}; // class normal_distribution
-
-typedef inverse_gaussian_distribution<double> inverse_gaussian;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const inverse_gaussian_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x, zero to max.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0.), max_value<RealType>()); // - to + max value.
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const inverse_gaussian_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x, zero to max.
-  // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0.),  max_value<RealType>()); // - to + max value.
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& x)
-{ // Probability Density Function
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType scale = dist.scale();
-   RealType mean = dist.mean();
-   RealType result = 0;
-   static const char* function = "boost::math::pdf(const inverse_gaussian_distribution<%1%>&, %1%)";
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_location(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_x_gt0(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_positive_x(function, x, &result, Policy()))
-   {
-      return result;
-   }
-
-   if (x == 0)
-   {
-     return 0; // Convenient, even if not defined mathematically.
-   }
-
-   result =
-     sqrt(scale / (constants::two_pi<RealType>() * x * x * x))
-    * exp(-scale * (x - mean) * (x - mean) / (2 * x * mean * mean));
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& x)
-{ // Cumulative Density Function.
-   BOOST_MATH_STD_USING  // for ADL of std functions.
-
-   RealType scale = dist.scale();
-   RealType mean = dist.mean();
-   static const char* function = "boost::math::cdf(const inverse_gaussian_distribution<%1%>&, %1%)";
-   RealType result = 0;
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_location(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if (false == detail::check_x_gt0(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_positive_x(function, x, &result, Policy()))
-   {
-     return result;
-   }
-   if (x == 0)
-   {
-     return 0; // Convenient, even if not defined mathematically.
-   }
-   // Problem with this formula for large scale > 1000 or small x, 
-   //result = 0.5 * (erf(sqrt(scale / x) * ((x / mean) - 1) / constants::root_two<RealType>(), Policy()) + 1)
-   //  + exp(2 * scale / mean) / 2 
-   //  * (1 - erf(sqrt(scale / x) * (x / mean + 1) / constants::root_two<RealType>(), Policy()));
-   // so use normal distribution version:
-   // Wikipedia CDF equation http://en.wikipedia.org/wiki/Inverse_Gaussian_distribution.
-
-   normal_distribution<RealType> n01;
-
-   RealType n0 = sqrt(scale / x);
-   n0 *= ((x / mean) -1);
-   RealType n1 = cdf(n01, n0);
-   RealType expfactor = exp(2 * scale / mean);
-   RealType n3 = - sqrt(scale / x);
-   n3 *= (x / mean) + 1;
-   RealType n4 = cdf(n01, n3);
-   result = n1 + expfactor * n4;
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-struct inverse_gaussian_quantile_functor
-{ 
-
-  inverse_gaussian_quantile_functor(const boost::math::inverse_gaussian_distribution<RealType, Policy> dist, RealType const& p)
-    : distribution(dist), prob(p)
-  {
-  }
-  boost::math::tuple<RealType, RealType> operator()(RealType const& x)
-  {
-    RealType c = cdf(distribution, x);
-    RealType fx = c - prob;  // Difference cdf - value - to minimize.
-    RealType dx = pdf(distribution, x); // pdf is 1st derivative.
-    // return both function evaluation difference f(x) and 1st derivative f'(x).
-    return boost::math::make_tuple(fx, dx);
-  }
-  private:
-  const boost::math::inverse_gaussian_distribution<RealType, Policy> distribution;
-  RealType prob; 
-};
-
-template <class RealType, class Policy>
-struct inverse_gaussian_quantile_complement_functor
-{ 
-    inverse_gaussian_quantile_complement_functor(const boost::math::inverse_gaussian_distribution<RealType, Policy> dist, RealType const& p)
-    : distribution(dist), prob(p)
-  {
-  }
-  boost::math::tuple<RealType, RealType> operator()(RealType const& x)
-  {
-    RealType c = cdf(complement(distribution, x));
-    RealType fx = c - prob;  // Difference cdf - value - to minimize.
-    RealType dx = -pdf(distribution, x); // pdf is 1st derivative.
-    // return both function evaluation difference f(x) and 1st derivative f'(x).
-    //return std::tr1::make_tuple(fx, dx); if available.
-    return boost::math::make_tuple(fx, dx);
-  }
-  private:
-  const boost::math::inverse_gaussian_distribution<RealType, Policy> distribution;
-  RealType prob; 
-};
-
-namespace detail
-{
-  template <class RealType>
-  inline RealType guess_ig(RealType p, RealType mu = 1, RealType lambda = 1)
-  { // guess at random variate value x for inverse gaussian quantile.
-      BOOST_MATH_STD_USING
-      using boost::math::policies::policy;
-      // Error type.
-      using boost::math::policies::overflow_error;
-      // Action.
-      using boost::math::policies::ignore_error;
-
-      typedef policy<
-        overflow_error<ignore_error> // Ignore overflow (return infinity)
-      > no_overthrow_policy;
-
-    RealType x; // result is guess at random variate value x.
-    RealType phi = lambda / mu;
-    if (phi > 2.)
-    { // Big phi, so starting to look like normal Gaussian distribution.
-      //    x=(qnorm(p,0,1,true,false) - 0.5 * sqrt(mu/lambda)) / sqrt(lambda/mu);
-      // Whitmore, G.A. and Yalovsky, M.
-      // A normalising logarithmic transformation for inverse Gaussian random variables,
-      // Technometrics 20-2, 207-208 (1978), but using expression from
-      // V Seshadri, Inverse Gaussian distribution (1998) ISBN 0387 98618 9, page 6.
- 
-      normal_distribution<RealType, no_overthrow_policy> n01;
-      x = mu * exp(quantile(n01, p) / sqrt(phi) - 1/(2 * phi));
-     }
-    else
-    { // phi < 2 so much less symmetrical with long tail,
-      // so use gamma distribution as an approximation.
-      using boost::math::gamma_distribution;
-
-      // Define the distribution, using gamma_nooverflow:
-      typedef gamma_distribution<RealType, no_overthrow_policy> gamma_nooverflow;
-
-      gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
-
-      // gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
-      // R qgamma(0.2, 0.5, 1)  0.0320923
-      RealType qg = quantile(complement(g, p));
-      //RealType qg1 = qgamma(1.- p, 0.5, 1.0, true, false);
-      x = lambda / (qg * 2);
-      // 
-      if (x > mu/2) // x > mu /2?
-      { // x too large for the gamma approximation to work well.
-        //x = qgamma(p, 0.5, 1.0); // qgamma(0.270614, 0.5, 1) = 0.05983807
-        RealType q = quantile(g, p);
-       // x = mu * exp(q * static_cast<RealType>(0.1));  // Said to improve at high p
-       // x = mu * x;  // Improves at high p?
-        x = mu * exp(q / sqrt(phi) - 1/(2 * phi));
-      }
-    }
-    return x;
-  }  // guess_ig
-} // namespace detail
-
-template <class RealType, class Policy>
-inline RealType quantile(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions.
-   // No closed form exists so guess and use Newton Raphson iteration.
-
-   RealType mean = dist.mean();
-   RealType scale = dist.scale();
-   static const char* function = "boost::math::quantile(const inverse_gaussian_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   if (false == detail::check_x_gt0(function, mean, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-   if (p == 0)
-   {
-     return 0; // Convenient, even if not defined mathematically?
-   }
-   if (p == 1)
-   { // overflow 
-      result = policies::raise_overflow_error<RealType>(function,
-        "probability parameter is 1, but must be < 1!", Policy());
-      return result; // std::numeric_limits<RealType>::infinity();
-   }
-
-  RealType guess = detail::guess_ig(p, dist.mean(), dist.scale());
-  using boost::math::tools::max_value;
-
-  RealType min = 0.; // Minimum possible value is bottom of range of distribution.
-  RealType max = max_value<RealType>();// Maximum possible value is top of range. 
-  // int digits = std::numeric_limits<RealType>::digits; // Maximum possible binary digits accuracy for type T.
-  // digits used to control how accurate to try to make the result.
-  // To allow user to control accuracy versus speed,
-  int get_digits = policies::digits<RealType, Policy>();// get digits from policy, 
-  boost::uintmax_t m = policies::get_max_root_iterations<Policy>(); // and max iterations.
-  using boost::math::tools::newton_raphson_iterate;
-  result =
-    newton_raphson_iterate(inverse_gaussian_quantile_functor<RealType, Policy>(dist, p), guess, min, max, get_digits, m);
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<inverse_gaussian_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions.
-
-   RealType scale = c.dist.scale();
-   RealType mean = c.dist.mean();
-   RealType x = c.param;
-   static const char* function = "boost::math::cdf(const complement(inverse_gaussian_distribution<%1%>&), %1%)";
-   // infinite arguments not supported.
-   //if((boost::math::isinf)(x))
-   //{
-   //  if(x < 0) return 1; // cdf complement -infinity is unity.
-   //  return 0; // cdf complement +infinity is zero
-   //}
-   // These produce MSVC 4127 warnings, so the above used instead.
-   //if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-   //{ // cdf complement +infinity is zero.
-   //  return 0;
-   //}
-   //if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-   //{ // cdf complement -infinity is unity.
-   //  return 1;
-   //}
-   RealType result = 0;
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   if (false == detail::check_x_gt0(function, mean, &result, Policy()))
-      return result;
-   if(false == detail::check_positive_x(function, x, &result, Policy()))
-      return result;
-
-   normal_distribution<RealType> n01;
-   RealType n0 = sqrt(scale / x);
-   n0 *= ((x / mean) -1);
-   RealType cdf_1 = cdf(complement(n01, n0));
-
-   RealType expfactor = exp(2 * scale / mean);
-   RealType n3 = - sqrt(scale / x);
-   n3 *= (x / mean) + 1;
-
-   //RealType n5 = +sqrt(scale/x) * ((x /mean) + 1); // note now positive sign.
-   RealType n6 = cdf(complement(n01, +sqrt(scale/x) * ((x /mean) + 1)));
-   // RealType n4 = cdf(n01, n3); // = 
-   result = cdf_1 - expfactor * n6; 
-   return result;
-} // cdf complement
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<inverse_gaussian_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType scale = c.dist.scale();
-   RealType mean = c.dist.mean();
-   static const char* function = "boost::math::quantile(const complement(inverse_gaussian_distribution<%1%>&), %1%)";
-   RealType result = 0;
-   if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   if (false == detail::check_x_gt0(function, mean, &result, Policy()))
-      return result;
-   RealType q = c.param;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   RealType guess = detail::guess_ig(q, mean, scale);
-   // Complement.
-   using boost::math::tools::max_value;
-
-  RealType min = 0.; // Minimum possible value is bottom of range of distribution.
-  RealType max = max_value<RealType>();// Maximum possible value is top of range. 
-  // int digits = std::numeric_limits<RealType>::digits; // Maximum possible binary digits accuracy for type T.
-  // digits used to control how accurate to try to make the result.
-  int get_digits = policies::digits<RealType, Policy>();
-  boost::uintmax_t m = policies::get_max_root_iterations<Policy>();
-  using boost::math::tools::newton_raphson_iterate;
-  result =
-    newton_raphson_iterate(inverse_gaussian_quantile_complement_functor<RealType, Policy>(c.dist, q), guess, min, max, get_digits, m);
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType mean(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{ // aka mu
-   return dist.mean();
-}
-
-template <class RealType, class Policy>
-inline RealType scale(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{ // aka lambda
-   return dist.scale();
-}
-
-template <class RealType, class Policy>
-inline RealType shape(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{ // aka phi
-   return dist.shape();
-}
-
-template <class RealType, class Policy>
-inline RealType standard_deviation(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{
-  BOOST_MATH_STD_USING
-  RealType scale = dist.scale();
-  RealType mean = dist.mean();
-  RealType result = sqrt(mean * mean * mean / scale);
-  return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{
-  BOOST_MATH_STD_USING
-  RealType scale = dist.scale();
-  RealType  mean = dist.mean();
-  RealType result = mean * (sqrt(1 + (9 * mean * mean)/(4 * scale * scale)) 
-      - 3 * mean / (2 * scale));
-  return result;
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{
-  BOOST_MATH_STD_USING
-  RealType scale = dist.scale();
-  RealType  mean = dist.mean();
-  RealType result = 3 * sqrt(mean/scale);
-  return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{
-  RealType scale = dist.scale();
-  RealType  mean = dist.mean();
-  RealType result = 15 * mean / scale -3;
-  return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const inverse_gaussian_distribution<RealType, Policy>& dist)
-{
-  RealType scale = dist.scale();
-  RealType  mean = dist.mean();
-  RealType result = 15 * mean / scale;
-  return result;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_INVERSE_GAUSSIAN_HPP
-
-
--- a/any/include/boost/math/distributions/laplace.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,350 +0,0 @@
-//  Copyright Thijs van den Berg, 2008.
-//  Copyright John Maddock 2008.
-//  Copyright Paul A. Bristow 2008, 2014.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// This module implements the Laplace distribution.
-// Weisstein, Eric W. "Laplace Distribution." From MathWorld--A Wolfram Web Resource.
-// http://mathworld.wolfram.com/LaplaceDistribution.html
-// http://en.wikipedia.org/wiki/Laplace_distribution
-//
-// Abramowitz and Stegun 1972, p 930
-// http://www.math.sfu.ca/~cbm/aands/page_930.htm
-
-#ifndef BOOST_STATS_LAPLACE_HPP
-#define BOOST_STATS_LAPLACE_HPP
-
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <limits>
-
-namespace boost{ namespace math{
-
-#ifdef BOOST_MSVC
-#  pragma warning(push)
-#  pragma warning(disable:4127) // conditional expression is constant
-#endif
-
-template <class RealType = double, class Policy = policies::policy<> >
-class laplace_distribution
-{
-public:
-   // ----------------------------------
-   // public Types
-   // ----------------------------------
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   // ----------------------------------
-   // Constructor(s)
-   // ----------------------------------
-   laplace_distribution(RealType l_location = 0, RealType l_scale = 1)
-      : m_location(l_location), m_scale(l_scale)
-   {
-      RealType result;
-      check_parameters("boost::math::laplace_distribution<%1%>::laplace_distribution()", &result);
-   }
-
-
-   // ----------------------------------
-   // Public functions
-   // ----------------------------------
-
-   RealType location() const
-   {
-      return m_location;
-   }
-
-   RealType scale() const
-   {
-      return m_scale;
-   }
-
-   bool check_parameters(const char* function, RealType* result) const
-   {
-         if(false == detail::check_scale(function, m_scale, result, Policy())) return false;
-         if(false == detail::check_location(function, m_location, result, Policy())) return false;
-         return true;
-   }
-
-private:
-   RealType m_location;
-   RealType m_scale;
-}; // class laplace_distribution
-
-//
-// Convenient type synonym for double.
-typedef laplace_distribution<double> laplace;
-
-//
-// Non-member functions.
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const laplace_distribution<RealType, Policy>&)
-{
-   if (std::numeric_limits<RealType>::has_infinity)
-  {  // Can use infinity.
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max value.
-  }
-
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const laplace_distribution<RealType, Policy>&)
-{
-  if (std::numeric_limits<RealType>::has_infinity)
-  { // Can Use infinity.
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max value.
-  }
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const laplace_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   // Checking function argument
-   RealType result = 0;
-   const char* function = "boost::math::pdf(const laplace_distribution<%1%>&, %1%))";
-
-   // Check scale and location.
-   if (false == dist.check_parameters(function, &result)) return result;
-   // Special pdf values.
-   if((boost::math::isinf)(x))
-   {
-      return 0; // pdf + and - infinity is zero.
-   }
-   if (false == detail::check_x(function, x, &result, Policy())) return result;
-
-   // General case
-   RealType scale( dist.scale() );
-   RealType location( dist.location() );
-
-   RealType exponent = x - location;
-   if (exponent>0) exponent = -exponent;
-   exponent /= scale;
-
-   result = exp(exponent);
-   result /= 2 * scale;
-
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const laplace_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // For ADL of std functions.
-
-   RealType result = 0;
-   // Checking function argument.
-   const char* function = "boost::math::cdf(const laplace_distribution<%1%>&, %1%)";
-   // Check scale and location.
-   if (false == dist.check_parameters(function, &result)) return result;
-
-   // Special cdf values:
-   if((boost::math::isinf)(x))
-   {
-     if(x < 0) return 0; // -infinity.
-     return 1; // + infinity.
-   }
-   if (false == detail::check_x(function, x, &result, Policy())) return result;
-
-   // General cdf  values
-   RealType scale( dist.scale() );
-   RealType location( dist.location() );
-
-   if (x < location)
-   {
-      result = exp( (x-location)/scale )/2;
-   }
-   else
-   {
-      result = 1 - exp( (location-x)/scale )/2;
-   }
-   return result;
-} // cdf
-
-
-template <class RealType, class Policy>
-inline RealType quantile(const laplace_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions.
-
-   // Checking function argument
-   RealType result = 0;
-   const char* function = "boost::math::quantile(const laplace_distribution<%1%>&, %1%)";
-   if (false == dist.check_parameters(function, &result)) return result;
-   if(false == detail::check_probability(function, p, &result, Policy())) return result;
-
-   // Extreme values of p:
-   if(p == 0)
-   {
-      result = policies::raise_overflow_error<RealType>(function,
-        "probability parameter is 0, but must be > 0!", Policy());
-      return -result; // -std::numeric_limits<RealType>::infinity();
-   }
-  
-   if(p == 1)
-   {
-      result = policies::raise_overflow_error<RealType>(function,
-        "probability parameter is 1, but must be < 1!", Policy());
-      return result; // std::numeric_limits<RealType>::infinity();
-   }
-   // Calculate Quantile
-   RealType scale( dist.scale() );
-   RealType location( dist.location() );
-
-   if (p - 0.5 < 0.0)
-      result = location + scale*log( static_cast<RealType>(p*2) );
-   else
-      result = location - scale*log( static_cast<RealType>(-p*2 + 2) );
-
-   return result;
-} // quantile
-
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<laplace_distribution<RealType, Policy>, RealType>& c)
-{
-   // Calculate complement of cdf.
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   RealType scale = c.dist.scale();
-   RealType location = c.dist.location();
-   RealType x = c.param;
-   RealType result = 0;
-
-   // Checking function argument.
-   const char* function = "boost::math::cdf(const complemented2_type<laplace_distribution<%1%>, %1%>&)";
-
-   // Check scale and location.
-   //if(false == detail::check_scale(function, scale, result, Policy())) return false;
-   //if(false == detail::check_location(function, location, result, Policy())) return false;
-    if (false == c.dist.check_parameters(function, &result)) return result;
-
-   // Special cdf values.
-   if((boost::math::isinf)(x))
-   {
-     if(x < 0) return 1; // cdf complement -infinity is unity.
-     return 0; // cdf complement +infinity is zero.
-   }
-   if(false == detail::check_x(function, x, &result, Policy()))return result;
-
-   // Cdf interval value.
-   if (-x < -location)
-   {
-      result = exp( (-x+location)/scale )/2;
-   }
-   else
-   {
-      result = 1 - exp( (-location+x)/scale )/2;
-   }
-   return result;
-} // cdf complement
-
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<laplace_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions.
-
-   // Calculate quantile.
-   RealType scale = c.dist.scale();
-   RealType location = c.dist.location();
-   RealType q = c.param;
-   RealType result = 0;
-
-   // Checking function argument.
-   const char* function = "quantile(const complemented2_type<laplace_distribution<%1%>, %1%>&)";
-   if (false == c.dist.check_parameters(function, &result)) return result;
-   
-   // Extreme values.
-   if(q == 0)
-   {
-       return std::numeric_limits<RealType>::infinity();
-   }
-   if(q == 1)
-   {
-       return -std::numeric_limits<RealType>::infinity();
-   }
-   if(false == detail::check_probability(function, q, &result, Policy())) return result;
-
-   if (0.5 - q < 0.0)
-      result = location + scale*log( static_cast<RealType>(-q*2 + 2) );
-   else
-      result = location - scale*log( static_cast<RealType>(q*2) );
-
-
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType mean(const laplace_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-
-template <class RealType, class Policy>
-inline RealType standard_deviation(const laplace_distribution<RealType, Policy>& dist)
-{
-   return constants::root_two<RealType>() * dist.scale();
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const laplace_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-
-template <class RealType, class Policy>
-inline RealType median(const laplace_distribution<RealType, Policy>& dist)
-{
-   return dist.location();
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const laplace_distribution<RealType, Policy>& /*dist*/)
-{
-   return 0;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const laplace_distribution<RealType, Policy>& /*dist*/)
-{
-   return 6;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const laplace_distribution<RealType, Policy>& /*dist*/)
-{
-   return 3;
-}
-
-#ifdef BOOST_MSVC
-#  pragma warning(pop)
-#endif
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_LAPLACE_HPP
-
-
--- a/any/include/boost/math/distributions/logistic.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,299 +0,0 @@
-// Copyright 2008 Gautam Sewani
-//
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_DISTRIBUTIONS_LOGISTIC
-#define BOOST_MATH_DISTRIBUTIONS_LOGISTIC
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/special_functions/log1p.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <utility>
-
-namespace boost { namespace math { 
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class logistic_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-      
-      logistic_distribution(RealType l_location=0, RealType l_scale=1) // Constructor.
-        : m_location(l_location), m_scale(l_scale) 
-      {
-        static const char* function = "boost::math::logistic_distribution<%1%>::logistic_distribution";
-        
-        RealType result;
-        detail::check_scale(function, l_scale, &result, Policy());
-        detail::check_location(function, l_location, &result, Policy());
-      }
-      // Accessor functions.
-      RealType scale()const
-      {
-        return m_scale;
-      }
-      
-      RealType location()const
-      {
-        return m_location;
-      }
-    private:
-      // Data members:
-      RealType m_location;  // distribution location aka mu.
-      RealType m_scale;  // distribution scale aka s.
-    }; // class logistic_distribution
-    
-    
-    typedef logistic_distribution<double> logistic;
-    
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const logistic_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable x.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(
-         std::numeric_limits<RealType>::has_infinity ? -std::numeric_limits<RealType>::infinity() : -max_value<RealType>(), 
-         std::numeric_limits<RealType>::has_infinity ? std::numeric_limits<RealType>::infinity() : max_value<RealType>());
-    }
-    
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const logistic_distribution<RealType, Policy>& /* dist */)
-    { // Range of supported values for random variable x.
-      // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + infinity
-    }
-     
-    template <class RealType, class Policy>
-    inline RealType pdf(const logistic_distribution<RealType, Policy>& dist, const RealType& x)
-    {
-       static const char* function = "boost::math::pdf(const logistic_distribution<%1%>&, %1%)";
-       RealType scale = dist.scale();
-       RealType location = dist.location();
-       RealType result = 0;
-
-       if(false == detail::check_scale(function, scale , &result, Policy()))
-       {
-          return result;
-       }
-       if(false == detail::check_location(function, location, &result, Policy()))
-       {
-          return result;
-       }
-
-       if((boost::math::isinf)(x))
-       {
-          return 0; // pdf + and - infinity is zero.
-       }
-
-       if(false == detail::check_x(function, x, &result, Policy()))
-       {
-          return result;
-       }
-
-       BOOST_MATH_STD_USING
-       RealType exp_term = (location - x) / scale;
-       if(fabs(exp_term) > tools::log_max_value<RealType>())
-          return 0;
-       exp_term = exp(exp_term);
-       if((exp_term * scale > 1) && (exp_term > tools::max_value<RealType>() / (scale * exp_term)))
-          return 1 / (scale * exp_term);
-       return (exp_term) / (scale * (1 + exp_term) * (1 + exp_term));
-    } 
-    
-    template <class RealType, class Policy>
-    inline RealType cdf(const logistic_distribution<RealType, Policy>& dist, const RealType& x)
-    {
-       RealType scale = dist.scale();
-       RealType location = dist.location();
-       RealType result = 0; // of checks.
-       static const char* function = "boost::math::cdf(const logistic_distribution<%1%>&, %1%)";
-       if(false == detail::check_scale(function, scale, &result, Policy()))
-       {
-          return result;
-       }
-       if(false == detail::check_location(function, location, &result, Policy()))
-       {
-          return result;
-       }
-
-       if((boost::math::isinf)(x))
-       {
-          if(x < 0) return 0; // -infinity
-          return 1; // + infinity
-       }
-
-       if(false == detail::check_x(function, x, &result, Policy()))
-       {
-          return result;
-       }
-       BOOST_MATH_STD_USING
-       RealType power = (location - x) / scale;
-       if(power > tools::log_max_value<RealType>())
-          return 0;
-       if(power < -tools::log_max_value<RealType>())
-          return 1;
-       return 1 / (1 + exp(power)); 
-    } 
-    
-    template <class RealType, class Policy>
-    inline RealType quantile(const logistic_distribution<RealType, Policy>& dist, const RealType& p)
-    {
-       BOOST_MATH_STD_USING
-       RealType location = dist.location();
-       RealType scale = dist.scale();
-
-       static const char* function = "boost::math::quantile(const logistic_distribution<%1%>&, %1%)";
-
-       RealType result = 0;
-       if(false == detail::check_scale(function, scale, &result, Policy()))
-          return result;
-       if(false == detail::check_location(function, location, &result, Policy()))
-          return result;
-       if(false == detail::check_probability(function, p, &result, Policy()))
-          return result;
-
-       if(p == 0)
-       {
-          return -policies::raise_overflow_error<RealType>(function,"probability argument is 0, must be >0 and <1",Policy());
-       }
-       if(p == 1)
-       {
-          return policies::raise_overflow_error<RealType>(function,"probability argument is 1, must be >0 and <1",Policy());
-       }
-       //Expressions to try
-       //return location+scale*log(p/(1-p));
-       //return location+scale*log1p((2*p-1)/(1-p));
-
-       //return location - scale*log( (1-p)/p);
-       //return location - scale*log1p((1-2*p)/p);
-
-       //return -scale*log(1/p-1) + location;
-       return location - scale * log((1 - p) / p);
-     } // RealType quantile(const logistic_distribution<RealType, Policy>& dist, const RealType& p)
-    
-    template <class RealType, class Policy>
-    inline RealType cdf(const complemented2_type<logistic_distribution<RealType, Policy>, RealType>& c)
-    {
-       BOOST_MATH_STD_USING
-       RealType location = c.dist.location();
-       RealType scale = c.dist.scale();
-       RealType x = c.param;
-       static const char* function = "boost::math::cdf(const complement(logistic_distribution<%1%>&), %1%)";
-
-       RealType result = 0;
-       if(false == detail::check_scale(function, scale, &result, Policy()))
-       {
-          return result;
-       }
-       if(false == detail::check_location(function, location, &result, Policy()))
-       {
-          return result;
-       }
-       if((boost::math::isinf)(x))
-       {
-          if(x < 0) return 1; // cdf complement -infinity is unity.
-          return 0; // cdf complement +infinity is zero.
-       }
-       if(false == detail::check_x(function, x, &result, Policy()))
-       {
-          return result;
-       }
-       RealType power = (x - location) / scale;
-       if(power > tools::log_max_value<RealType>())
-          return 0;
-       if(power < -tools::log_max_value<RealType>())
-          return 1;
-       return 1 / (1 + exp(power)); 
-    } 
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<logistic_distribution<RealType, Policy>, RealType>& c)
-    {
-       BOOST_MATH_STD_USING
-       RealType scale = c.dist.scale();
-       RealType location = c.dist.location();
-       static const char* function = "boost::math::quantile(const complement(logistic_distribution<%1%>&), %1%)";
-       RealType result = 0;
-       if(false == detail::check_scale(function, scale, &result, Policy()))
-          return result;
-       if(false == detail::check_location(function, location, &result, Policy()))
-          return result;
-       RealType q = c.param;
-       if(false == detail::check_probability(function, q, &result, Policy()))
-          return result;
-       using boost::math::tools::max_value;
-
-       if(q == 1)
-       {
-          return -policies::raise_overflow_error<RealType>(function,"probability argument is 1, but must be >0 and <1",Policy());
-       }
-       if(q == 0)
-       {
-          return policies::raise_overflow_error<RealType>(function,"probability argument is 0, but must be >0 and <1",Policy());
-       }
-       //Expressions to try 
-       //return location+scale*log((1-q)/q);
-       return location + scale * log((1 - q) / q);
-
-       //return location-scale*log(q/(1-q));
-       //return location-scale*log1p((2*q-1)/(1-q));
-
-       //return location+scale*log(1/q-1);
-       //return location+scale*log1p(1/q-2);
-    } 
-    
-    template <class RealType, class Policy>
-    inline RealType mean(const logistic_distribution<RealType, Policy>& dist)
-    {
-      return dist.location();
-    } // RealType mean(const logistic_distribution<RealType, Policy>& dist)
-    
-    template <class RealType, class Policy>
-    inline RealType variance(const logistic_distribution<RealType, Policy>& dist)
-    {
-      BOOST_MATH_STD_USING
-      RealType scale = dist.scale();
-      return boost::math::constants::pi<RealType>()*boost::math::constants::pi<RealType>()*scale*scale/3;
-    } // RealType variance(const logistic_distribution<RealType, Policy>& dist)
-    
-    template <class RealType, class Policy>
-    inline RealType mode(const logistic_distribution<RealType, Policy>& dist)
-    {
-      return dist.location();
-    }
-    
-    template <class RealType, class Policy>
-    inline RealType median(const logistic_distribution<RealType, Policy>& dist)
-    {
-      return dist.location();
-    }
-    template <class RealType, class Policy>
-    inline RealType skewness(const logistic_distribution<RealType, Policy>& /*dist*/)
-    {
-      return 0;
-    } // RealType skewness(const logistic_distribution<RealType, Policy>& dist)
-    
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const logistic_distribution<RealType, Policy>& /*dist*/)
-    {
-      return static_cast<RealType>(6)/5; 
-    } // RealType kurtosis_excess(const logistic_distribution<RealType, Policy>& dist)
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const logistic_distribution<RealType, Policy>& dist)
-    {
-      return kurtosis_excess(dist) + 3;
-    } // RealType kurtosis_excess(const logistic_distribution<RealType, Policy>& dist)
-  }}
-
-
-// Must come at the end:
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_DISTRIBUTIONS_LOGISTIC
--- a/any/include/boost/math/distributions/lognormal.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,341 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_LOGNORMAL_HPP
-#define BOOST_STATS_LOGNORMAL_HPP
-
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3669.htm
-// http://mathworld.wolfram.com/LogNormalDistribution.html
-// http://en.wikipedia.org/wiki/Lognormal_distribution
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-namespace detail
-{
-
-  template <class RealType, class Policy>
-  inline bool check_lognormal_x(
-        const char* function,
-        RealType const& x,
-        RealType* result, const Policy& pol)
-  {
-     if((x < 0) || !(boost::math::isfinite)(x))
-     {
-        *result = policies::raise_domain_error<RealType>(
-           function,
-           "Random variate is %1% but must be >= 0 !", x, pol);
-        return false;
-     }
-     return true;
-  }
-
-} // namespace detail
-
-
-template <class RealType = double, class Policy = policies::policy<> >
-class lognormal_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   lognormal_distribution(RealType l_location = 0, RealType l_scale = 1)
-      : m_location(l_location), m_scale(l_scale)
-   {
-      RealType result;
-      detail::check_scale("boost::math::lognormal_distribution<%1%>::lognormal_distribution", l_scale, &result, Policy());
-      detail::check_location("boost::math::lognormal_distribution<%1%>::lognormal_distribution", l_location, &result, Policy());
-   }
-
-   RealType location()const
-   {
-      return m_location;
-   }
-
-   RealType scale()const
-   {
-      return m_scale;
-   }
-private:
-   //
-   // Data members:
-   //
-   RealType m_location;  // distribution location.
-   RealType m_scale;     // distribution scale.
-};
-
-typedef lognormal_distribution<double> lognormal;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const lognormal_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x is >0 to +infinity.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const lognormal_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-RealType pdf(const lognormal_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType mu = dist.location();
-   RealType sigma = dist.scale();
-
-   static const char* function = "boost::math::pdf(const lognormal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(0 == detail::check_scale(function, sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location(function, mu, &result, Policy()))
-      return result;
-   if(0 == detail::check_lognormal_x(function, x, &result, Policy()))
-      return result;
-
-   if(x == 0)
-      return 0;
-
-   RealType exponent = log(x) - mu;
-   exponent *= -exponent;
-   exponent /= 2 * sigma * sigma;
-
-   result = exp(exponent);
-   result /= sigma * sqrt(2 * constants::pi<RealType>()) * x;
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const lognormal_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const lognormal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(0 == detail::check_scale(function, dist.scale(), &result, Policy()))
-      return result;
-   if(0 == detail::check_location(function, dist.location(), &result, Policy()))
-      return result;
-   if(0 == detail::check_lognormal_x(function, x, &result, Policy()))
-      return result;
-
-   if(x == 0)
-      return 0;
-
-   normal_distribution<RealType, Policy> norm(dist.location(), dist.scale());
-   return cdf(norm, log(x));
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const lognormal_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const lognormal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(0 == detail::check_scale(function, dist.scale(), &result, Policy()))
-      return result;
-   if(0 == detail::check_location(function, dist.location(), &result, Policy()))
-      return result;
-   if(0 == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 0)
-      return 0;
-   if(p == 1)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   normal_distribution<RealType, Policy> norm(dist.location(), dist.scale());
-   return exp(quantile(norm, p));
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<lognormal_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const lognormal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(0 == detail::check_scale(function, c.dist.scale(), &result, Policy()))
-      return result;
-   if(0 == detail::check_location(function, c.dist.location(), &result, Policy()))
-      return result;
-   if(0 == detail::check_lognormal_x(function, c.param, &result, Policy()))
-      return result;
-
-   if(c.param == 0)
-      return 1;
-
-   normal_distribution<RealType, Policy> norm(c.dist.location(), c.dist.scale());
-   return cdf(complement(norm, log(c.param)));
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<lognormal_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const lognormal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(0 == detail::check_scale(function, c.dist.scale(), &result, Policy()))
-      return result;
-   if(0 == detail::check_location(function, c.dist.location(), &result, Policy()))
-      return result;
-   if(0 == detail::check_probability(function, c.param, &result, Policy()))
-      return result;
-
-   if(c.param == 1)
-      return 0;
-   if(c.param == 0)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   normal_distribution<RealType, Policy> norm(c.dist.location(), c.dist.scale());
-   return exp(quantile(complement(norm, c.param)));
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType mu = dist.location();
-   RealType sigma = dist.scale();
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::mean(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::mean(const lognormal_distribution<%1%>&)", mu, &result, Policy()))
-      return result;
-
-   return exp(mu + sigma * sigma / 2);
-}
-
-template <class RealType, class Policy>
-inline RealType variance(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType mu = dist.location();
-   RealType sigma = dist.scale();
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::variance(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::variance(const lognormal_distribution<%1%>&)", mu, &result, Policy()))
-      return result;
-
-   return boost::math::expm1(sigma * sigma, Policy()) * exp(2 * mu + sigma * sigma);
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType mu = dist.location();
-   RealType sigma = dist.scale();
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::mode(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::mode(const lognormal_distribution<%1%>&)", mu, &result, Policy()))
-      return result;
-
-   return exp(mu - sigma * sigma);
-}
-
-template <class RealType, class Policy>
-inline RealType median(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-   RealType mu = dist.location();
-   return exp(mu); // e^mu
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   //RealType mu = dist.location();
-   RealType sigma = dist.scale();
-
-   RealType ss = sigma * sigma;
-   RealType ess = exp(ss);
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::skewness(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::skewness(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy()))
-      return result;
-
-   return (ess + 2) * sqrt(boost::math::expm1(ss, Policy()));
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   //RealType mu = dist.location();
-   RealType sigma = dist.scale();
-   RealType ss = sigma * sigma;
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::kurtosis(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::kurtosis(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy()))
-      return result;
-
-   return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 3;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const lognormal_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   // RealType mu = dist.location();
-   RealType sigma = dist.scale();
-   RealType ss = sigma * sigma;
-
-   RealType result = 0;
-   if(0 == detail::check_scale("boost::math::kurtosis_excess(const lognormal_distribution<%1%>&)", sigma, &result, Policy()))
-      return result;
-   if(0 == detail::check_location("boost::math::kurtosis_excess(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy()))
-      return result;
-
-   return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 6;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_STUDENTS_T_HPP
-
-
--- a/any/include/boost/math/distributions/negative_binomial.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,607 +0,0 @@
-// boost\math\special_functions\negative_binomial.hpp
-
-// Copyright Paul A. Bristow 2007.
-// Copyright John Maddock 2007.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// http://en.wikipedia.org/wiki/negative_binomial_distribution
-// http://mathworld.wolfram.com/NegativeBinomialDistribution.html
-// http://documents.wolfram.com/teachersedition/Teacher/Statistics/DiscreteDistributions.html
-
-// The negative binomial distribution NegativeBinomialDistribution[n, p]
-// is the distribution of the number (k) of failures that occur in a sequence of trials before
-// r successes have occurred, where the probability of success in each trial is p.
-
-// In a sequence of Bernoulli trials or events
-// (independent, yes or no, succeed or fail) with success_fraction probability p,
-// negative_binomial is the probability that k or fewer failures
-// preceed the r th trial's success.
-// random variable k is the number of failures (NOT the probability).
-
-// Negative_binomial distribution is a discrete probability distribution.
-// But note that the negative binomial distribution
-// (like others including the binomial, Poisson & Bernoulli)
-// is strictly defined as a discrete function: only integral values of k are envisaged.
-// However because of the method of calculation using a continuous gamma function,
-// it is convenient to treat it as if a continous function,
-// and permit non-integral values of k.
-
-// However, by default the policy is to use discrete_quantile_policy.
-
-// To enforce the strict mathematical model, users should use conversion
-// on k outside this function to ensure that k is integral.
-
-// MATHCAD cumulative negative binomial pnbinom(k, n, p)
-
-// Implementation note: much greater speed, and perhaps greater accuracy,
-// might be achieved for extreme values by using a normal approximation.
-// This is NOT been tested or implemented.
-
-#ifndef BOOST_MATH_SPECIAL_NEGATIVE_BINOMIAL_HPP
-#define BOOST_MATH_SPECIAL_NEGATIVE_BINOMIAL_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for ibeta(a, b, x) == Ix(a, b).
-#include <boost/math/distributions/complement.hpp> // complement.
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks domain_error & logic_error.
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
-
-#include <boost/type_traits/is_floating_point.hpp>
-#include <boost/type_traits/is_integral.hpp>
-#include <boost/type_traits/is_same.hpp>
-#include <boost/mpl/if.hpp>
-
-#include <limits> // using std::numeric_limits;
-#include <utility>
-
-#if defined (BOOST_MSVC)
-#  pragma warning(push)
-// This believed not now necessary, so commented out.
-//#  pragma warning(disable: 4702) // unreachable code.
-// in domain_error_imp in error_handling.
-#endif
-
-namespace boost
-{
-  namespace math
-  {
-    namespace negative_binomial_detail
-    {
-      // Common error checking routines for negative binomial distribution functions:
-      template <class RealType, class Policy>
-      inline bool check_successes(const char* function, const RealType& r, RealType* result, const Policy& pol)
-      {
-        if( !(boost::math::isfinite)(r) || (r <= 0) )
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Number of successes argument is %1%, but must be > 0 !", r, pol);
-          return false;
-        }
-        return true;
-      }
-      template <class RealType, class Policy>
-      inline bool check_success_fraction(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      {
-        if( !(boost::math::isfinite)(p) || (p < 0) || (p > 1) )
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Success fraction argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-          return false;
-        }
-        return true;
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& r, const RealType& p, RealType* result, const Policy& pol)
-      {
-        return check_success_fraction(function, p, result, pol)
-          && check_successes(function, r, result, pol);
-      }
-      template <class RealType, class Policy>
-      inline bool check_dist_and_k(const char* function, const RealType& r, const RealType& p, RealType k, RealType* result, const Policy& pol)
-      {
-        if(check_dist(function, r, p, result, pol) == false)
-        {
-          return false;
-        }
-        if( !(boost::math::isfinite)(k) || (k < 0) )
-        { // Check k failures.
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Number of failures argument is %1%, but must be >= 0 !", k, pol);
-          return false;
-        }
-        return true;
-      } // Check_dist_and_k
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, const RealType& r, RealType p, RealType prob, RealType* result, const Policy& pol)
-      {
-        if((check_dist(function, r, p, result, pol) && detail::check_probability(function, prob, result, pol)) == false)
-        {
-          return false;
-        }
-        return true;
-      } // check_dist_and_prob
-    } //  namespace negative_binomial_detail
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class negative_binomial_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      negative_binomial_distribution(RealType r, RealType p) : m_r(r), m_p(p)
-      { // Constructor.
-        RealType result;
-        negative_binomial_detail::check_dist(
-          "negative_binomial_distribution<%1%>::negative_binomial_distribution",
-          m_r, // Check successes r > 0.
-          m_p, // Check success_fraction 0 <= p <= 1.
-          &result, Policy());
-      } // negative_binomial_distribution constructor.
-
-      // Private data getter class member functions.
-      RealType success_fraction() const
-      { // Probability of success as fraction in range 0 to 1.
-        return m_p;
-      }
-      RealType successes() const
-      { // Total number of successes r.
-        return m_r;
-      }
-
-      static RealType find_lower_bound_on_p(
-        RealType trials,
-        RealType successes,
-        RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
-      {
-        static const char* function = "boost::math::negative_binomial<%1%>::find_lower_bound_on_p";
-        RealType result = 0;  // of error checks.
-        RealType failures = trials - successes;
-        if(false == detail::check_probability(function, alpha, &result, Policy())
-          && negative_binomial_detail::check_dist_and_k(
-          function, successes, RealType(0), failures, &result, Policy()))
-        {
-          return result;
-        }
-        // Use complement ibeta_inv function for lower bound.
-        // This is adapted from the corresponding binomial formula
-        // here: http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
-        // This is a Clopper-Pearson interval, and may be overly conservative,
-        // see also "A Simple Improved Inferential Method for Some
-        // Discrete Distributions" Yong CAI and K. KRISHNAMOORTHY
-        // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
-        //
-        return ibeta_inv(successes, failures + 1, alpha, static_cast<RealType*>(0), Policy());
-      } // find_lower_bound_on_p
-
-      static RealType find_upper_bound_on_p(
-        RealType trials,
-        RealType successes,
-        RealType alpha) // alpha 0.05 equivalent to 95% for one-sided test.
-      {
-        static const char* function = "boost::math::negative_binomial<%1%>::find_upper_bound_on_p";
-        RealType result = 0;  // of error checks.
-        RealType failures = trials - successes;
-        if(false == negative_binomial_detail::check_dist_and_k(
-          function, successes, RealType(0), failures, &result, Policy())
-          && detail::check_probability(function, alpha, &result, Policy()))
-        {
-          return result;
-        }
-        if(failures == 0)
-           return 1;
-        // Use complement ibetac_inv function for upper bound.
-        // Note adjusted failures value: *not* failures+1 as usual.
-        // This is adapted from the corresponding binomial formula
-        // here: http://www.itl.nist.gov/div898/handbook/prc/section2/prc241.htm
-        // This is a Clopper-Pearson interval, and may be overly conservative,
-        // see also "A Simple Improved Inferential Method for Some
-        // Discrete Distributions" Yong CAI and K. KRISHNAMOORTHY
-        // http://www.ucs.louisiana.edu/~kxk4695/Discrete_new.pdf
-        //
-        return ibetac_inv(successes, failures, alpha, static_cast<RealType*>(0), Policy());
-      } // find_upper_bound_on_p
-
-      // Estimate number of trials :
-      // "How many trials do I need to be P% sure of seeing k or fewer failures?"
-
-      static RealType find_minimum_number_of_trials(
-        RealType k,     // number of failures (k >= 0).
-        RealType p,     // success fraction 0 <= p <= 1.
-        RealType alpha) // risk level threshold 0 <= alpha <= 1.
-      {
-        static const char* function = "boost::math::negative_binomial<%1%>::find_minimum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == negative_binomial_detail::check_dist_and_k(
-          function, RealType(1), p, k, &result, Policy())
-          && detail::check_probability(function, alpha, &result, Policy()))
-        { return result; }
-
-        result = ibeta_inva(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      } // RealType find_number_of_failures
-
-      static RealType find_maximum_number_of_trials(
-        RealType k,     // number of failures (k >= 0).
-        RealType p,     // success fraction 0 <= p <= 1.
-        RealType alpha) // risk level threshold 0 <= alpha <= 1.
-      {
-        static const char* function = "boost::math::negative_binomial<%1%>::find_maximum_number_of_trials";
-        // Error checks:
-        RealType result = 0;
-        if(false == negative_binomial_detail::check_dist_and_k(
-          function, RealType(1), p, k, &result, Policy())
-          &&  detail::check_probability(function, alpha, &result, Policy()))
-        { return result; }
-
-        result = ibetac_inva(k + 1, p, alpha, Policy());  // returns n - k
-        return result + k;
-      } // RealType find_number_of_trials complemented
-
-    private:
-      RealType m_r; // successes.
-      RealType m_p; // success_fraction
-    }; // template <class RealType, class Policy> class negative_binomial_distribution
-
-    typedef negative_binomial_distribution<double> negative_binomial; // Reserved name of type double.
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const negative_binomial_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable k.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // max_integer?
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const negative_binomial_distribution<RealType, Policy>& /* dist */)
-    { // Range of supported values for random variable k.
-       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>()); // max_integer?
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // Mean of Negative Binomial distribution = r(1-p)/p.
-      return dist.successes() * (1 - dist.success_fraction() ) / dist.success_fraction();
-    } // mean
-
-    //template <class RealType, class Policy>
-    //inline RealType median(const negative_binomial_distribution<RealType, Policy>& dist)
-    //{ // Median of negative_binomial_distribution is not defined.
-    //  return policies::raise_domain_error<RealType>(BOOST_CURRENT_FUNCTION, "Median is not implemented, result is %1%!", std::numeric_limits<RealType>::quiet_NaN());
-    //} // median
-    // Now implemented via quantile(half) in derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType mode(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // Mode of Negative Binomial distribution = floor[(r-1) * (1 - p)/p]
-      BOOST_MATH_STD_USING // ADL of std functions.
-      return floor((dist.successes() -1) * (1 - dist.success_fraction()) / dist.success_fraction());
-    } // mode
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // skewness of Negative Binomial distribution = 2-p / (sqrt(r(1-p))
-      BOOST_MATH_STD_USING // ADL of std functions.
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-
-      return (2 - p) /
-        sqrt(r * (1 - p));
-    } // skewness
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // kurtosis of Negative Binomial distribution
-      // http://en.wikipedia.org/wiki/Negative_binomial is kurtosis_excess so add 3
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-      return 3 + (6 / r) + ((p * p) / (r * (1 - p)));
-    } // kurtosis
-
-     template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // kurtosis excess of Negative Binomial distribution
-      // http://mathworld.wolfram.com/Kurtosis.html table of kurtosis_excess
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-      return (6 - p * (6-p)) / (r * (1-p));
-    } // kurtosis_excess
-
-    template <class RealType, class Policy>
-    inline RealType variance(const negative_binomial_distribution<RealType, Policy>& dist)
-    { // Variance of Binomial distribution = r (1-p) / p^2.
-      return  dist.successes() * (1 - dist.success_fraction())
-        / (dist.success_fraction() * dist.success_fraction());
-    } // variance
-
-    // RealType standard_deviation(const negative_binomial_distribution<RealType, Policy>& dist)
-    // standard_deviation provided by derived accessors.
-    // RealType hazard(const negative_binomial_distribution<RealType, Policy>& dist)
-    // hazard of Negative Binomial distribution provided by derived accessors.
-    // RealType chf(const negative_binomial_distribution<RealType, Policy>& dist)
-    // chf of Negative Binomial distribution provided by derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType pdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Probability Density/Mass Function.
-      BOOST_FPU_EXCEPTION_GUARD
-
-      static const char* function = "boost::math::pdf(const negative_binomial_distribution<%1%>&, %1%)";
-
-      RealType r = dist.successes();
-      RealType p = dist.success_fraction();
-      RealType result = 0;
-      if(false == negative_binomial_detail::check_dist_and_k(
-        function,
-        r,
-        dist.success_fraction(),
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-
-      result = (p/(r + k)) * ibeta_derivative(r, static_cast<RealType>(k+1), p, Policy());
-      // Equivalent to:
-      // return exp(lgamma(r + k) - lgamma(r) - lgamma(k+1)) * pow(p, r) * pow((1-p), k);
-      return result;
-    } // negative_binomial_pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Cumulative Distribution Function of Negative Binomial.
-      static const char* function = "boost::math::cdf(const negative_binomial_distribution<%1%>&, %1%)";
-      using boost::math::ibeta; // Regularized incomplete beta function.
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-      // Error check:
-      RealType result = 0;
-      if(false == negative_binomial_detail::check_dist_and_k(
-        function,
-        r,
-        dist.success_fraction(),
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-
-      RealType probability = ibeta(r, static_cast<RealType>(k+1), p, Policy());
-      // Ip(r, k+1) = ibeta(r, k+1, p)
-      return probability;
-    } // cdf Cumulative Distribution Function Negative Binomial.
-
-      template <class RealType, class Policy>
-      inline RealType cdf(const complemented2_type<negative_binomial_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function Negative Binomial.
-
-      static const char* function = "boost::math::cdf(const negative_binomial_distribution<%1%>&, %1%)";
-      using boost::math::ibetac; // Regularized incomplete beta function complement.
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      RealType const& k = c.param;
-      negative_binomial_distribution<RealType, Policy> const& dist = c.dist;
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-      // Error check:
-      RealType result = 0;
-      if(false == negative_binomial_detail::check_dist_and_k(
-        function,
-        r,
-        p,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Calculate cdf negative binomial using the incomplete beta function.
-      // Use of ibeta here prevents cancellation errors in calculating
-      // 1-p if p is very small, perhaps smaller than machine epsilon.
-      // Ip(k+1, r) = ibetac(r, k+1, p)
-      // constrain_probability here?
-     RealType probability = ibetac(r, static_cast<RealType>(k+1), p, Policy());
-      // Numerical errors might cause probability to be slightly outside the range < 0 or > 1.
-      // This might cause trouble downstream, so warn, possibly throw exception, but constrain to the limits.
-      return probability;
-    } // cdf Cumulative Distribution Function Negative Binomial.
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const negative_binomial_distribution<RealType, Policy>& dist, const RealType& P)
-    { // Quantile, percentile/100 or Percent Point Negative Binomial function.
-      // Return the number of expected failures k for a given probability p.
-
-      // Inverse cumulative Distribution Function or Quantile (percentile / 100) of negative_binomial Probability.
-      // MAthCAD pnbinom return smallest k such that negative_binomial(k, n, p) >= probability.
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // BUT Cephes/CodeCogs says: finds argument p (0 to 1) such that cdf(k, n, p) = y
-      static const char* function = "boost::math::quantile(const negative_binomial_distribution<%1%>&, %1%)";
-      BOOST_MATH_STD_USING // ADL of std functions.
-
-      RealType p = dist.success_fraction();
-      RealType r = dist.successes();
-      // Check dist and P.
-      RealType result = 0;
-      if(false == negative_binomial_detail::check_dist_and_prob
-        (function, r, p, P, &result, Policy()))
-      {
-        return result;
-      }
-
-      // Special cases.
-      if (P == 1)
-      {  // Would need +infinity failures for total confidence.
-        result = policies::raise_overflow_error<RealType>(
-            function,
-            "Probability argument is 1, which implies infinite failures !", Policy());
-        return result;
-       // usually means return +std::numeric_limits<RealType>::infinity();
-       // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-      }
-      if (P == 0)
-      { // No failures are expected if P = 0.
-        return 0; // Total trials will be just dist.successes.
-      }
-      if (P <= pow(dist.success_fraction(), dist.successes()))
-      { // p <= pdf(dist, 0) == cdf(dist, 0)
-        return 0;
-      }
-      if(p == 0)
-      {  // Would need +infinity failures for total confidence.
-         result = policies::raise_overflow_error<RealType>(
-            function,
-            "Success fraction is 0, which implies infinite failures !", Policy());
-         return result;
-         // usually means return +std::numeric_limits<RealType>::infinity();
-         // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-      }
-      /*
-      // Calculate quantile of negative_binomial using the inverse incomplete beta function.
-      using boost::math::ibeta_invb;
-      return ibeta_invb(r, p, P, Policy()) - 1; //
-      */
-      RealType guess = 0;
-      RealType factor = 5;
-      if(r * r * r * P * p > 0.005)
-         guess = detail::inverse_negative_binomial_cornish_fisher(r, p, RealType(1-p), P, RealType(1-P), Policy());
-
-      if(guess < 10)
-      {
-         //
-         // Cornish-Fisher Negative binomial approximation not accurate in this area:
-         //
-         guess = (std::min)(RealType(r * 2), RealType(10));
-      }
-      else
-         factor = (1-P < sqrt(tools::epsilon<RealType>())) ? 2 : (guess < 20 ? 1.2f : 1.1f);
-      BOOST_MATH_INSTRUMENT_CODE("guess = " << guess);
-      //
-      // Max iterations permitted:
-      //
-      boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-      typedef typename Policy::discrete_quantile_type discrete_type;
-      return detail::inverse_discrete_quantile(
-         dist,
-         P,
-         false,
-         guess,
-         factor,
-         RealType(1),
-         discrete_type(),
-         max_iter);
-    } // RealType quantile(const negative_binomial_distribution dist, p)
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<negative_binomial_distribution<RealType, Policy>, RealType>& c)
-    {  // Quantile or Percent Point Binomial function.
-       // Return the number of expected failures k for a given
-       // complement of the probability Q = 1 - P.
-       static const char* function = "boost::math::quantile(const negative_binomial_distribution<%1%>&, %1%)";
-       BOOST_MATH_STD_USING
-
-       // Error checks:
-       RealType Q = c.param;
-       const negative_binomial_distribution<RealType, Policy>& dist = c.dist;
-       RealType p = dist.success_fraction();
-       RealType r = dist.successes();
-       RealType result = 0;
-       if(false == negative_binomial_detail::check_dist_and_prob(
-          function,
-          r,
-          p,
-          Q,
-          &result, Policy()))
-       {
-          return result;
-       }
-
-       // Special cases:
-       //
-       if(Q == 1)
-       {  // There may actually be no answer to this question,
-          // since the probability of zero failures may be non-zero,
-          return 0; // but zero is the best we can do:
-       }
-       if(Q == 0)
-       {  // Probability 1 - Q  == 1 so infinite failures to achieve certainty.
-          // Would need +infinity failures for total confidence.
-          result = policies::raise_overflow_error<RealType>(
-             function,
-             "Probability argument complement is 0, which implies infinite failures !", Policy());
-          return result;
-          // usually means return +std::numeric_limits<RealType>::infinity();
-          // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-       }
-       if (-Q <= boost::math::powm1(dist.success_fraction(), dist.successes(), Policy()))
-       {  // q <= cdf(complement(dist, 0)) == pdf(dist, 0)
-          return 0; //
-       }
-       if(p == 0)
-       {  // Success fraction is 0 so infinite failures to achieve certainty.
-          // Would need +infinity failures for total confidence.
-          result = policies::raise_overflow_error<RealType>(
-             function,
-             "Success fraction is 0, which implies infinite failures !", Policy());
-          return result;
-          // usually means return +std::numeric_limits<RealType>::infinity();
-          // unless #define BOOST_MATH_THROW_ON_OVERFLOW_ERROR
-       }
-       //return ibetac_invb(r, p, Q, Policy()) -1;
-       RealType guess = 0;
-       RealType factor = 5;
-       if(r * r * r * (1-Q) * p > 0.005)
-          guess = detail::inverse_negative_binomial_cornish_fisher(r, p, RealType(1-p), RealType(1-Q), Q, Policy());
-
-       if(guess < 10)
-       {
-          //
-          // Cornish-Fisher Negative binomial approximation not accurate in this area:
-          //
-          guess = (std::min)(RealType(r * 2), RealType(10));
-       }
-       else
-          factor = (Q < sqrt(tools::epsilon<RealType>())) ? 2 : (guess < 20 ? 1.2f : 1.1f);
-       BOOST_MATH_INSTRUMENT_CODE("guess = " << guess);
-       //
-       // Max iterations permitted:
-       //
-       boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-       typedef typename Policy::discrete_quantile_type discrete_type;
-       return detail::inverse_discrete_quantile(
-          dist,
-          Q,
-          true,
-          guess,
-          factor,
-          RealType(1),
-          discrete_type(),
-          max_iter);
-    } // quantile complement
-
- } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#if defined (BOOST_MSVC)
-# pragma warning(pop)
-#endif
-
-#endif // BOOST_MATH_SPECIAL_NEGATIVE_BINOMIAL_HPP
--- a/any/include/boost/math/distributions/non_central_beta.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,929 +0,0 @@
-// boost\math\distributions\non_central_beta.hpp
-
-// Copyright John Maddock 2008.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_SPECIAL_NON_CENTRAL_BETA_HPP
-#define BOOST_MATH_SPECIAL_NON_CENTRAL_BETA_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for incomplete gamma. gamma_q
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/beta.hpp> // central distribution
-#include <boost/math/distributions/detail/generic_mode.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-#include <boost/math/tools/series.hpp>
-
-namespace boost
-{
-   namespace math
-   {
-
-      template <class RealType, class Policy>
-      class non_central_beta_distribution;
-
-      namespace detail{
-
-         template <class T, class Policy>
-         T non_central_beta_p(T a, T b, T lam, T x, T y, const Policy& pol, T init_val = 0)
-         {
-            BOOST_MATH_STD_USING
-               using namespace boost::math;
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T l2 = lam / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term,
-            // note that unlike other similar code, we do not set
-            // k to zero, when l2 is small, as forward iteration
-            // is unstable:
-            //
-            int k = itrunc(l2);
-            if(k == 0)
-               k = 1;
-               // Starting Poisson weight:
-            T pois = gamma_p_derivative(T(k+1), l2, pol);
-            if(pois == 0)
-               return init_val;
-            // recurance term:
-            T xterm;
-            // Starting beta term:
-            T beta = x < y
-               ? detail::ibeta_imp(T(a + k), b, x, pol, false, true, &xterm)
-               : detail::ibeta_imp(b, T(a + k), y, pol, true, true, &xterm);
-
-            xterm *= y / (a + b + k - 1);
-            T poisf(pois), betaf(beta), xtermf(xterm);
-            T sum = init_val;
-
-            if((beta == 0) && (xterm == 0))
-               return init_val;
-
-            //
-            // Backwards recursion first, this is the stable
-            // direction for recursion:
-            //
-            T last_term = 0;
-            boost::uintmax_t count = k;
-            for(int i = k; i >= 0; --i)
-            {
-               T term = beta * pois;
-               sum += term;
-               if(((fabs(term/sum) < errtol) && (last_term >= term)) || (term == 0))
-               {
-                  count = k - i;
-                  break;
-               }
-               pois *= i / l2;
-               beta += xterm;
-               xterm *= (a + i - 1) / (x * (a + b + i - 2));
-               last_term = term;
-            }
-            for(int i = k + 1; ; ++i)
-            {
-               poisf *= l2 / i;
-               xtermf *= (x * (a + b + i - 2)) / (a + i - 1);
-               betaf -= xtermf;
-
-               T term = poisf * betaf;
-               sum += term;
-               if((fabs(term/sum) < errtol) || (term == 0))
-               {
-                  break;
-               }
-               if(static_cast<boost::uintmax_t>(count + i - k) > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "cdf(non_central_beta_distribution<%1%>, %1%)",
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-            }
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_beta_q(T a, T b, T lam, T x, T y, const Policy& pol, T init_val = 0)
-         {
-            BOOST_MATH_STD_USING
-               using namespace boost::math;
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T l2 = lam / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term:
-            //
-            int k = itrunc(l2);
-            T pois;
-            if(k <= 30)
-            {
-               //
-               // Might as well start at 0 since we'll likely have this number of terms anyway:
-               //
-               if(a + b > 1)
-                  k = 0;
-               else if(k == 0)
-                  k = 1;
-            }
-            if(k == 0)
-            {
-               // Starting Poisson weight:
-               pois = exp(-l2);
-            }
-            else
-            {
-               // Starting Poisson weight:
-               pois = gamma_p_derivative(T(k+1), l2, pol);
-            }
-            if(pois == 0)
-               return init_val;
-            // recurance term:
-            T xterm;
-            // Starting beta term:
-            T beta = x < y
-               ? detail::ibeta_imp(T(a + k), b, x, pol, true, true, &xterm)
-               : detail::ibeta_imp(b, T(a + k), y, pol, false, true, &xterm);
-
-            xterm *= y / (a + b + k - 1);
-            T poisf(pois), betaf(beta), xtermf(xterm);
-            T sum = init_val;
-            if((beta == 0) && (xterm == 0))
-               return init_val;
-            //
-            // Forwards recursion first, this is the stable
-            // direction for recursion, and the location
-            // of the bulk of the sum:
-            //
-            T last_term = 0;
-            boost::uintmax_t count = 0;
-            for(int i = k + 1; ; ++i)
-            {
-               poisf *= l2 / i;
-               xtermf *= (x * (a + b + i - 2)) / (a + i - 1);
-               betaf += xtermf;
-
-               T term = poisf * betaf;
-               sum += term;
-               if((fabs(term/sum) < errtol) && (last_term >= term))
-               {
-                  count = i - k;
-                  break;
-               }
-               if(static_cast<boost::uintmax_t>(i - k) > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "cdf(non_central_beta_distribution<%1%>, %1%)",
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-               last_term = term;
-            }
-            for(int i = k; i >= 0; --i)
-            {
-               T term = beta * pois;
-               sum += term;
-               if(fabs(term/sum) < errtol)
-               {
-                  break;
-               }
-               if(static_cast<boost::uintmax_t>(count + k - i) > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "cdf(non_central_beta_distribution<%1%>, %1%)",
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-               pois *= i / l2;
-               beta -= xterm;
-               xterm *= (a + i - 1) / (x * (a + b + i - 2));
-            }
-            return sum;
-         }
-
-         template <class RealType, class Policy>
-         inline RealType non_central_beta_cdf(RealType x, RealType y, RealType a, RealType b, RealType l, bool invert, const Policy&)
-         {
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            BOOST_MATH_STD_USING
-
-            if(x == 0)
-               return invert ? 1.0f : 0.0f;
-            if(y == 0)
-               return invert ? 0.0f : 1.0f;
-            value_type result;
-            value_type c = a + b + l / 2;
-            value_type cross = 1 - (b / c) * (1 + l / (2 * c * c));
-            if(l == 0)
-               result = cdf(boost::math::beta_distribution<RealType, Policy>(a, b), x);
-            else if(x > cross)
-            {
-               // Complement is the smaller of the two:
-               result = detail::non_central_beta_q(
-                  static_cast<value_type>(a),
-                  static_cast<value_type>(b),
-                  static_cast<value_type>(l),
-                  static_cast<value_type>(x),
-                  static_cast<value_type>(y),
-                  forwarding_policy(),
-                  static_cast<value_type>(invert ? 0 : -1));
-               invert = !invert;
-            }
-            else
-            {
-               result = detail::non_central_beta_p(
-                  static_cast<value_type>(a),
-                  static_cast<value_type>(b),
-                  static_cast<value_type>(l),
-                  static_cast<value_type>(x),
-                  static_cast<value_type>(y),
-                  forwarding_policy(),
-                  static_cast<value_type>(invert ? -1 : 0));
-            }
-            if(invert)
-               result = -result;
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               "boost::math::non_central_beta_cdf<%1%>(%1%, %1%, %1%)");
-         }
-
-         template <class T, class Policy>
-         struct nc_beta_quantile_functor
-         {
-            nc_beta_quantile_functor(const non_central_beta_distribution<T,Policy>& d, T t, bool c)
-               : dist(d), target(t), comp(c) {}
-
-            T operator()(const T& x)
-            {
-               return comp ?
-                  T(target - cdf(complement(dist, x)))
-                  : T(cdf(dist, x) - target);
-            }
-
-         private:
-            non_central_beta_distribution<T,Policy> dist;
-            T target;
-            bool comp;
-         };
-
-         //
-         // This is more or less a copy of bracket_and_solve_root, but
-         // modified to search only the interval [0,1] using similar
-         // heuristics.
-         //
-         template <class F, class T, class Tol, class Policy>
-         std::pair<T, T> bracket_and_solve_root_01(F f, const T& guess, T factor, bool rising, Tol tol, boost::uintmax_t& max_iter, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-               static const char* function = "boost::math::tools::bracket_and_solve_root_01<%1%>";
-            //
-            // Set up inital brackets:
-            //
-            T a = guess;
-            T b = a;
-            T fa = f(a);
-            T fb = fa;
-            //
-            // Set up invocation count:
-            //
-            boost::uintmax_t count = max_iter - 1;
-
-            if((fa < 0) == (guess < 0 ? !rising : rising))
-            {
-               //
-               // Zero is to the right of b, so walk upwards
-               // until we find it:
-               //
-               while((boost::math::sign)(fb) == (boost::math::sign)(fa))
-               {
-                  if(count == 0)
-                  {
-                     b = policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", b, pol);
-                     return std::make_pair(a, b);
-                  }
-                  //
-                  // Heuristic: every 20 iterations we double the growth factor in case the
-                  // initial guess was *really* bad !
-                  //
-                  if((max_iter - count) % 20 == 0)
-                     factor *= 2;
-                  //
-                  // Now go ahead and move are guess by "factor",
-                  // we do this by reducing 1-guess by factor:
-                  //
-                  a = b;
-                  fa = fb;
-                  b = 1 - ((1 - b) / factor);
-                  fb = f(b);
-                  --count;
-                  BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
-               }
-            }
-            else
-            {
-               //
-               // Zero is to the left of a, so walk downwards
-               // until we find it:
-               //
-               while((boost::math::sign)(fb) == (boost::math::sign)(fa))
-               {
-                  if(fabs(a) < tools::min_value<T>())
-                  {
-                     // Escape route just in case the answer is zero!
-                     max_iter -= count;
-                     max_iter += 1;
-                     return a > 0 ? std::make_pair(T(0), T(a)) : std::make_pair(T(a), T(0));
-                  }
-                  if(count == 0)
-                  {
-                     a = policies::raise_evaluation_error(function, "Unable to bracket root, last nearest value was %1%", a, pol);
-                     return std::make_pair(a, b);
-                  }
-                  //
-                  // Heuristic: every 20 iterations we double the growth factor in case the
-                  // initial guess was *really* bad !
-                  //
-                  if((max_iter - count) % 20 == 0)
-                     factor *= 2;
-                  //
-                  // Now go ahead and move are guess by "factor":
-                  //
-                  b = a;
-                  fb = fa;
-                  a /= factor;
-                  fa = f(a);
-                  --count;
-                  BOOST_MATH_INSTRUMENT_CODE("a = " << a << " b = " << b << " fa = " << fa << " fb = " << fb << " count = " << count);
-               }
-            }
-            max_iter -= count;
-            max_iter += 1;
-            std::pair<T, T> r = toms748_solve(
-               f,
-               (a < 0 ? b : a),
-               (a < 0 ? a : b),
-               (a < 0 ? fb : fa),
-               (a < 0 ? fa : fb),
-               tol,
-               count,
-               pol);
-            max_iter += count;
-            BOOST_MATH_INSTRUMENT_CODE("max_iter = " << max_iter << " count = " << count);
-            return r;
-         }
-
-         template <class RealType, class Policy>
-         RealType nc_beta_quantile(const non_central_beta_distribution<RealType, Policy>& dist, const RealType& p, bool comp)
-         {
-            static const char* function = "quantile(non_central_beta_distribution<%1%>, %1%)";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            value_type a = dist.alpha();
-            value_type b = dist.beta();
-            value_type l = dist.non_centrality();
-            value_type r;
-            if(!beta_detail::check_alpha(
-               function,
-               a, &r, Policy())
-               ||
-            !beta_detail::check_beta(
-               function,
-               b, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !detail::check_probability(
-               function,
-               static_cast<value_type>(p),
-               &r,
-               Policy()))
-                  return (RealType)r;
-            //
-            // Special cases first:
-            //
-            if(p == 0)
-               return comp
-               ? 1.0f
-               : 0.0f;
-            if(p == 1)
-               return !comp
-               ? 1.0f
-               : 0.0f;
-
-            value_type c = a + b + l / 2;
-            value_type mean = 1 - (b / c) * (1 + l / (2 * c * c));
-            /*
-            //
-            // Calculate a normal approximation to the quantile,
-            // uses mean and variance approximations from:
-            // Algorithm AS 310:
-            // Computing the Non-Central Beta Distribution Function
-            // R. Chattamvelli; R. Shanmugam
-            // Applied Statistics, Vol. 46, No. 1. (1997), pp. 146-156.
-            //
-            // Unfortunately, when this is wrong it tends to be *very*
-            // wrong, so it's disabled for now, even though it often
-            // gets the initial guess quite close.  Probably we could
-            // do much better by factoring in the skewness if only
-            // we could calculate it....
-            //
-            value_type delta = l / 2;
-            value_type delta2 = delta * delta;
-            value_type delta3 = delta * delta2;
-            value_type delta4 = delta2 * delta2;
-            value_type G = c * (c + 1) + delta;
-            value_type alpha = a + b;
-            value_type alpha2 = alpha * alpha;
-            value_type eta = (2 * alpha + 1) * (2 * alpha + 1) + 1;
-            value_type H = 3 * alpha2 + 5 * alpha + 2;
-            value_type F = alpha2 * (alpha + 1) + H * delta
-               + (2 * alpha + 4) * delta2 + delta3;
-            value_type P = (3 * alpha + 1) * (9 * alpha + 17)
-               + 2 * alpha * (3 * alpha + 2) * (3 * alpha + 4) + 15;
-            value_type Q = 54 * alpha2 + 162 * alpha + 130;
-            value_type R = 6 * (6 * alpha + 11);
-            value_type D = delta
-               * (H * H + 2 * P * delta + Q * delta2 + R * delta3 + 9 * delta4);
-            value_type variance = (b / G)
-               * (1 + delta * (l * l + 3 * l + eta) / (G * G))
-               - (b * b / F) * (1 + D / (F * F));
-            value_type sd = sqrt(variance);
-
-            value_type guess = comp
-               ? quantile(complement(normal_distribution<RealType, Policy>(static_cast<RealType>(mean), static_cast<RealType>(sd)), p))
-               : quantile(normal_distribution<RealType, Policy>(static_cast<RealType>(mean), static_cast<RealType>(sd)), p);
-
-            if(guess >= 1)
-               guess = mean;
-            if(guess <= tools::min_value<value_type>())
-               guess = mean;
-            */
-            value_type guess = mean;
-            detail::nc_beta_quantile_functor<value_type, Policy>
-               f(non_central_beta_distribution<value_type, Policy>(a, b, l), p, comp);
-            tools::eps_tolerance<value_type> tol(policies::digits<RealType, Policy>());
-            boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-
-            std::pair<value_type, value_type> ir
-               = bracket_and_solve_root_01(
-                  f, guess, value_type(2.5), true, tol,
-                  max_iter, Policy());
-            value_type result = ir.first + (ir.second - ir.first) / 2;
-
-            if(max_iter >= policies::get_max_root_iterations<Policy>())
-            {
-               return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-                  " either there is no answer to quantile of the non central beta distribution"
-                  " or the answer is infinite.  Current best guess is %1%",
-                  policies::checked_narrowing_cast<RealType, forwarding_policy>(
-                     result,
-                     function), Policy());
-            }
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-
-         template <class T, class Policy>
-         T non_central_beta_pdf(T a, T b, T lam, T x, T y, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            //
-            // Special cases:
-            //
-            if((x == 0) || (y == 0))
-               return 0;
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T l2 = lam / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term:
-            //
-            int k = itrunc(l2);
-            // Starting Poisson weight:
-            T pois = gamma_p_derivative(T(k+1), l2, pol);
-            // Starting beta term:
-            T beta = x < y ?
-               ibeta_derivative(a + k, b, x, pol)
-               : ibeta_derivative(b, a + k, y, pol);
-            T sum = 0;
-            T poisf(pois);
-            T betaf(beta);
-
-            //
-            // Stable backwards recursion first:
-            //
-            boost::uintmax_t count = k;
-            for(int i = k; i >= 0; --i)
-            {
-               T term = beta * pois;
-               sum += term;
-               if((fabs(term/sum) < errtol) || (term == 0))
-               {
-                  count = k - i;
-                  break;
-               }
-               pois *= i / l2;
-               beta *= (a + i - 1) / (x * (a + i + b - 1));
-            }
-            for(int i = k + 1; ; ++i)
-            {
-               poisf *= l2 / i;
-               betaf *= x * (a + b + i - 1) / (a + i - 1);
-
-               T term = poisf * betaf;
-               sum += term;
-               if((fabs(term/sum) < errtol) || (term == 0))
-               {
-                  break;
-               }
-               if(static_cast<boost::uintmax_t>(count + i - k) > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "pdf(non_central_beta_distribution<%1%>, %1%)",
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-            }
-            return sum;
-         }
-
-         template <class RealType, class Policy>
-         RealType nc_beta_pdf(const non_central_beta_distribution<RealType, Policy>& dist, const RealType& x)
-         {
-            BOOST_MATH_STD_USING
-            static const char* function = "pdf(non_central_beta_distribution<%1%>, %1%)";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            value_type a = dist.alpha();
-            value_type b = dist.beta();
-            value_type l = dist.non_centrality();
-            value_type r;
-            if(!beta_detail::check_alpha(
-               function,
-               a, &r, Policy())
-               ||
-            !beta_detail::check_beta(
-               function,
-               b, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !beta_detail::check_x(
-               function,
-               static_cast<value_type>(x),
-               &r,
-               Policy()))
-                  return (RealType)r;
-
-            if(l == 0)
-               return pdf(boost::math::beta_distribution<RealType, Policy>(dist.alpha(), dist.beta()), x);
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               non_central_beta_pdf(a, b, l, static_cast<value_type>(x), value_type(1 - static_cast<value_type>(x)), forwarding_policy()),
-               "function");
-         }
-
-         template <class T>
-         struct hypergeometric_2F2_sum
-         {
-            typedef T result_type;
-            hypergeometric_2F2_sum(T a1_, T a2_, T b1_, T b2_, T z_) : a1(a1_), a2(a2_), b1(b1_), b2(b2_), z(z_), term(1), k(0) {}
-            T operator()()
-            {
-               T result = term;
-               term *= a1 * a2 / (b1 * b2);
-               a1 += 1;
-               a2 += 1;
-               b1 += 1;
-               b2 += 1;
-               k += 1;
-               term /= k;
-               term *= z;
-               return result;
-            }
-            T a1, a2, b1, b2, z, term, k;
-         };
-
-         template <class T, class Policy>
-         T hypergeometric_2F2(T a1, T a2, T b1, T b2, T z, const Policy& pol)
-         {
-            typedef typename policies::evaluation<T, Policy>::type value_type;
-
-            const char* function = "boost::math::detail::hypergeometric_2F2<%1%>(%1%,%1%,%1%,%1%,%1%)";
-
-            hypergeometric_2F2_sum<value_type> s(a1, a2, b1, b2, z);
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
-            value_type zero = 0;
-            value_type result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<value_type, Policy>(), max_iter, zero);
-#else
-            value_type result = boost::math::tools::sum_series(s, boost::math::policies::get_epsilon<value_type, Policy>(), max_iter);
-#endif
-            policies::check_series_iterations<T>(function, max_iter, pol);
-            return policies::checked_narrowing_cast<T, Policy>(result, function);
-         }
-
-      } // namespace detail
-
-      template <class RealType = double, class Policy = policies::policy<> >
-      class non_central_beta_distribution
-      {
-      public:
-         typedef RealType value_type;
-         typedef Policy policy_type;
-
-         non_central_beta_distribution(RealType a_, RealType b_, RealType lambda) : a(a_), b(b_), ncp(lambda)
-         {
-            const char* function = "boost::math::non_central_beta_distribution<%1%>::non_central_beta_distribution(%1%,%1%)";
-            RealType r;
-            beta_detail::check_alpha(
-               function,
-               a, &r, Policy());
-            beta_detail::check_beta(
-               function,
-               b, &r, Policy());
-            detail::check_non_centrality(
-               function,
-               lambda,
-               &r,
-               Policy());
-         } // non_central_beta_distribution constructor.
-
-         RealType alpha() const
-         { // Private data getter function.
-            return a;
-         }
-         RealType beta() const
-         { // Private data getter function.
-            return b;
-         }
-         RealType non_centrality() const
-         { // Private data getter function.
-            return ncp;
-         }
-      private:
-         // Data member, initialized by constructor.
-         RealType a;   // alpha.
-         RealType b;   // beta.
-         RealType ncp; // non-centrality parameter
-      }; // template <class RealType, class Policy> class non_central_beta_distribution
-
-      typedef non_central_beta_distribution<double> non_central_beta; // Reserved name of type double.
-
-      // Non-member functions to give properties of the distribution.
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> range(const non_central_beta_distribution<RealType, Policy>& /* dist */)
-      { // Range of permissible values for random variable k.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-      }
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> support(const non_central_beta_distribution<RealType, Policy>& /* dist */)
-      { // Range of supported values for random variable k.
-         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0), static_cast<RealType>(1));
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mode(const non_central_beta_distribution<RealType, Policy>& dist)
-      { // mode.
-         static const char* function = "mode(non_central_beta_distribution<%1%> const&)";
-
-         RealType a = dist.alpha();
-         RealType b = dist.beta();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!beta_detail::check_alpha(
-               function,
-               a, &r, Policy())
-               ||
-            !beta_detail::check_beta(
-               function,
-               b, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-                  return (RealType)r;
-         RealType c = a + b + l / 2;
-         RealType mean = 1 - (b / c) * (1 + l / (2 * c * c));
-         return detail::generic_find_mode_01(
-            dist,
-            mean,
-            function);
-      }
-
-      //
-      // We don't have the necessary information to implement
-      // these at present.  These are just disabled for now,
-      // prototypes retained so we can fill in the blanks
-      // later:
-      //
-      template <class RealType, class Policy>
-      inline RealType mean(const non_central_beta_distribution<RealType, Policy>& dist)
-      {
-         BOOST_MATH_STD_USING
-         RealType a = dist.alpha();
-         RealType b = dist.beta();
-         RealType d = dist.non_centrality();
-         RealType apb = a + b;
-         return exp(-d / 2) * a * detail::hypergeometric_2F2<RealType, Policy>(1 + a, apb, a, 1 + apb, d / 2, Policy()) / apb;
-      } // mean
-
-      template <class RealType, class Policy>
-      inline RealType variance(const non_central_beta_distribution<RealType, Policy>& dist)
-      { 
-         //
-         // Relative error of this function may be arbitarily large... absolute
-         // error will be small however... that's the best we can do for now.
-         //
-         BOOST_MATH_STD_USING
-         RealType a = dist.alpha();
-         RealType b = dist.beta();
-         RealType d = dist.non_centrality();
-         RealType apb = a + b;
-         RealType result = detail::hypergeometric_2F2(RealType(1 + a), apb, a, RealType(1 + apb), RealType(d / 2), Policy());
-         result *= result * -exp(-d) * a * a / (apb * apb);
-         result += exp(-d / 2) * a * (1 + a) * detail::hypergeometric_2F2(RealType(2 + a), apb, a, RealType(2 + apb), RealType(d / 2), Policy()) / (apb * (1 + apb));
-         return result;
-      }
-
-      // RealType standard_deviation(const non_central_beta_distribution<RealType, Policy>& dist)
-      // standard_deviation provided by derived accessors.
-      template <class RealType, class Policy>
-      inline RealType skewness(const non_central_beta_distribution<RealType, Policy>& /*dist*/)
-      { // skewness = sqrt(l).
-         const char* function = "boost::math::non_central_beta_distribution<%1%>::skewness()";
-         typedef typename Policy::assert_undefined_type assert_type;
-         BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-         return policies::raise_evaluation_error<RealType>(
-            function,
-            "This function is not yet implemented, the only sensible result is %1%.",
-            std::numeric_limits<RealType>::quiet_NaN(), Policy()); // infinity?
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis_excess(const non_central_beta_distribution<RealType, Policy>& /*dist*/)
-      {
-         const char* function = "boost::math::non_central_beta_distribution<%1%>::kurtosis_excess()";
-         typedef typename Policy::assert_undefined_type assert_type;
-         BOOST_STATIC_ASSERT(assert_type::value == 0);
-
-         return policies::raise_evaluation_error<RealType>(
-            function,
-            "This function is not yet implemented, the only sensible result is %1%.",
-            std::numeric_limits<RealType>::quiet_NaN(), Policy()); // infinity?
-      } // kurtosis_excess
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis(const non_central_beta_distribution<RealType, Policy>& dist)
-      {
-         return kurtosis_excess(dist) + 3;
-      }
-
-      template <class RealType, class Policy>
-      inline RealType pdf(const non_central_beta_distribution<RealType, Policy>& dist, const RealType& x)
-      { // Probability Density/Mass Function.
-         return detail::nc_beta_pdf(dist, x);
-      } // pdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const non_central_beta_distribution<RealType, Policy>& dist, const RealType& x)
-      {
-         const char* function = "boost::math::non_central_beta_distribution<%1%>::cdf(%1%)";
-            RealType a = dist.alpha();
-            RealType b = dist.beta();
-            RealType l = dist.non_centrality();
-            RealType r;
-            if(!beta_detail::check_alpha(
-               function,
-               a, &r, Policy())
-               ||
-            !beta_detail::check_beta(
-               function,
-               b, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !beta_detail::check_x(
-               function,
-               x,
-               &r,
-               Policy()))
-                  return (RealType)r;
-
-         if(l == 0)
-            return cdf(beta_distribution<RealType, Policy>(a, b), x);
-
-         return detail::non_central_beta_cdf(x, RealType(1 - x), a, b, l, false, Policy());
-      } // cdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const complemented2_type<non_central_beta_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function
-         const char* function = "boost::math::non_central_beta_distribution<%1%>::cdf(%1%)";
-         non_central_beta_distribution<RealType, Policy> const& dist = c.dist;
-            RealType a = dist.alpha();
-            RealType b = dist.beta();
-            RealType l = dist.non_centrality();
-            RealType x = c.param;
-            RealType r;
-            if(!beta_detail::check_alpha(
-               function,
-               a, &r, Policy())
-               ||
-            !beta_detail::check_beta(
-               function,
-               b, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !beta_detail::check_x(
-               function,
-               x,
-               &r,
-               Policy()))
-                  return (RealType)r;
-
-         if(l == 0)
-            return cdf(complement(beta_distribution<RealType, Policy>(a, b), x));
-
-         return detail::non_central_beta_cdf(x, RealType(1 - x), a, b, l, true, Policy());
-      } // ccdf
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const non_central_beta_distribution<RealType, Policy>& dist, const RealType& p)
-      { // Quantile (or Percent Point) function.
-         return detail::nc_beta_quantile(dist, p, false);
-      } // quantile
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const complemented2_type<non_central_beta_distribution<RealType, Policy>, RealType>& c)
-      { // Quantile (or Percent Point) function.
-         return detail::nc_beta_quantile(c.dist, c.param, true);
-      } // quantile complement.
-
-   } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_NON_CENTRAL_BETA_HPP
-
--- a/any/include/boost/math/distributions/non_central_chi_squared.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,999 +0,0 @@
-// boost\math\distributions\non_central_chi_squared.hpp
-
-// Copyright John Maddock 2008.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_SPECIAL_NON_CENTRAL_CHI_SQUARE_HPP
-#define BOOST_MATH_SPECIAL_NON_CENTRAL_CHI_SQUARE_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp> // for incomplete gamma. gamma_q
-#include <boost/math/special_functions/bessel.hpp> // for cyl_bessel_i
-#include <boost/math/special_functions/round.hpp> // for iround
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/chi_squared.hpp> // central distribution
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/tools/roots.hpp> // for root finding.
-#include <boost/math/distributions/detail/generic_mode.hpp>
-#include <boost/math/distributions/detail/generic_quantile.hpp>
-
-namespace boost
-{
-   namespace math
-   {
-
-      template <class RealType, class Policy>
-      class non_central_chi_squared_distribution;
-
-      namespace detail{
-
-         template <class T, class Policy>
-         T non_central_chi_square_q(T x, T f, T theta, const Policy& pol, T init_sum = 0)
-         {
-            //
-            // Computes the complement of the Non-Central Chi-Square
-            // Distribution CDF by summing a weighted sum of complements
-            // of the central-distributions.  The weighting factor is
-            // a Poisson Distribution.
-            //
-            // This is an application of the technique described in:
-            //
-            // Computing discrete mixtures of continuous
-            // distributions: noncentral chisquare, noncentral t
-            // and the distribution of the square of the sample
-            // multiple correlation coeficient.
-            // D. Benton, K. Krishnamoorthy.
-            // Computational Statistics & Data Analysis 43 (2003) 249 - 267
-            //
-            BOOST_MATH_STD_USING
-
-            // Special case:
-            if(x == 0)
-               return 1;
-
-            //
-            // Initialize the variables we'll be using:
-            //
-            T lambda = theta / 2;
-            T del = f / 2;
-            T y = x / 2;
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T sum = init_sum;
-            //
-            // k is the starting location for iteration, we'll
-            // move both forwards and backwards from this point.
-            // k is chosen as the peek of the Poisson weights, which
-            // will occur *before* the largest term.
-            //
-            int k = iround(lambda, pol);
-            // Forwards and backwards Poisson weights:
-            T poisf = boost::math::gamma_p_derivative(static_cast<T>(1 + k), lambda, pol);
-            T poisb = poisf * k / lambda;
-            // Initial forwards central chi squared term:
-            T gamf = boost::math::gamma_q(del + k, y, pol);
-            // Forwards and backwards recursion terms on the central chi squared:
-            T xtermf = boost::math::gamma_p_derivative(del + 1 + k, y, pol);
-            T xtermb = xtermf * (del + k) / y;
-            // Initial backwards central chi squared term:
-            T gamb = gamf - xtermb;
-
-            //
-            // Forwards iteration first, this is the
-            // stable direction for the gamma function
-            // recurrences:
-            //
-            int i;
-            for(i = k; static_cast<boost::uintmax_t>(i-k) < max_iter; ++i)
-            {
-               T term = poisf * gamf;
-               sum += term;
-               poisf *= lambda / (i + 1);
-               gamf += xtermf;
-               xtermf *= y / (del + i + 1);
-               if(((sum == 0) || (fabs(term / sum) < errtol)) && (term >= poisf * gamf))
-                  break;
-            }
-            //Error check:
-            if(static_cast<boost::uintmax_t>(i-k) >= max_iter)
-               return policies::raise_evaluation_error(
-                  "cdf(non_central_chi_squared_distribution<%1%>, %1%)",
-                  "Series did not converge, closest value was %1%", sum, pol);
-            //
-            // Now backwards iteration: the gamma
-            // function recurrences are unstable in this
-            // direction, we rely on the terms deminishing in size
-            // faster than we introduce cancellation errors.
-            // For this reason it's very important that we start
-            // *before* the largest term so that backwards iteration
-            // is strictly converging.
-            //
-            for(i = k - 1; i >= 0; --i)
-            {
-               T term = poisb * gamb;
-               sum += term;
-               poisb *= i / lambda;
-               xtermb *= (del + i) / y;
-               gamb -= xtermb;
-               if((sum == 0) || (fabs(term / sum) < errtol))
-                  break;
-            }
-
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_chi_square_p_ding(T x, T f, T theta, const Policy& pol, T init_sum = 0)
-         {
-            //
-            // This is an implementation of:
-            //
-            // Algorithm AS 275:
-            // Computing the Non-Central #2 Distribution Function
-            // Cherng G. Ding
-            // Applied Statistics, Vol. 41, No. 2. (1992), pp. 478-482.
-            //
-            // This uses a stable forward iteration to sum the
-            // CDF, unfortunately this can not be used for large
-            // values of the non-centrality parameter because:
-            // * The first term may underfow to zero.
-            // * We may need an extra-ordinary number of terms
-            //   before we reach the first *significant* term.
-            //
-            BOOST_MATH_STD_USING
-            // Special case:
-            if(x == 0)
-               return 0;
-            T tk = boost::math::gamma_p_derivative(f/2 + 1, x/2, pol);
-            T lambda = theta / 2;
-            T vk = exp(-lambda);
-            T uk = vk;
-            T sum = init_sum + tk * vk;
-            if(sum == 0)
-               return sum;
-
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-
-            int i;
-            T lterm(0), term(0);
-            for(i = 1; static_cast<boost::uintmax_t>(i) < max_iter; ++i)
-            {
-               tk = tk * x / (f + 2 * i);
-               uk = uk * lambda / i;
-               vk = vk + uk;
-               lterm = term;
-               term = vk * tk;
-               sum += term;
-               if((fabs(term / sum) < errtol) && (term <= lterm))
-                  break;
-            }
-            //Error check:
-            if(static_cast<boost::uintmax_t>(i) >= max_iter)
-               return policies::raise_evaluation_error(
-                  "cdf(non_central_chi_squared_distribution<%1%>, %1%)",
-                  "Series did not converge, closest value was %1%", sum, pol);
-            return sum;
-         }
-
-
-         template <class T, class Policy>
-         T non_central_chi_square_p(T y, T n, T lambda, const Policy& pol, T init_sum)
-         {
-            //
-            // This is taken more or less directly from:
-            //
-            // Computing discrete mixtures of continuous
-            // distributions: noncentral chisquare, noncentral t
-            // and the distribution of the square of the sample
-            // multiple correlation coeficient.
-            // D. Benton, K. Krishnamoorthy.
-            // Computational Statistics & Data Analysis 43 (2003) 249 - 267
-            //
-            // We're summing a Poisson weighting term multiplied by
-            // a central chi squared distribution.
-            //
-            BOOST_MATH_STD_USING
-            // Special case:
-            if(y == 0)
-               return 0;
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T errorf(0), errorb(0);
-
-            T x = y / 2;
-            T del = lambda / 2;
-            //
-            // Starting location for the iteration, we'll iterate
-            // both forwards and backwards from this point.  The
-            // location chosen is the maximum of the Poisson weight
-            // function, which ocurrs *after* the largest term in the
-            // sum.
-            //
-            int k = iround(del, pol);
-            T a = n / 2 + k;
-            // Central chi squared term for forward iteration:
-            T gamkf = boost::math::gamma_p(a, x, pol);
-
-            if(lambda == 0)
-               return gamkf;
-            // Central chi squared term for backward iteration:
-            T gamkb = gamkf;
-            // Forwards Poisson weight:
-            T poiskf = gamma_p_derivative(static_cast<T>(k+1), del, pol);
-            // Backwards Poisson weight:
-            T poiskb = poiskf;
-            // Forwards gamma function recursion term:
-            T xtermf = boost::math::gamma_p_derivative(a, x, pol);
-            // Backwards gamma function recursion term:
-            T xtermb = xtermf * x / a;
-            T sum = init_sum + poiskf * gamkf;
-            if(sum == 0)
-               return sum;
-            int i = 1;
-            //
-            // Backwards recursion first, this is the stable
-            // direction for gamma function recurrences:
-            //
-            while(i <= k)
-            {
-               xtermb *= (a - i + 1) / x;
-               gamkb += xtermb;
-               poiskb = poiskb * (k - i + 1) / del;
-               errorf = errorb;
-               errorb = gamkb * poiskb;
-               sum += errorb;
-               if((fabs(errorb / sum) < errtol) && (errorb <= errorf))
-                  break;
-               ++i;
-            }
-            i = 1;
-            //
-            // Now forwards recursion, the gamma function
-            // recurrence relation is unstable in this direction,
-            // so we rely on the magnitude of successive terms
-            // decreasing faster than we introduce cancellation error.
-            // For this reason it's vital that k is chosen to be *after*
-            // the largest term, so that successive forward iterations
-            // are strictly (and rapidly) converging.
-            //
-            do
-            {
-               xtermf = xtermf * x / (a + i - 1);
-               gamkf = gamkf - xtermf;
-               poiskf = poiskf * del / (k + i);
-               errorf = poiskf * gamkf;
-               sum += errorf;
-               ++i;
-            }while((fabs(errorf / sum) > errtol) && (static_cast<boost::uintmax_t>(i) < max_iter));
-
-            //Error check:
-            if(static_cast<boost::uintmax_t>(i) >= max_iter)
-               return policies::raise_evaluation_error(
-                  "cdf(non_central_chi_squared_distribution<%1%>, %1%)",
-                  "Series did not converge, closest value was %1%", sum, pol);
-
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_chi_square_pdf(T x, T n, T lambda, const Policy& pol)
-         {
-            //
-            // As above but for the PDF:
-            //
-            BOOST_MATH_STD_USING
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T x2 = x / 2;
-            T n2 = n / 2;
-            T l2 = lambda / 2;
-            T sum = 0;
-            int k = itrunc(l2);
-            T pois = gamma_p_derivative(static_cast<T>(k + 1), l2, pol) * gamma_p_derivative(static_cast<T>(n2 + k), x2);
-            if(pois == 0)
-               return 0;
-            T poisb = pois;
-            for(int i = k; ; ++i)
-            {
-               sum += pois;
-               if(pois / sum < errtol)
-                  break;
-               if(static_cast<boost::uintmax_t>(i - k) >= max_iter)
-                  return policies::raise_evaluation_error(
-                     "pdf(non_central_chi_squared_distribution<%1%>, %1%)",
-                     "Series did not converge, closest value was %1%", sum, pol);
-               pois *= l2 * x2 / ((i + 1) * (n2 + i));
-            }
-            for(int i = k - 1; i >= 0; --i)
-            {
-               poisb *= (i + 1) * (n2 + i) / (l2 * x2);
-               sum += poisb;
-               if(poisb / sum < errtol)
-                  break;
-            }
-            return sum / 2;
-         }
-
-         template <class RealType, class Policy>
-         inline RealType non_central_chi_squared_cdf(RealType x, RealType k, RealType l, bool invert, const Policy&)
-         {
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            BOOST_MATH_STD_USING
-            value_type result;
-            if(l == 0)
-              return invert == false ? cdf(boost::math::chi_squared_distribution<RealType, Policy>(k), x) : cdf(complement(boost::math::chi_squared_distribution<RealType, Policy>(k), x));
-            else if(x > k + l)
-            {
-               // Complement is the smaller of the two:
-               result = detail::non_central_chi_square_q(
-                  static_cast<value_type>(x),
-                  static_cast<value_type>(k),
-                  static_cast<value_type>(l),
-                  forwarding_policy(),
-                  static_cast<value_type>(invert ? 0 : -1));
-               invert = !invert;
-            }
-            else if(l < 200)
-            {
-               // For small values of the non-centrality parameter
-               // we can use Ding's method:
-               result = detail::non_central_chi_square_p_ding(
-                  static_cast<value_type>(x),
-                  static_cast<value_type>(k),
-                  static_cast<value_type>(l),
-                  forwarding_policy(),
-                  static_cast<value_type>(invert ? -1 : 0));
-            }
-            else
-            {
-               // For largers values of the non-centrality
-               // parameter Ding's method will consume an
-               // extra-ordinary number of terms, and worse
-               // may return zero when the result is in fact
-               // finite, use Krishnamoorthy's method instead:
-               result = detail::non_central_chi_square_p(
-                  static_cast<value_type>(x),
-                  static_cast<value_type>(k),
-                  static_cast<value_type>(l),
-                  forwarding_policy(),
-                  static_cast<value_type>(invert ? -1 : 0));
-            }
-            if(invert)
-               result = -result;
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               "boost::math::non_central_chi_squared_cdf<%1%>(%1%, %1%, %1%)");
-         }
-
-         template <class T, class Policy>
-         struct nccs_quantile_functor
-         {
-            nccs_quantile_functor(const non_central_chi_squared_distribution<T,Policy>& d, T t, bool c)
-               : dist(d), target(t), comp(c) {}
-
-            T operator()(const T& x)
-            {
-               return comp ?
-                  target - cdf(complement(dist, x))
-                  : cdf(dist, x) - target;
-            }
-
-         private:
-            non_central_chi_squared_distribution<T,Policy> dist;
-            T target;
-            bool comp;
-         };
-
-         template <class RealType, class Policy>
-         RealType nccs_quantile(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& p, bool comp)
-         {
-            BOOST_MATH_STD_USING
-            static const char* function = "quantile(non_central_chi_squared_distribution<%1%>, %1%)";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            value_type k = dist.degrees_of_freedom();
-            value_type l = dist.non_centrality();
-            value_type r;
-            if(!detail::check_df(
-               function,
-               k, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !detail::check_probability(
-               function,
-               static_cast<value_type>(p),
-               &r,
-               Policy()))
-                  return (RealType)r;
-            //
-            // Special cases get short-circuited first:
-            //
-            if(p == 0)
-               return comp ? policies::raise_overflow_error<RealType>(function, 0, Policy()) : 0;
-            if(p == 1)
-               return comp ? 0 : policies::raise_overflow_error<RealType>(function, 0, Policy());
-            //
-            // This is Pearson's approximation to the quantile, see
-            // Pearson, E. S. (1959) "Note on an approximation to the distribution of
-            // noncentral chi squared", Biometrika 46: 364.
-            // See also:
-            // "A comparison of approximations to percentiles of the noncentral chi2-distribution",
-            // Hardeo Sahai and Mario Miguel Ojeda, Revista de Matematica: Teoria y Aplicaciones 2003 10(1-2) : 57-76.
-            // Note that the latter reference refers to an approximation of the CDF, when they really mean the quantile.
-            //
-            value_type b = -(l * l) / (k + 3 * l);
-            value_type c = (k + 3 * l) / (k + 2 * l);
-            value_type ff = (k + 2 * l) / (c * c);
-            value_type guess;
-            if(comp)
-            {
-               guess = b + c * quantile(complement(chi_squared_distribution<value_type, forwarding_policy>(ff), p));
-            }
-            else
-            {
-               guess = b + c * quantile(chi_squared_distribution<value_type, forwarding_policy>(ff), p);
-            }
-            //
-            // Sometimes guess goes very small or negative, in that case we have
-            // to do something else for the initial guess, this approximation
-            // was provided in a private communication from Thomas Luu, PhD candidate,
-            // University College London.  It's an asymptotic expansion for the
-            // quantile which usually gets us within an order of magnitude of the
-            // correct answer.
-            // Fast and accurate parallel computation of quantile functions for random number generation,
-            // Thomas LuuDoctorial Thesis 2016
-            // http://discovery.ucl.ac.uk/1482128/
-            //
-            if(guess < 0.005)
-            {
-               value_type pp = comp ? 1 - p : p;
-               //guess = pow(pow(value_type(2), (k / 2 - 1)) * exp(l / 2) * pp * k, 2 / k);
-               guess = pow(pow(value_type(2), (k / 2 - 1)) * exp(l / 2) * pp * k * boost::math::tgamma(k / 2, forwarding_policy()), (2 / k));
-               if(guess == 0)
-                  guess = tools::min_value<value_type>();
-            }
-            value_type result = detail::generic_quantile(
-               non_central_chi_squared_distribution<value_type, forwarding_policy>(k, l),
-               p,
-               guess,
-               comp,
-               function);
-
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-
-         template <class RealType, class Policy>
-         RealType nccs_pdf(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& x)
-         {
-            BOOST_MATH_STD_USING
-            static const char* function = "pdf(non_central_chi_squared_distribution<%1%>, %1%)";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-            value_type k = dist.degrees_of_freedom();
-            value_type l = dist.non_centrality();
-            value_type r;
-            if(!detail::check_df(
-               function,
-               k, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy())
-               ||
-            !detail::check_positive_x(
-               function,
-               (value_type)x,
-               &r,
-               Policy()))
-                  return (RealType)r;
-
-         if(l == 0)
-            return pdf(boost::math::chi_squared_distribution<RealType, forwarding_policy>(dist.degrees_of_freedom()), x);
-
-         // Special case:
-         if(x == 0)
-            return 0;
-         if(l > 50)
-         {
-            r = non_central_chi_square_pdf(static_cast<value_type>(x), k, l, forwarding_policy());
-         }
-         else
-         {
-            r = log(x / l) * (k / 4 - 0.5f) - (x + l) / 2;
-            if(fabs(r) >= tools::log_max_value<RealType>() / 4)
-            {
-               r = non_central_chi_square_pdf(static_cast<value_type>(x), k, l, forwarding_policy());
-            }
-            else
-            {
-               r = exp(r);
-               r = 0.5f * r
-                  * boost::math::cyl_bessel_i(k/2 - 1, sqrt(l * x), forwarding_policy());
-            }
-         }
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               r,
-               function);
-         }
-
-         template <class RealType, class Policy>
-         struct degrees_of_freedom_finder
-         {
-            degrees_of_freedom_finder(
-               RealType lam_, RealType x_, RealType p_, bool c)
-               : lam(lam_), x(x_), p(p_), comp(c) {}
-
-            RealType operator()(const RealType& v)
-            {
-               non_central_chi_squared_distribution<RealType, Policy> d(v, lam);
-               return comp ?
-                  RealType(p - cdf(complement(d, x)))
-                  : RealType(cdf(d, x) - p);
-            }
-         private:
-            RealType lam;
-            RealType x;
-            RealType p;
-            bool comp;
-         };
-
-         template <class RealType, class Policy>
-         inline RealType find_degrees_of_freedom(
-            RealType lam, RealType x, RealType p, RealType q, const Policy& pol)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_degrees_of_freedom";
-            if((p == 0) || (q == 0))
-            {
-               //
-               // Can't a thing if one of p and q is zero:
-               //
-               return policies::raise_evaluation_error<RealType>(function,
-                  "Can't find degrees of freedom when the probability is 0 or 1, only possible answer is %1%",
-                  RealType(std::numeric_limits<RealType>::quiet_NaN()), Policy());
-            }
-            degrees_of_freedom_finder<RealType, Policy> f(lam, x, p < q ? p : q, p < q ? false : true);
-            tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-            boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-            //
-            // Pick an initial guess that we know will give us a probability
-            // right around 0.5.
-            //
-            RealType guess = x - lam;
-            if(guess < 1)
-               guess = 1;
-            std::pair<RealType, RealType> ir = tools::bracket_and_solve_root(
-               f, guess, RealType(2), false, tol, max_iter, pol);
-            RealType result = ir.first + (ir.second - ir.first) / 2;
-            if(max_iter >= policies::get_max_root_iterations<Policy>())
-            {
-               return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-                  " or there is no answer to problem.  Current best guess is %1%", result, Policy());
-            }
-            return result;
-         }
-
-         template <class RealType, class Policy>
-         struct non_centrality_finder
-         {
-            non_centrality_finder(
-               RealType v_, RealType x_, RealType p_, bool c)
-               : v(v_), x(x_), p(p_), comp(c) {}
-
-            RealType operator()(const RealType& lam)
-            {
-               non_central_chi_squared_distribution<RealType, Policy> d(v, lam);
-               return comp ?
-                  RealType(p - cdf(complement(d, x)))
-                  : RealType(cdf(d, x) - p);
-            }
-         private:
-            RealType v;
-            RealType x;
-            RealType p;
-            bool comp;
-         };
-
-         template <class RealType, class Policy>
-         inline RealType find_non_centrality(
-            RealType v, RealType x, RealType p, RealType q, const Policy& pol)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_non_centrality";
-            if((p == 0) || (q == 0))
-            {
-               //
-               // Can't do a thing if one of p and q is zero:
-               //
-               return policies::raise_evaluation_error<RealType>(function,
-                  "Can't find non centrality parameter when the probability is 0 or 1, only possible answer is %1%",
-                  RealType(std::numeric_limits<RealType>::quiet_NaN()), Policy());
-            }
-            non_centrality_finder<RealType, Policy> f(v, x, p < q ? p : q, p < q ? false : true);
-            tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-            boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-            //
-            // Pick an initial guess that we know will give us a probability
-            // right around 0.5.
-            //
-            RealType guess = x - v;
-            if(guess < 1)
-               guess = 1;
-            std::pair<RealType, RealType> ir = tools::bracket_and_solve_root(
-               f, guess, RealType(2), false, tol, max_iter, pol);
-            RealType result = ir.first + (ir.second - ir.first) / 2;
-            if(max_iter >= policies::get_max_root_iterations<Policy>())
-            {
-               return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-                  " or there is no answer to problem.  Current best guess is %1%", result, Policy());
-            }
-            return result;
-         }
-
-      }
-
-      template <class RealType = double, class Policy = policies::policy<> >
-      class non_central_chi_squared_distribution
-      {
-      public:
-         typedef RealType value_type;
-         typedef Policy policy_type;
-
-         non_central_chi_squared_distribution(RealType df_, RealType lambda) : df(df_), ncp(lambda)
-         {
-            const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::non_central_chi_squared_distribution(%1%,%1%)";
-            RealType r;
-            detail::check_df(
-               function,
-               df, &r, Policy());
-            detail::check_non_centrality(
-               function,
-               ncp,
-               &r,
-               Policy());
-         } // non_central_chi_squared_distribution constructor.
-
-         RealType degrees_of_freedom() const
-         { // Private data getter function.
-            return df;
-         }
-         RealType non_centrality() const
-         { // Private data getter function.
-            return ncp;
-         }
-         static RealType find_degrees_of_freedom(RealType lam, RealType x, RealType p)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_degrees_of_freedom";
-            typedef typename policies::evaluation<RealType, Policy>::type eval_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            eval_type result = detail::find_degrees_of_freedom(
-               static_cast<eval_type>(lam),
-               static_cast<eval_type>(x),
-               static_cast<eval_type>(p),
-               static_cast<eval_type>(1-p),
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-         template <class A, class B, class C>
-         static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_degrees_of_freedom";
-            typedef typename policies::evaluation<RealType, Policy>::type eval_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            eval_type result = detail::find_degrees_of_freedom(
-               static_cast<eval_type>(c.dist),
-               static_cast<eval_type>(c.param1),
-               static_cast<eval_type>(1-c.param2),
-               static_cast<eval_type>(c.param2),
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-         static RealType find_non_centrality(RealType v, RealType x, RealType p)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_non_centrality";
-            typedef typename policies::evaluation<RealType, Policy>::type eval_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            eval_type result = detail::find_non_centrality(
-               static_cast<eval_type>(v),
-               static_cast<eval_type>(x),
-               static_cast<eval_type>(p),
-               static_cast<eval_type>(1-p),
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-         template <class A, class B, class C>
-         static RealType find_non_centrality(const complemented3_type<A,B,C>& c)
-         {
-            const char* function = "non_central_chi_squared<%1%>::find_non_centrality";
-            typedef typename policies::evaluation<RealType, Policy>::type eval_type;
-            typedef typename policies::normalise<
-               Policy,
-               policies::promote_float<false>,
-               policies::promote_double<false>,
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            eval_type result = detail::find_non_centrality(
-               static_cast<eval_type>(c.dist),
-               static_cast<eval_type>(c.param1),
-               static_cast<eval_type>(1-c.param2),
-               static_cast<eval_type>(c.param2),
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result,
-               function);
-         }
-      private:
-         // Data member, initialized by constructor.
-         RealType df; // degrees of freedom.
-         RealType ncp; // non-centrality parameter
-      }; // template <class RealType, class Policy> class non_central_chi_squared_distribution
-
-      typedef non_central_chi_squared_distribution<double> non_central_chi_squared; // Reserved name of type double.
-
-      // Non-member functions to give properties of the distribution.
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> range(const non_central_chi_squared_distribution<RealType, Policy>& /* dist */)
-      { // Range of permissible values for random variable k.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // Max integer?
-      }
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> support(const non_central_chi_squared_distribution<RealType, Policy>& /* dist */)
-      { // Range of supported values for random variable k.
-         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mean(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      { // Mean of poisson distribution = lambda.
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::mean()";
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy()))
-               return r;
-         return k + l;
-      } // mean
-
-      template <class RealType, class Policy>
-      inline RealType mode(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      { // mode.
-         static const char* function = "mode(non_central_chi_squared_distribution<%1%> const&)";
-
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-         return detail::generic_find_mode(dist, 1 + k, function);
-      }
-
-      template <class RealType, class Policy>
-      inline RealType variance(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      { // variance.
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::variance()";
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy()))
-               return r;
-         return 2 * (2 * l + k);
-      }
-
-      // RealType standard_deviation(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      // standard_deviation provided by derived accessors.
-
-      template <class RealType, class Policy>
-      inline RealType skewness(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      { // skewness = sqrt(l).
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::skewness()";
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy()))
-               return r;
-         BOOST_MATH_STD_USING
-            return pow(2 / (k + 2 * l), RealType(3)/2) * (k + 3 * l);
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis_excess(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      {
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::kurtosis_excess()";
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy()))
-               return r;
-         return 12 * (k + 4 * l) / ((k + 2 * l) * (k + 2 * l));
-      } // kurtosis_excess
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis(const non_central_chi_squared_distribution<RealType, Policy>& dist)
-      {
-         return kurtosis_excess(dist) + 3;
-      }
-
-      template <class RealType, class Policy>
-      inline RealType pdf(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& x)
-      { // Probability Density/Mass Function.
-         return detail::nccs_pdf(dist, x);
-      } // pdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& x)
-      {
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::cdf(%1%)";
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy())
-            ||
-         !detail::check_positive_x(
-            function,
-            x,
-            &r,
-            Policy()))
-               return r;
-
-         return detail::non_central_chi_squared_cdf(x, k, l, false, Policy());
-      } // cdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const complemented2_type<non_central_chi_squared_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function
-         const char* function = "boost::math::non_central_chi_squared_distribution<%1%>::cdf(%1%)";
-         non_central_chi_squared_distribution<RealType, Policy> const& dist = c.dist;
-         RealType x = c.param;
-         RealType k = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            k, &r, Policy())
-            ||
-         !detail::check_non_centrality(
-            function,
-            l,
-            &r,
-            Policy())
-            ||
-         !detail::check_positive_x(
-            function,
-            x,
-            &r,
-            Policy()))
-               return r;
-
-         return detail::non_central_chi_squared_cdf(x, k, l, true, Policy());
-      } // ccdf
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const non_central_chi_squared_distribution<RealType, Policy>& dist, const RealType& p)
-      { // Quantile (or Percent Point) function.
-         return detail::nccs_quantile(dist, p, false);
-      } // quantile
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const complemented2_type<non_central_chi_squared_distribution<RealType, Policy>, RealType>& c)
-      { // Quantile (or Percent Point) function.
-         return detail::nccs_quantile(c.dist, c.param, true);
-      } // quantile complement.
-
-   } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_NON_CENTRAL_CHI_SQUARE_HPP
-
-
-
--- a/any/include/boost/math/distributions/non_central_f.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,410 +0,0 @@
-// boost\math\distributions\non_central_f.hpp
-
-// Copyright John Maddock 2008.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_SPECIAL_NON_CENTRAL_F_HPP
-#define BOOST_MATH_SPECIAL_NON_CENTRAL_F_HPP
-
-#include <boost/math/distributions/non_central_beta.hpp>
-#include <boost/math/distributions/detail/generic_mode.hpp>
-#include <boost/math/special_functions/pow.hpp>
-
-namespace boost
-{
-   namespace math
-   {
-      template <class RealType = double, class Policy = policies::policy<> >
-      class non_central_f_distribution
-      {
-      public:
-         typedef RealType value_type;
-         typedef Policy policy_type;
-
-         non_central_f_distribution(RealType v1_, RealType v2_, RealType lambda) : v1(v1_), v2(v2_), ncp(lambda)
-         {
-            const char* function = "boost::math::non_central_f_distribution<%1%>::non_central_f_distribution(%1%,%1%)";
-            RealType r;
-            detail::check_df(
-               function,
-               v1, &r, Policy());
-            detail::check_df(
-               function,
-               v2, &r, Policy());
-            detail::check_non_centrality(
-               function,
-               lambda,
-               &r,
-               Policy());
-         } // non_central_f_distribution constructor.
-
-         RealType degrees_of_freedom1()const
-         {
-            return v1;
-         }
-         RealType degrees_of_freedom2()const
-         {
-            return v2;
-         }
-         RealType non_centrality() const
-         { // Private data getter function.
-            return ncp;
-         }
-      private:
-         // Data member, initialized by constructor.
-         RealType v1;   // alpha.
-         RealType v2;   // beta.
-         RealType ncp; // non-centrality parameter
-      }; // template <class RealType, class Policy> class non_central_f_distribution
-
-      typedef non_central_f_distribution<double> non_central_f; // Reserved name of type double.
-
-      // Non-member functions to give properties of the distribution.
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> range(const non_central_f_distribution<RealType, Policy>& /* dist */)
-      { // Range of permissible values for random variable k.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-      }
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> support(const non_central_f_distribution<RealType, Policy>& /* dist */)
-      { // Range of supported values for random variable k.
-         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mean(const non_central_f_distribution<RealType, Policy>& dist)
-      {
-         const char* function = "mean(non_central_f_distribution<%1%> const&)";
-         RealType v1 = dist.degrees_of_freedom1();
-         RealType v2 = dist.degrees_of_freedom2();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            v1, &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               v2, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-               return r;
-         if(v2 <= 2)
-            return policies::raise_domain_error(
-               function,
-               "Second degrees of freedom parameter was %1%, but must be > 2 !",
-               v2, Policy());
-         return v2 * (v1 + l) / (v1 * (v2 - 2));
-      } // mean
-
-      template <class RealType, class Policy>
-      inline RealType mode(const non_central_f_distribution<RealType, Policy>& dist)
-      { // mode.
-         static const char* function = "mode(non_central_chi_squared_distribution<%1%> const&)";
-
-         RealType n = dist.degrees_of_freedom1();
-         RealType m = dist.degrees_of_freedom2();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            n, &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               m, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-               return r;
-         RealType guess = m > 2 ? RealType(m * (n + l) / (n * (m - 2))) : RealType(1);
-         return detail::generic_find_mode(
-            dist,
-            guess,
-            function);
-      }
-
-      template <class RealType, class Policy>
-      inline RealType variance(const non_central_f_distribution<RealType, Policy>& dist)
-      { // variance.
-         const char* function = "variance(non_central_f_distribution<%1%> const&)";
-         RealType n = dist.degrees_of_freedom1();
-         RealType m = dist.degrees_of_freedom2();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            n, &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               m, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-               return r;
-         if(m <= 4)
-            return policies::raise_domain_error(
-               function,
-               "Second degrees of freedom parameter was %1%, but must be > 4 !",
-               m, Policy());
-         RealType result = 2 * m * m * ((n + l) * (n + l)
-            + (m - 2) * (n + 2 * l));
-         result /= (m - 4) * (m - 2) * (m - 2) * n * n;
-         return result;
-      }
-
-      // RealType standard_deviation(const non_central_f_distribution<RealType, Policy>& dist)
-      // standard_deviation provided by derived accessors.
-
-      template <class RealType, class Policy>
-      inline RealType skewness(const non_central_f_distribution<RealType, Policy>& dist)
-      { // skewness = sqrt(l).
-         const char* function = "skewness(non_central_f_distribution<%1%> const&)";
-         BOOST_MATH_STD_USING
-         RealType n = dist.degrees_of_freedom1();
-         RealType m = dist.degrees_of_freedom2();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            n, &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               m, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-               return r;
-         if(m <= 6)
-            return policies::raise_domain_error(
-               function,
-               "Second degrees of freedom parameter was %1%, but must be > 6 !",
-               m, Policy());
-         RealType result = 2 * constants::root_two<RealType>();
-         result *= sqrt(m - 4);
-         result *= (n * (m + n - 2) *(m + 2 * n - 2)
-            + 3 * (m + n - 2) * (m + 2 * n - 2) * l
-            + 6 * (m + n - 2) * l * l + 2 * l * l * l);
-         result /= (m - 6) * pow(n * (m + n - 2) + 2 * (m + n - 2) * l + l * l, RealType(1.5f));
-         return result;
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis_excess(const non_central_f_distribution<RealType, Policy>& dist)
-      {
-         const char* function = "kurtosis_excess(non_central_f_distribution<%1%> const&)";
-         BOOST_MATH_STD_USING
-         RealType n = dist.degrees_of_freedom1();
-         RealType m = dist.degrees_of_freedom2();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df(
-            function,
-            n, &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               m, &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               l,
-               &r,
-               Policy()))
-               return r;
-         if(m <= 8)
-            return policies::raise_domain_error(
-               function,
-               "Second degrees of freedom parameter was %1%, but must be > 8 !",
-               m, Policy());
-         RealType l2 = l * l;
-         RealType l3 = l2 * l;
-         RealType l4 = l2 * l2;
-         RealType result = (3 * (m - 4) * (n * (m + n - 2)
-            * (4 * (m - 2) * (m - 2)
-            + (m - 2) * (m + 10) * n
-            + (10 + m) * n * n)
-            + 4 * (m + n - 2) * (4 * (m - 2) * (m - 2)
-            + (m - 2) * (10 + m) * n
-            + (10 + m) * n * n) * l + 2 * (10 + m)
-            * (m + n - 2) * (2 * m + 3 * n - 4) * l2
-            + 4 * (10 + m) * (-2 + m + n) * l3
-            + (10 + m) * l4))
-            /
-            ((-8 + m) * (-6 + m) * boost::math::pow<2>(n * (-2 + m + n)
-            + 2 * (-2 + m + n) * l + l2));
-            return result;
-      } // kurtosis_excess
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis(const non_central_f_distribution<RealType, Policy>& dist)
-      {
-         return kurtosis_excess(dist) + 3;
-      }
-
-      template <class RealType, class Policy>
-      inline RealType pdf(const non_central_f_distribution<RealType, Policy>& dist, const RealType& x)
-      { // Probability Density/Mass Function.
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy,
-            policies::promote_float<false>,
-            policies::promote_double<false>,
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-
-         value_type alpha = dist.degrees_of_freedom1() / 2;
-         value_type beta = dist.degrees_of_freedom2() / 2;
-         value_type y = x * alpha / beta;
-         value_type r = pdf(boost::math::non_central_beta_distribution<value_type, forwarding_policy>(alpha, beta, dist.non_centrality()), y / (1 + y));
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            r * (dist.degrees_of_freedom1() / dist.degrees_of_freedom2()) / ((1 + y) * (1 + y)),
-            "pdf(non_central_f_distribution<%1%>, %1%)");
-      } // pdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const non_central_f_distribution<RealType, Policy>& dist, const RealType& x)
-      {
-         const char* function = "cdf(const non_central_f_distribution<%1%>&, %1%)";
-         RealType r;
-         if(!detail::check_df(
-            function,
-            dist.degrees_of_freedom1(), &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               dist.degrees_of_freedom2(), &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               dist.non_centrality(),
-               &r,
-               Policy()))
-               return r;
-
-         if((x < 0) || !(boost::math::isfinite)(x))
-         {
-            return policies::raise_domain_error<RealType>(
-               function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
-         }
-
-         RealType alpha = dist.degrees_of_freedom1() / 2;
-         RealType beta = dist.degrees_of_freedom2() / 2;
-         RealType y = x * alpha / beta;
-         RealType c = y / (1 + y);
-         RealType cp = 1 / (1 + y);
-         //
-         // To ensure accuracy, we pass both x and 1-x to the
-         // non-central beta cdf routine, this ensures accuracy
-         // even when we compute x to be ~ 1:
-         //
-         r = detail::non_central_beta_cdf(c, cp, alpha, beta,
-            dist.non_centrality(), false, Policy());
-         return r;
-      } // cdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const complemented2_type<non_central_f_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function
-         const char* function = "cdf(complement(const non_central_f_distribution<%1%>&, %1%))";
-         RealType r;
-         if(!detail::check_df(
-            function,
-            c.dist.degrees_of_freedom1(), &r, Policy())
-               ||
-            !detail::check_df(
-               function,
-               c.dist.degrees_of_freedom2(), &r, Policy())
-               ||
-            !detail::check_non_centrality(
-               function,
-               c.dist.non_centrality(),
-               &r,
-               Policy()))
-               return r;
-
-         if((c.param < 0) || !(boost::math::isfinite)(c.param))
-         {
-            return policies::raise_domain_error<RealType>(
-               function, "Random Variable parameter was %1%, but must be > 0 !", c.param, Policy());
-         }
-
-         RealType alpha = c.dist.degrees_of_freedom1() / 2;
-         RealType beta = c.dist.degrees_of_freedom2() / 2;
-         RealType y = c.param * alpha / beta;
-         RealType x = y / (1 + y);
-         RealType cx = 1 / (1 + y);
-         //
-         // To ensure accuracy, we pass both x and 1-x to the
-         // non-central beta cdf routine, this ensures accuracy
-         // even when we compute x to be ~ 1:
-         //
-         r = detail::non_central_beta_cdf(x, cx, alpha, beta,
-            c.dist.non_centrality(), true, Policy());
-         return r;
-      } // ccdf
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const non_central_f_distribution<RealType, Policy>& dist, const RealType& p)
-      { // Quantile (or Percent Point) function.
-         RealType alpha = dist.degrees_of_freedom1() / 2;
-         RealType beta = dist.degrees_of_freedom2() / 2;
-         RealType x = quantile(boost::math::non_central_beta_distribution<RealType, Policy>(alpha, beta, dist.non_centrality()), p);
-         if(x == 1)
-            return policies::raise_overflow_error<RealType>(
-               "quantile(const non_central_f_distribution<%1%>&, %1%)",
-               "Result of non central F quantile is too large to represent.",
-               Policy());
-         return (x / (1 - x)) * (dist.degrees_of_freedom2() / dist.degrees_of_freedom1());
-      } // quantile
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const complemented2_type<non_central_f_distribution<RealType, Policy>, RealType>& c)
-      { // Quantile (or Percent Point) function.
-         RealType alpha = c.dist.degrees_of_freedom1() / 2;
-         RealType beta = c.dist.degrees_of_freedom2() / 2;
-         RealType x = quantile(complement(boost::math::non_central_beta_distribution<RealType, Policy>(alpha, beta, c.dist.non_centrality()), c.param));
-         if(x == 1)
-            return policies::raise_overflow_error<RealType>(
-               "quantile(complement(const non_central_f_distribution<%1%>&, %1%))",
-               "Result of non central F quantile is too large to represent.",
-               Policy());
-         return (x / (1 - x)) * (c.dist.degrees_of_freedom2() / c.dist.degrees_of_freedom1());
-      } // quantile complement.
-
-   } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_NON_CENTRAL_F_HPP
-
-
-
--- a/any/include/boost/math/distributions/non_central_t.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1202 +0,0 @@
-// boost\math\distributions\non_central_t.hpp
-
-// Copyright John Maddock 2008.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_MATH_SPECIAL_NON_CENTRAL_T_HPP
-#define BOOST_MATH_SPECIAL_NON_CENTRAL_T_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/non_central_beta.hpp> // for nc beta
-#include <boost/math/distributions/normal.hpp> // for normal CDF and quantile
-#include <boost/math/distributions/students_t.hpp>
-#include <boost/math/distributions/detail/generic_quantile.hpp> // quantile
-
-namespace boost
-{
-   namespace math
-   {
-
-      template <class RealType, class Policy>
-      class non_central_t_distribution;
-
-      namespace detail{
-
-         template <class T, class Policy>
-         T non_central_t2_p(T v, T delta, T x, T y, const Policy& pol, T init_val)
-         {
-            BOOST_MATH_STD_USING
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = policies::get_epsilon<T, Policy>();
-            T d2 = delta * delta / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term, we don't
-            // ever allow k == 0 as this can lead to catastrophic
-            // cancellation errors later (test case is v = 1621286869049072.3
-            // delta = 0.16212868690490723, x = 0.86987415482475994).
-            //
-            int k = itrunc(d2);
-            T pois;
-            if(k == 0) k = 1;
-            // Starting Poisson weight:
-            pois = gamma_p_derivative(T(k+1), d2, pol) 
-               * tgamma_delta_ratio(T(k + 1), T(0.5f))
-               * delta / constants::root_two<T>();
-            if(pois == 0)
-               return init_val;
-            T xterm, beta;
-            // Recurrance & starting beta terms:
-            beta = x < y
-               ? detail::ibeta_imp(T(k + 1), T(v / 2), x, pol, false, true, &xterm)
-               : detail::ibeta_imp(T(v / 2), T(k + 1), y, pol, true, true, &xterm);
-            xterm *= y / (v / 2 + k);
-            T poisf(pois), betaf(beta), xtermf(xterm);
-            T sum = init_val;
-            if((xterm == 0) && (beta == 0))
-               return init_val;
-
-            //
-            // Backwards recursion first, this is the stable
-            // direction for recursion:
-            //
-            boost::uintmax_t count = 0;
-            T last_term = 0;
-            for(int i = k; i >= 0; --i)
-            {
-               T term = beta * pois;
-               sum += term;
-               // Don't terminate on first term in case we "fixed" k above:
-               if((fabs(last_term) > fabs(term)) && fabs(term/sum) < errtol)
-                  break;
-               last_term = term;
-               pois *= (i + 0.5f) / d2;
-               beta += xterm;
-               xterm *= (i) / (x * (v / 2 + i - 1));
-               ++count;
-            }
-            last_term = 0;
-            for(int i = k + 1; ; ++i)
-            {
-               poisf *= d2 / (i + 0.5f);
-               xtermf *= (x * (v / 2 + i - 1)) / (i);
-               betaf -= xtermf;
-               T term = poisf * betaf;
-               sum += term;
-               if((fabs(last_term) >= fabs(term)) && (fabs(term/sum) < errtol))
-                  break;
-               last_term = term;
-               ++count;
-               if(count > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "cdf(non_central_t_distribution<%1%>, %1%)", 
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-            }
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_t2_q(T v, T delta, T x, T y, const Policy& pol, T init_val)
-         {
-            BOOST_MATH_STD_USING
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T d2 = delta * delta / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term, we don't allow
-            // k == 0 as this can cause catastrophic cancellation errors
-            // (test case is v = 561908036470413.25, delta = 0.056190803647041321,
-            // x = 1.6155232703966216):
-            //
-            int k = itrunc(d2);
-            if(k == 0) k = 1;
-            // Starting Poisson weight:
-            T pois;
-            if((k < (int)(max_factorial<T>::value)) && (d2 < tools::log_max_value<T>()) && (log(d2) * k < tools::log_max_value<T>()))
-            {
-               //
-               // For small k we can optimise this calculation by using
-               // a simpler reduced formula:
-               //
-               pois = exp(-d2);
-               pois *= pow(d2, static_cast<T>(k));
-               pois /= boost::math::tgamma(T(k + 1 + 0.5), pol);
-               pois *= delta / constants::root_two<T>();
-            }
-            else
-            {
-               pois = gamma_p_derivative(T(k+1), d2, pol) 
-                  * tgamma_delta_ratio(T(k + 1), T(0.5f))
-                  * delta / constants::root_two<T>();
-            }
-            if(pois == 0)
-               return init_val;
-            // Recurance term:
-            T xterm;
-            T beta;
-            // Starting beta term:
-            if(k != 0)
-            {
-               beta = x < y 
-                  ? detail::ibeta_imp(T(k + 1), T(v / 2), x, pol, true, true, &xterm) 
-                  : detail::ibeta_imp(T(v / 2), T(k + 1), y, pol, false, true, &xterm);
-
-               xterm *= y / (v / 2 + k);
-            }
-            else
-            {
-               beta = pow(y, v / 2);
-               xterm = beta;
-            }
-            T poisf(pois), betaf(beta), xtermf(xterm);
-            T sum = init_val;
-            if((xterm == 0) && (beta == 0))
-               return init_val;
-
-            //
-            // Fused forward and backwards recursion:
-            //
-            boost::uintmax_t count = 0;
-            T last_term = 0;
-            for(int i = k + 1, j = k; ; ++i, --j)
-            {
-               poisf *= d2 / (i + 0.5f);
-               xtermf *= (x * (v / 2 + i - 1)) / (i);
-               betaf += xtermf;
-               T term = poisf * betaf;
-
-               if(j >= 0)
-               {
-                  term += beta * pois;
-                  pois *= (j + 0.5f) / d2;
-                  beta -= xterm;
-                  xterm *= (j) / (x * (v / 2 + j - 1));
-               }
-
-               sum += term;
-               // Don't terminate on first term in case we "fixed" the value of k above:
-               if((fabs(last_term) > fabs(term)) && fabs(term/sum) < errtol)
-                  break;
-               last_term = term;
-               if(count > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "cdf(non_central_t_distribution<%1%>, %1%)", 
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-               ++count;
-            }
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_t_cdf(T v, T delta, T t, bool invert, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            if ((boost::math::isinf)(v))
-            { // Infinite degrees of freedom, so use normal distribution located at delta.
-               normal_distribution<T, Policy> n(delta, 1); 
-               return cdf(n, t);
-            }
-            //
-            // Otherwise, for t < 0 we have to use the reflection formula:
-            if(t < 0)
-            {
-               t = -t;
-               delta = -delta;
-               invert = !invert;
-            }
-            if(fabs(delta / (4 * v)) < policies::get_epsilon<T, Policy>())
-            {
-               // Approximate with a Student's T centred on delta,
-               // the crossover point is based on eq 2.6 from
-               // "A Comparison of Approximations To Percentiles of the
-               // Noncentral t-Distribution".  H. Sahai and M. M. Ojeda,
-               // Revista Investigacion Operacional Vol 21, No 2, 2000.
-               // Original sources referenced in the above are:
-               // "Some Approximations to the Percentage Points of the Noncentral
-               // t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31.
-               // "Continuous Univariate Distributions".  N.L. Johnson, S. Kotz and
-               // N. Balkrishnan. 1995. John Wiley and Sons New York.
-               T result = cdf(students_t_distribution<T, Policy>(v), t - delta);
-               return invert ? 1 - result : result;
-            }
-            //
-            // x and y are the corresponding random
-            // variables for the noncentral beta distribution,
-            // with y = 1 - x:
-            //
-            T x = t * t / (v + t * t);
-            T y = v / (v + t * t);
-            T d2 = delta * delta;
-            T a = 0.5f;
-            T b = v / 2;
-            T c = a + b + d2 / 2;
-            //
-            // Crossover point for calculating p or q is the same
-            // as for the noncentral beta:
-            //
-            T cross = 1 - (b / c) * (1 + d2 / (2 * c * c));
-            T result;
-            if(x < cross)
-            {
-               //
-               // Calculate p:
-               //
-               if(x != 0)
-               {
-                  result = non_central_beta_p(a, b, d2, x, y, pol);
-                  result = non_central_t2_p(v, delta, x, y, pol, result);
-                  result /= 2;
-               }
-               else
-                  result = 0;
-               result += cdf(boost::math::normal_distribution<T, Policy>(), -delta);
-            }
-            else
-            {
-               //
-               // Calculate q:
-               //
-               invert = !invert;
-               if(x != 0)
-               {
-                  result = non_central_beta_q(a, b, d2, x, y, pol);
-                  result = non_central_t2_q(v, delta, x, y, pol, result);
-                  result /= 2;
-               }
-               else // x == 0
-                  result = cdf(complement(boost::math::normal_distribution<T, Policy>(), -delta));
-            }
-            if(invert)
-               result = 1 - result;
-            return result;
-         }
-
-         template <class T, class Policy>
-         T non_central_t_quantile(const char* function, T v, T delta, T p, T q, const Policy&)
-         {
-            BOOST_MATH_STD_USING
-     //       static const char* function = "quantile(non_central_t_distribution<%1%>, %1%)";
-     // now passed as function
-            typedef typename policies::evaluation<T, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy, 
-               policies::promote_float<false>, 
-               policies::promote_double<false>, 
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-
-               T r;
-               if(!detail::check_df_gt0_to_inf(
-                  function,
-                  v, &r, Policy())
-                  ||
-               !detail::check_finite(
-                  function,
-                  delta,
-                  &r,
-                  Policy())
-                  ||
-               !detail::check_probability(
-                  function,
-                  p,
-                  &r,
-                  Policy()))
-                     return r;
-
-
-            value_type guess = 0;
-            if ( ((boost::math::isinf)(v)) || (v > 1 / boost::math::tools::epsilon<T>()) )
-            { // Infinite or very large degrees of freedom, so use normal distribution located at delta.
-               normal_distribution<T, Policy> n(delta, 1);
-               if (p < q)
-               {
-                 return quantile(n, p);
-               }
-               else
-               {
-                 return quantile(complement(n, q));
-               }
-            }
-            else if(v > 3)
-            { // Use normal distribution to calculate guess.
-               value_type mean = (v > 1 / policies::get_epsilon<T, Policy>()) ? delta : delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f));
-               value_type var = (v > 1 / policies::get_epsilon<T, Policy>()) ? value_type(1) : (((delta * delta + 1) * v) / (v - 2) - mean * mean);
-               if(p < q)
-                  guess = quantile(normal_distribution<value_type, forwarding_policy>(mean, var), p);
-               else
-                  guess = quantile(complement(normal_distribution<value_type, forwarding_policy>(mean, var), q));
-            }
-            //
-            // We *must* get the sign of the initial guess correct, 
-            // or our root-finder will fail, so double check it now:
-            //
-            value_type pzero = non_central_t_cdf(
-               static_cast<value_type>(v), 
-               static_cast<value_type>(delta), 
-               static_cast<value_type>(0), 
-               !(p < q), 
-               forwarding_policy());
-            int s;
-            if(p < q)
-               s = boost::math::sign(p - pzero);
-            else
-               s = boost::math::sign(pzero - q);
-            if(s != boost::math::sign(guess))
-            {
-               guess = static_cast<T>(s);
-            }
-
-            value_type result = detail::generic_quantile(
-               non_central_t_distribution<value_type, forwarding_policy>(v, delta), 
-               (p < q ? p : q), 
-               guess, 
-               (p >= q), 
-               function);
-            return policies::checked_narrowing_cast<T, forwarding_policy>(
-               result, 
-               function);
-         }
-
-         template <class T, class Policy>
-         T non_central_t2_pdf(T n, T delta, T x, T y, const Policy& pol, T init_val)
-         {
-            BOOST_MATH_STD_USING
-            //
-            // Variables come first:
-            //
-            boost::uintmax_t max_iter = policies::get_max_series_iterations<Policy>();
-            T errtol = boost::math::policies::get_epsilon<T, Policy>();
-            T d2 = delta * delta / 2;
-            //
-            // k is the starting point for iteration, and is the
-            // maximum of the poisson weighting term:
-            //
-            int k = itrunc(d2);
-            T pois, xterm;
-            if(k == 0)
-               k = 1;
-            // Starting Poisson weight:
-            pois = gamma_p_derivative(T(k+1), d2, pol) 
-               * tgamma_delta_ratio(T(k + 1), T(0.5f))
-               * delta / constants::root_two<T>();
-            // Starting beta term:
-            xterm = x < y
-               ? ibeta_derivative(T(k + 1), n / 2, x, pol)
-               : ibeta_derivative(n / 2, T(k + 1), y, pol);
-            T poisf(pois), xtermf(xterm);
-            T sum = init_val;
-            if((pois == 0) || (xterm == 0))
-               return init_val;
-
-            //
-            // Backwards recursion first, this is the stable
-            // direction for recursion:
-            //
-            boost::uintmax_t count = 0;
-            for(int i = k; i >= 0; --i)
-            {
-               T term = xterm * pois;
-               sum += term;
-               if(((fabs(term/sum) < errtol) && (i != k)) || (term == 0))
-                  break;
-               pois *= (i + 0.5f) / d2;
-               xterm *= (i) / (x * (n / 2 + i));
-               ++count;
-               if(count > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "pdf(non_central_t_distribution<%1%>, %1%)", 
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-            }
-            for(int i = k + 1; ; ++i)
-            {
-               poisf *= d2 / (i + 0.5f);
-               xtermf *= (x * (n / 2 + i)) / (i);
-               T term = poisf * xtermf;
-               sum += term;
-               if((fabs(term/sum) < errtol) || (term == 0))
-                  break;
-               ++count;
-               if(count > max_iter)
-               {
-                  return policies::raise_evaluation_error(
-                     "pdf(non_central_t_distribution<%1%>, %1%)", 
-                     "Series did not converge, closest value was %1%", sum, pol);
-               }
-            }
-            return sum;
-         }
-
-         template <class T, class Policy>
-         T non_central_t_pdf(T n, T delta, T t, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            if ((boost::math::isinf)(n))
-            { // Infinite degrees of freedom, so use normal distribution located at delta.
-               normal_distribution<T, Policy> norm(delta, 1); 
-               return pdf(norm, t);
-            }
-            //
-            // Otherwise, for t < 0 we have to use the reflection formula:
-            if(t < 0)
-            {
-               t = -t;
-               delta = -delta;
-            }
-            if(t == 0)
-            {
-               //
-               // Handle this as a special case, using the formula
-               // from Weisstein, Eric W. 
-               // "Noncentral Student's t-Distribution." 
-               // From MathWorld--A Wolfram Web Resource. 
-               // http://mathworld.wolfram.com/NoncentralStudentst-Distribution.html 
-               // 
-               // The formula is simplified thanks to the relation
-               // 1F1(a,b,0) = 1.
-               //
-               return tgamma_delta_ratio(n / 2 + 0.5f, T(0.5f))
-                  * sqrt(n / constants::pi<T>()) 
-                  * exp(-delta * delta / 2) / 2;
-            }
-            if(fabs(delta / (4 * n)) < policies::get_epsilon<T, Policy>())
-            {
-               // Approximate with a Student's T centred on delta,
-               // the crossover point is based on eq 2.6 from
-               // "A Comparison of Approximations To Percentiles of the
-               // Noncentral t-Distribution".  H. Sahai and M. M. Ojeda,
-               // Revista Investigacion Operacional Vol 21, No 2, 2000.
-               // Original sources referenced in the above are:
-               // "Some Approximations to the Percentage Points of the Noncentral
-               // t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31.
-               // "Continuous Univariate Distributions".  N.L. Johnson, S. Kotz and
-               // N. Balkrishnan. 1995. John Wiley and Sons New York.
-               return pdf(students_t_distribution<T, Policy>(n), t - delta);
-            }
-            //
-            // x and y are the corresponding random
-            // variables for the noncentral beta distribution,
-            // with y = 1 - x:
-            //
-            T x = t * t / (n + t * t);
-            T y = n / (n + t * t);
-            T a = 0.5f;
-            T b = n / 2;
-            T d2 = delta * delta;
-            //
-            // Calculate pdf:
-            //
-            T dt = n * t / (n * n + 2 * n * t * t + t * t * t * t);
-            T result = non_central_beta_pdf(a, b, d2, x, y, pol);
-            T tol = tools::epsilon<T>() * result * 500;
-            result = non_central_t2_pdf(n, delta, x, y, pol, result);
-            if(result <= tol)
-               result = 0;
-            result *= dt;
-            return result;
-         }
-
-         template <class T, class Policy>
-         T mean(T v, T delta, const Policy& pol)
-         {
-            if ((boost::math::isinf)(v))
-            {
-               return delta;
-            }
-            BOOST_MATH_STD_USING
-            if (v > 1 / boost::math::tools::epsilon<T>() )
-            {
-              //normal_distribution<T, Policy> n(delta, 1);
-              //return boost::math::mean(n); 
-              return delta;
-            }
-            else
-            {
-             return delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f), pol);
-            }
-            // Other moments use mean so using normal distribution is propagated.
-         }
-
-         template <class T, class Policy>
-         T variance(T v, T delta, const Policy& pol)
-         {
-            if ((boost::math::isinf)(v))
-            {
-               return 1;
-            }
-            if (delta == 0)
-            {  // == Student's t
-              return v / (v - 2);
-            }
-            T result = ((delta * delta + 1) * v) / (v - 2);
-            T m = mean(v, delta, pol);
-            result -= m * m;
-            return result;
-         }
-
-         template <class T, class Policy>
-         T skewness(T v, T delta, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            if ((boost::math::isinf)(v))
-            {
-               return 0;
-            }
-            if(delta == 0)
-            { // == Student's t
-              return 0;
-            }
-            T mean = boost::math::detail::mean(v, delta, pol);
-            T l2 = delta * delta;
-            T var = ((l2 + 1) * v) / (v - 2) - mean * mean;
-            T result = -2 * var;
-            result += v * (l2 + 2 * v - 3) / ((v - 3) * (v - 2));
-            result *= mean;
-            result /= pow(var, T(1.5f));
-            return result;
-         }
-
-         template <class T, class Policy>
-         T kurtosis_excess(T v, T delta, const Policy& pol)
-         {
-            BOOST_MATH_STD_USING
-            if ((boost::math::isinf)(v))
-            {
-               return 3;
-            }
-            if (delta == 0)
-            { // == Student's t
-              return 3;
-            }
-            T mean = boost::math::detail::mean(v, delta, pol);
-            T l2 = delta * delta;
-            T var = ((l2 + 1) * v) / (v - 2) - mean * mean;
-            T result = -3 * var;
-            result += v * (l2 * (v + 1) + 3 * (3 * v - 5)) / ((v - 3) * (v - 2));
-            result *= -mean * mean;
-            result += v * v * (l2 * l2 + 6 * l2 + 3) / ((v - 4) * (v - 2));
-            result /= var * var;
-            return result;
-         }
-
-#if 0
-         // 
-         // This code is disabled, since there can be multiple answers to the
-         // question, and it's not clear how to find the "right" one.
-         //
-         template <class RealType, class Policy>
-         struct t_degrees_of_freedom_finder
-         {
-            t_degrees_of_freedom_finder(
-               RealType delta_, RealType x_, RealType p_, bool c)
-               : delta(delta_), x(x_), p(p_), comp(c) {}
-
-            RealType operator()(const RealType& v)
-            {
-               non_central_t_distribution<RealType, Policy> d(v, delta);
-               return comp ?
-                  p - cdf(complement(d, x))
-                  : cdf(d, x) - p;
-            }
-         private:
-            RealType delta;
-            RealType x;
-            RealType p;
-            bool comp;
-         };
-
-         template <class RealType, class Policy>
-         inline RealType find_t_degrees_of_freedom(
-            RealType delta, RealType x, RealType p, RealType q, const Policy& pol)
-         {
-            const char* function = "non_central_t<%1%>::find_degrees_of_freedom";
-            if((p == 0) || (q == 0))
-            {
-               //
-               // Can't a thing if one of p and q is zero:
-               //
-               return policies::raise_evaluation_error<RealType>(function, 
-                  "Can't find degrees of freedom when the probability is 0 or 1, only possible answer is %1%", 
-                  RealType(std::numeric_limits<RealType>::quiet_NaN()), Policy());
-            }
-            t_degrees_of_freedom_finder<RealType, Policy> f(delta, x, p < q ? p : q, p < q ? false : true);
-            tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-            boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-            //
-            // Pick an initial guess:
-            //
-            RealType guess = 200;
-            std::pair<RealType, RealType> ir = tools::bracket_and_solve_root(
-               f, guess, RealType(2), false, tol, max_iter, pol);
-            RealType result = ir.first + (ir.second - ir.first) / 2;
-            if(max_iter >= policies::get_max_root_iterations<Policy>())
-            {
-               return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-                  " or there is no answer to problem.  Current best guess is %1%", result, Policy());
-            }
-            return result;
-         }
-
-         template <class RealType, class Policy>
-         struct t_non_centrality_finder
-         {
-            t_non_centrality_finder(
-               RealType v_, RealType x_, RealType p_, bool c)
-               : v(v_), x(x_), p(p_), comp(c) {}
-
-            RealType operator()(const RealType& delta)
-            {
-               non_central_t_distribution<RealType, Policy> d(v, delta);
-               return comp ?
-                  p - cdf(complement(d, x))
-                  : cdf(d, x) - p;
-            }
-         private:
-            RealType v;
-            RealType x;
-            RealType p;
-            bool comp;
-         };
-
-         template <class RealType, class Policy>
-         inline RealType find_t_non_centrality(
-            RealType v, RealType x, RealType p, RealType q, const Policy& pol)
-         {
-            const char* function = "non_central_t<%1%>::find_t_non_centrality";
-            if((p == 0) || (q == 0))
-            {
-               //
-               // Can't do a thing if one of p and q is zero:
-               //
-               return policies::raise_evaluation_error<RealType>(function, 
-                  "Can't find non-centrality parameter when the probability is 0 or 1, only possible answer is %1%", 
-                  RealType(std::numeric_limits<RealType>::quiet_NaN()), Policy());
-            }
-            t_non_centrality_finder<RealType, Policy> f(v, x, p < q ? p : q, p < q ? false : true);
-            tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-            boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-            //
-            // Pick an initial guess that we know is the right side of
-            // zero:
-            //
-            RealType guess;
-            if(f(0) < 0)
-               guess = 1;
-            else
-               guess = -1;
-            std::pair<RealType, RealType> ir = tools::bracket_and_solve_root(
-               f, guess, RealType(2), false, tol, max_iter, pol);
-            RealType result = ir.first + (ir.second - ir.first) / 2;
-            if(max_iter >= policies::get_max_root_iterations<Policy>())
-            {
-               return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-                  " or there is no answer to problem.  Current best guess is %1%", result, Policy());
-            }
-            return result;
-         }
-#endif
-      } // namespace detail ======================================================================
-
-      template <class RealType = double, class Policy = policies::policy<> >
-      class non_central_t_distribution
-      {
-      public:
-         typedef RealType value_type;
-         typedef Policy policy_type;
-
-         non_central_t_distribution(RealType v_, RealType lambda) : v(v_), ncp(lambda)
-         { 
-            const char* function = "boost::math::non_central_t_distribution<%1%>::non_central_t_distribution(%1%,%1%)";
-            RealType r;
-            detail::check_df_gt0_to_inf(
-               function,
-               v, &r, Policy());
-            detail::check_finite(
-               function,
-               lambda,
-               &r,
-               Policy());
-         } // non_central_t_distribution constructor.
-
-         RealType degrees_of_freedom() const
-         { // Private data getter function.
-            return v;
-         }
-         RealType non_centrality() const
-         { // Private data getter function.
-            return ncp;
-         }
-#if 0
-         // 
-         // This code is disabled, since there can be multiple answers to the
-         // question, and it's not clear how to find the "right" one.
-         //
-         static RealType find_degrees_of_freedom(RealType delta, RealType x, RealType p)
-         {
-            const char* function = "non_central_t<%1%>::find_degrees_of_freedom";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy, 
-               policies::promote_float<false>, 
-               policies::promote_double<false>, 
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            value_type result = detail::find_t_degrees_of_freedom(
-               static_cast<value_type>(delta), 
-               static_cast<value_type>(x), 
-               static_cast<value_type>(p), 
-               static_cast<value_type>(1-p), 
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result, 
-               function);
-         }
-         template <class A, class B, class C>
-         static RealType find_degrees_of_freedom(const complemented3_type<A,B,C>& c)
-         {
-            const char* function = "non_central_t<%1%>::find_degrees_of_freedom";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy, 
-               policies::promote_float<false>, 
-               policies::promote_double<false>, 
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            value_type result = detail::find_t_degrees_of_freedom(
-               static_cast<value_type>(c.dist), 
-               static_cast<value_type>(c.param1), 
-               static_cast<value_type>(1-c.param2), 
-               static_cast<value_type>(c.param2), 
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result, 
-               function);
-         }
-         static RealType find_non_centrality(RealType v, RealType x, RealType p)
-         {
-            const char* function = "non_central_t<%1%>::find_t_non_centrality";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy, 
-               policies::promote_float<false>, 
-               policies::promote_double<false>, 
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            value_type result = detail::find_t_non_centrality(
-               static_cast<value_type>(v), 
-               static_cast<value_type>(x), 
-               static_cast<value_type>(p), 
-               static_cast<value_type>(1-p), 
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result, 
-               function);
-         }
-         template <class A, class B, class C>
-         static RealType find_non_centrality(const complemented3_type<A,B,C>& c)
-         {
-            const char* function = "non_central_t<%1%>::find_t_non_centrality";
-            typedef typename policies::evaluation<RealType, Policy>::type value_type;
-            typedef typename policies::normalise<
-               Policy, 
-               policies::promote_float<false>, 
-               policies::promote_double<false>, 
-               policies::discrete_quantile<>,
-               policies::assert_undefined<> >::type forwarding_policy;
-            value_type result = detail::find_t_non_centrality(
-               static_cast<value_type>(c.dist), 
-               static_cast<value_type>(c.param1), 
-               static_cast<value_type>(1-c.param2), 
-               static_cast<value_type>(c.param2), 
-               forwarding_policy());
-            return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-               result, 
-               function);
-         }
-#endif
-      private:
-         // Data member, initialized by constructor.
-         RealType v;   // degrees of freedom
-         RealType ncp; // non-centrality parameter
-      }; // template <class RealType, class Policy> class non_central_t_distribution
-
-      typedef non_central_t_distribution<double> non_central_t; // Reserved name of type double.
-
-      // Non-member functions to give properties of the distribution.
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> range(const non_central_t_distribution<RealType, Policy>& /* dist */)
-      { // Range of permissible values for random variable k.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
-      }
-
-      template <class RealType, class Policy>
-      inline const std::pair<RealType, RealType> support(const non_central_t_distribution<RealType, Policy>& /* dist */)
-      { // Range of supported values for random variable k.
-         // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-         using boost::math::tools::max_value;
-         return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mode(const non_central_t_distribution<RealType, Policy>& dist)
-      { // mode.
-         static const char* function = "mode(non_central_t_distribution<%1%> const&)";
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-
-         BOOST_MATH_STD_USING
-
-         RealType m = v < 3 ? 0 : detail::mean(v, l, Policy());
-         RealType var = v < 4 ? 1 : detail::variance(v, l, Policy());
-
-         return detail::generic_find_mode(
-            dist, 
-            m,
-            function,
-            sqrt(var));
-      }
-
-      template <class RealType, class Policy>
-      inline RealType mean(const non_central_t_distribution<RealType, Policy>& dist)
-      { 
-         BOOST_MATH_STD_USING
-         const char* function = "mean(const non_central_t_distribution<%1%>&)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-         if(v <= 1)
-            return policies::raise_domain_error<RealType>(
-               function, 
-               "The non-central t distribution has no defined mean for degrees of freedom <= 1: got v=%1%.", v, Policy());
-         // return l * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, RealType(0.5f));
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::mean(static_cast<value_type>(v), static_cast<value_type>(l), forwarding_policy()), function);
-
-      } // mean
-
-      template <class RealType, class Policy>
-      inline RealType variance(const non_central_t_distribution<RealType, Policy>& dist)
-      { // variance.
-         const char* function = "variance(const non_central_t_distribution<%1%>&)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-         BOOST_MATH_STD_USING
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-         if(v <= 2)
-            return policies::raise_domain_error<RealType>(
-               function, 
-               "The non-central t distribution has no defined variance for degrees of freedom <= 2: got v=%1%.", v, Policy());
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::variance(static_cast<value_type>(v), static_cast<value_type>(l), forwarding_policy()), function);
-      }
-
-      // RealType standard_deviation(const non_central_t_distribution<RealType, Policy>& dist)
-      // standard_deviation provided by derived accessors.
-
-      template <class RealType, class Policy>
-      inline RealType skewness(const non_central_t_distribution<RealType, Policy>& dist)
-      { // skewness = sqrt(l).
-         const char* function = "skewness(const non_central_t_distribution<%1%>&)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-         if(v <= 3)
-            return policies::raise_domain_error<RealType>(
-               function, 
-               "The non-central t distribution has no defined skewness for degrees of freedom <= 3: got v=%1%.", v, Policy());;
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::skewness(static_cast<value_type>(v), static_cast<value_type>(l), forwarding_policy()), function);
-      }
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis_excess(const non_central_t_distribution<RealType, Policy>& dist)
-      { 
-         const char* function = "kurtosis_excess(const non_central_t_distribution<%1%>&)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy()))
-               return (RealType)r;
-         if(v <= 4)
-            return policies::raise_domain_error<RealType>(
-               function, 
-               "The non-central t distribution has no defined kurtosis for degrees of freedom <= 4: got v=%1%.", v, Policy());;
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::kurtosis_excess(static_cast<value_type>(v), static_cast<value_type>(l), forwarding_policy()), function);
-      } // kurtosis_excess
-
-      template <class RealType, class Policy>
-      inline RealType kurtosis(const non_central_t_distribution<RealType, Policy>& dist)
-      {
-         return kurtosis_excess(dist) + 3;
-      }
-
-      template <class RealType, class Policy>
-      inline RealType pdf(const non_central_t_distribution<RealType, Policy>& dist, const RealType& t)
-      { // Probability Density/Mass Function.
-         const char* function = "pdf(non_central_t_distribution<%1%>, %1%)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy())
-            ||
-         !detail::check_x(
-            function,
-            t,
-            &r,
-            Policy()))
-               return (RealType)r;
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::non_central_t_pdf(static_cast<value_type>(v), 
-               static_cast<value_type>(l), 
-               static_cast<value_type>(t), 
-               Policy()),
-            function);
-      } // pdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const non_central_t_distribution<RealType, Policy>& dist, const RealType& x)
-      { 
-         const char* function = "boost::math::cdf(non_central_t_distribution<%1%>&, %1%)";
-//   was const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy())
-            ||
-         !detail::check_x(
-            function,
-            x,
-            &r,
-            Policy()))
-               return (RealType)r;
-          if ((boost::math::isinf)(v))
-          { // Infinite degrees of freedom, so use normal distribution located at delta.
-             normal_distribution<RealType, Policy> n(l, 1); 
-             cdf(n, x);
-              //return cdf(normal_distribution<RealType, Policy>(l, 1), x);
-          }
-
-         if(l == 0)
-         { // NO non-centrality, so use Student's t instead.
-            return cdf(students_t_distribution<RealType, Policy>(v), x);
-         }
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::non_central_t_cdf(
-               static_cast<value_type>(v), 
-               static_cast<value_type>(l), 
-               static_cast<value_type>(x), 
-               false, Policy()),
-            function);
-      } // cdf
-
-      template <class RealType, class Policy>
-      RealType cdf(const complemented2_type<non_central_t_distribution<RealType, Policy>, RealType>& c)
-      { // Complemented Cumulative Distribution Function
-  // was       const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)";
-         const char* function = "boost::math::cdf(const complement(non_central_t_distribution<%1%>&), %1%)";
-         typedef typename policies::evaluation<RealType, Policy>::type value_type;
-         typedef typename policies::normalise<
-            Policy, 
-            policies::promote_float<false>, 
-            policies::promote_double<false>, 
-            policies::discrete_quantile<>,
-            policies::assert_undefined<> >::type forwarding_policy;
-
-         non_central_t_distribution<RealType, Policy> const& dist = c.dist;
-         RealType x = c.param;
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality(); // aka delta
-         RealType r;
-         if(!detail::check_df_gt0_to_inf(
-            function,
-            v, &r, Policy())
-            ||
-         !detail::check_finite(
-            function,
-            l,
-            &r,
-            Policy())
-            ||
-         !detail::check_x(
-            function,
-            x,
-            &r,
-            Policy()))
-               return (RealType)r;
-
-         if ((boost::math::isinf)(v))
-         { // Infinite degrees of freedom, so use normal distribution located at delta.
-             normal_distribution<RealType, Policy> n(l, 1); 
-             return cdf(complement(n, x));
-         }
-         if(l == 0)
-         { // zero non-centrality so use Student's t distribution.
-            return cdf(complement(students_t_distribution<RealType, Policy>(v), x));
-         }
-         return policies::checked_narrowing_cast<RealType, forwarding_policy>(
-            detail::non_central_t_cdf(
-               static_cast<value_type>(v), 
-               static_cast<value_type>(l), 
-               static_cast<value_type>(x), 
-               true, Policy()),
-            function);
-      } // ccdf
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const non_central_t_distribution<RealType, Policy>& dist, const RealType& p)
-      { // Quantile (or Percent Point) function.
-         static const char* function = "quantile(const non_central_t_distribution<%1%>, %1%)";
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         return detail::non_central_t_quantile(function, v, l, p, RealType(1-p), Policy());
-      } // quantile
-
-      template <class RealType, class Policy>
-      inline RealType quantile(const complemented2_type<non_central_t_distribution<RealType, Policy>, RealType>& c)
-      { // Quantile (or Percent Point) function.
-         static const char* function = "quantile(const complement(non_central_t_distribution<%1%>, %1%))";
-         non_central_t_distribution<RealType, Policy> const& dist = c.dist;
-         RealType q = c.param;
-         RealType v = dist.degrees_of_freedom();
-         RealType l = dist.non_centrality();
-         return detail::non_central_t_quantile(function, v, l, RealType(1-q), q, Policy());
-      } // quantile complement.
-
-   } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_MATH_SPECIAL_NON_CENTRAL_T_HPP
-
--- a/any/include/boost/math/distributions/normal.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,329 +0,0 @@
-//  Copyright John Maddock 2006, 2007.
-//  Copyright Paul A. Bristow 2006, 2007.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_NORMAL_HPP
-#define BOOST_STATS_NORMAL_HPP
-
-// http://en.wikipedia.org/wiki/Normal_distribution
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3661.htm
-// Also:
-// Weisstein, Eric W. "Normal Distribution."
-// From MathWorld--A Wolfram Web Resource.
-// http://mathworld.wolfram.com/NormalDistribution.html
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/erf.hpp> // for erf/erfc.
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-template <class RealType = double, class Policy = policies::policy<> >
-class normal_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   normal_distribution(RealType l_mean = 0, RealType sd = 1)
-      : m_mean(l_mean), m_sd(sd)
-   { // Default is a 'standard' normal distribution N01.
-     static const char* function = "boost::math::normal_distribution<%1%>::normal_distribution";
-
-     RealType result;
-     detail::check_scale(function, sd, &result, Policy());
-     detail::check_location(function, l_mean, &result, Policy());
-   }
-
-   RealType mean()const
-   { // alias for location.
-      return m_mean;
-   }
-
-   RealType standard_deviation()const
-   { // alias for scale.
-      return m_sd;
-   }
-
-   // Synonyms, provided to allow generic use of find_location and find_scale.
-   RealType location()const
-   { // location.
-      return m_mean;
-   }
-   RealType scale()const
-   { // scale.
-      return m_sd;
-   }
-
-private:
-   //
-   // Data members:
-   //
-   RealType m_mean;  // distribution mean or location.
-   RealType m_sd;    // distribution standard deviation or scale.
-}; // class normal_distribution
-
-typedef normal_distribution<double> normal;
-
-#ifdef BOOST_MSVC
-#pragma warning(push)
-#pragma warning(disable:4127)
-#endif
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const normal_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + max value.
-  }
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const normal_distribution<RealType, Policy>& /*dist*/)
-{ // This is range values for random variable x where cdf rises from 0 to 1, and outside it, the pdf is zero.
-  if (std::numeric_limits<RealType>::has_infinity)
-  { 
-     return std::pair<RealType, RealType>(-std::numeric_limits<RealType>::infinity(), std::numeric_limits<RealType>::infinity()); // - to + infinity.
-  }
-  else
-  { // Can only use max_value.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(-max_value<RealType>(),  max_value<RealType>()); // - to + max value.
-  }
-}
-
-#ifdef BOOST_MSVC
-#pragma warning(pop)
-#endif
-
-template <class RealType, class Policy>
-inline RealType pdf(const normal_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType sd = dist.standard_deviation();
-   RealType mean = dist.mean();
-
-   static const char* function = "boost::math::pdf(const normal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(false == detail::check_scale(function, sd, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_location(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if((boost::math::isinf)(x))
-   {
-     return 0; // pdf + and - infinity is zero.
-   }
-   // Below produces MSVC 4127 warnings, so the above used instead.
-   //if(std::numeric_limits<RealType>::has_infinity && abs(x) == std::numeric_limits<RealType>::infinity())
-   //{ // pdf + and - infinity is zero.
-   //  return 0;
-   //}
-   if(false == detail::check_x(function, x, &result, Policy()))
-   {
-      return result;
-   }
-
-   RealType exponent = x - mean;
-   exponent *= -exponent;
-   exponent /= 2 * sd * sd;
-
-   result = exp(exponent);
-   result /= sd * sqrt(2 * constants::pi<RealType>());
-
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const normal_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType sd = dist.standard_deviation();
-   RealType mean = dist.mean();
-   static const char* function = "boost::math::cdf(const normal_distribution<%1%>&, %1%)";
-   RealType result = 0;
-   if(false == detail::check_scale(function, sd, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::check_location(function, mean, &result, Policy()))
-   {
-      return result;
-   }
-   if((boost::math::isinf)(x))
-   {
-     if(x < 0) return 0; // -infinity
-     return 1; // + infinity
-   }
-   // These produce MSVC 4127 warnings, so the above used instead.
-   //if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-   //{ // cdf +infinity is unity.
-   //  return 1;
-   //}
-   //if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-   //{ // cdf -infinity is zero.
-   //  return 0;
-   //}
-   if(false == detail::check_x(function, x, &result, Policy()))
-   {
-     return result;
-   }
-   RealType diff = (x - mean) / (sd * constants::root_two<RealType>());
-   result = boost::math::erfc(-diff, Policy()) / 2;
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const normal_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType sd = dist.standard_deviation();
-   RealType mean = dist.mean();
-   static const char* function = "boost::math::quantile(const normal_distribution<%1%>&, %1%)";
-
-   RealType result = 0;
-   if(false == detail::check_scale(function, sd, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   result= boost::math::erfc_inv(2 * p, Policy());
-   result = -result;
-   result *= sd * constants::root_two<RealType>();
-   result += mean;
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<normal_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType sd = c.dist.standard_deviation();
-   RealType mean = c.dist.mean();
-   RealType x = c.param;
-   static const char* function = "boost::math::cdf(const complement(normal_distribution<%1%>&), %1%)";
-
-   RealType result = 0;
-   if(false == detail::check_scale(function, sd, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   if((boost::math::isinf)(x))
-   {
-     if(x < 0) return 1; // cdf complement -infinity is unity.
-     return 0; // cdf complement +infinity is zero
-   }
-   // These produce MSVC 4127 warnings, so the above used instead.
-   //if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-   //{ // cdf complement +infinity is zero.
-   //  return 0;
-   //}
-   //if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-   //{ // cdf complement -infinity is unity.
-   //  return 1;
-   //}
-   if(false == detail::check_x(function, x, &result, Policy()))
-      return result;
-
-   RealType diff = (x - mean) / (sd * constants::root_two<RealType>());
-   result = boost::math::erfc(diff, Policy()) / 2;
-   return result;
-} // cdf complement
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<normal_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   RealType sd = c.dist.standard_deviation();
-   RealType mean = c.dist.mean();
-   static const char* function = "boost::math::quantile(const complement(normal_distribution<%1%>&), %1%)";
-   RealType result = 0;
-   if(false == detail::check_scale(function, sd, &result, Policy()))
-      return result;
-   if(false == detail::check_location(function, mean, &result, Policy()))
-      return result;
-   RealType q = c.param;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-   result = boost::math::erfc_inv(2 * q, Policy());
-   result *= sd * constants::root_two<RealType>();
-   result += mean;
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType mean(const normal_distribution<RealType, Policy>& dist)
-{
-   return dist.mean();
-}
-
-template <class RealType, class Policy>
-inline RealType standard_deviation(const normal_distribution<RealType, Policy>& dist)
-{
-   return dist.standard_deviation();
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const normal_distribution<RealType, Policy>& dist)
-{
-   return dist.mean();
-}
-
-template <class RealType, class Policy>
-inline RealType median(const normal_distribution<RealType, Policy>& dist)
-{
-   return dist.mean();
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const normal_distribution<RealType, Policy>& /*dist*/)
-{
-   return 0;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const normal_distribution<RealType, Policy>& /*dist*/)
-{
-   return 3;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const normal_distribution<RealType, Policy>& /*dist*/)
-{
-   return 0;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_NORMAL_HPP
-
-
--- a/any/include/boost/math/distributions/pareto.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,444 +0,0 @@
-//  Copyright John Maddock 2007.
-//  Copyright Paul A. Bristow 2007, 2009
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_PARETO_HPP
-#define BOOST_STATS_PARETO_HPP
-
-// http://en.wikipedia.org/wiki/Pareto_distribution
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3661.htm
-// Also:
-// Weisstein, Eric W. "Pareto Distribution."
-// From MathWorld--A Wolfram Web Resource.
-// http://mathworld.wolfram.com/ParetoDistribution.html
-// Handbook of Statistical Distributions with Applications, K Krishnamoorthy, ISBN 1-58488-635-8, Chapter 23, pp 257 - 267.
-// Caution KK's a and b are the reverse of Mathworld!
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/special_functions/powm1.hpp>
-
-#include <utility> // for BOOST_CURRENT_VALUE?
-
-namespace boost
-{
-  namespace math
-  {
-    namespace detail
-    { // Parameter checking.
-      template <class RealType, class Policy>
-      inline bool check_pareto_scale(
-        const char* function,
-        RealType scale,
-        RealType* result, const Policy& pol)
-      {
-        if((boost::math::isfinite)(scale))
-        { // any > 0 finite value is OK.
-          if (scale > 0)
-          {
-            return true;
-          }
-          else
-          {
-            *result = policies::raise_domain_error<RealType>(
-              function,
-              "Scale parameter is %1%, but must be > 0!", scale, pol);
-            return false;
-          }
-        }
-        else
-        { // Not finite.
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Scale parameter is %1%, but must be finite!", scale, pol);
-          return false;
-        }
-      } // bool check_pareto_scale
-
-      template <class RealType, class Policy>
-      inline bool check_pareto_shape(
-        const char* function,
-        RealType shape,
-        RealType* result, const Policy& pol)
-      {
-        if((boost::math::isfinite)(shape))
-        { // Any finite value > 0 is OK.
-          if (shape > 0)
-          {
-            return true;
-          }
-          else
-          {
-            *result = policies::raise_domain_error<RealType>(
-              function,
-              "Shape parameter is %1%, but must be > 0!", shape, pol);
-            return false;
-          }
-        }
-        else
-        { // Not finite.
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Shape parameter is %1%, but must be finite!", shape, pol);
-          return false;
-        }
-      } // bool check_pareto_shape(
-
-      template <class RealType, class Policy>
-      inline bool check_pareto_x(
-        const char* function,
-        RealType const& x,
-        RealType* result, const Policy& pol)
-      {
-        if((boost::math::isfinite)(x))
-        { //
-          if (x > 0)
-          {
-            return true;
-          }
-          else
-          {
-            *result = policies::raise_domain_error<RealType>(
-              function,
-              "x parameter is %1%, but must be > 0 !", x, pol);
-            return false;
-          }
-        }
-        else
-        { // Not finite..
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "x parameter is %1%, but must be finite!", x, pol);
-          return false;
-        }
-      } // bool check_pareto_x
-
-      template <class RealType, class Policy>
-      inline bool check_pareto( // distribution parameters.
-        const char* function,
-        RealType scale,
-        RealType shape,
-        RealType* result, const Policy& pol)
-      {
-        return check_pareto_scale(function, scale, result, pol)
-           && check_pareto_shape(function, shape, result, pol);
-      } // bool check_pareto(
-
-    } // namespace detail
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class pareto_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      pareto_distribution(RealType l_scale = 1, RealType l_shape = 1)
-        : m_scale(l_scale), m_shape(l_shape)
-      { // Constructor.
-        RealType result = 0;
-        detail::check_pareto("boost::math::pareto_distribution<%1%>::pareto_distribution", l_scale, l_shape, &result, Policy());
-      }
-
-      RealType scale()const
-      { // AKA Xm and Wolfram b and beta
-        return m_scale;
-      }
-
-      RealType shape()const
-      { // AKA k and Wolfram a and alpha
-        return m_shape;
-      }
-    private:
-      // Data members:
-      RealType m_scale;  // distribution scale (xm) or beta
-      RealType m_shape;  // distribution shape (k) or alpha
-    };
-
-    typedef pareto_distribution<double> pareto; // Convenience to allow pareto(2., 3.);
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const pareto_distribution<RealType, Policy>& /*dist*/)
-    { // Range of permissible values for random variable x.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // scale zero to + infinity.
-    } // range
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const pareto_distribution<RealType, Policy>& dist)
-    { // Range of supported values for random variable x.
-      // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-      using boost::math::tools::max_value;
-      return std::pair<RealType, RealType>(dist.scale(), max_value<RealType>() ); // scale to + infinity.
-    } // support
-
-    template <class RealType, class Policy>
-    inline RealType pdf(const pareto_distribution<RealType, Policy>& dist, const RealType& x)
-    {
-      BOOST_MATH_STD_USING  // for ADL of std function pow.
-      static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
-      RealType scale = dist.scale();
-      RealType shape = dist.shape();
-      RealType result = 0;
-      if(false == (detail::check_pareto_x(function, x, &result, Policy())
-         && detail::check_pareto(function, scale, shape, &result, Policy())))
-         return result;
-      if (x < scale)
-      { // regardless of shape, pdf is zero (or should be disallow x < scale and throw an exception?).
-        return 0;
-      }
-      result = shape * pow(scale, shape) / pow(x, shape+1);
-      return result;
-    } // pdf
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const pareto_distribution<RealType, Policy>& dist, const RealType& x)
-    {
-      BOOST_MATH_STD_USING  // for ADL of std function pow.
-      static const char* function = "boost::math::cdf(const pareto_distribution<%1%>&, %1%)";
-      RealType scale = dist.scale();
-      RealType shape = dist.shape();
-      RealType result = 0;
-
-      if(false == (detail::check_pareto_x(function, x, &result, Policy())
-         && detail::check_pareto(function, scale, shape, &result, Policy())))
-         return result;
-
-      if (x <= scale)
-      { // regardless of shape, cdf is zero.
-        return 0;
-      }
-
-      // result = RealType(1) - pow((scale / x), shape);
-      result = -boost::math::powm1(scale/x, shape, Policy()); // should be more accurate.
-      return result;
-    } // cdf
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const pareto_distribution<RealType, Policy>& dist, const RealType& p)
-    {
-      BOOST_MATH_STD_USING  // for ADL of std function pow.
-      static const char* function = "boost::math::quantile(const pareto_distribution<%1%>&, %1%)";
-      RealType result = 0;
-      RealType scale = dist.scale();
-      RealType shape = dist.shape();
-      if(false == (detail::check_probability(function, p, &result, Policy())
-           && detail::check_pareto(function, scale, shape, &result, Policy())))
-      {
-        return result;
-      }
-      if (p == 0)
-      {
-        return scale; // x must be scale (or less).
-      }
-      if (p == 1)
-      {
-        return policies::raise_overflow_error<RealType>(function, 0, Policy()); // x = + infinity.
-      }
-      result = scale /
-        (pow((1 - p), 1 / shape));
-      // K. Krishnamoorthy,  ISBN 1-58488-635-8 eq 23.1.3
-      return result;
-    } // quantile
-
-    template <class RealType, class Policy>
-    inline RealType cdf(const complemented2_type<pareto_distribution<RealType, Policy>, RealType>& c)
-    {
-       BOOST_MATH_STD_USING  // for ADL of std function pow.
-       static const char* function = "boost::math::cdf(const pareto_distribution<%1%>&, %1%)";
-       RealType result = 0;
-       RealType x = c.param;
-       RealType scale = c.dist.scale();
-       RealType shape = c.dist.shape();
-       if(false == (detail::check_pareto_x(function, x, &result, Policy())
-           && detail::check_pareto(function, scale, shape, &result, Policy())))
-         return result;
-
-       if (x <= scale)
-       { // regardless of shape, cdf is zero, and complement is unity.
-         return 1;
-       }
-       result = pow((scale/x), shape);
-
-       return result;
-    } // cdf complement
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<pareto_distribution<RealType, Policy>, RealType>& c)
-    {
-      BOOST_MATH_STD_USING  // for ADL of std function pow.
-      static const char* function = "boost::math::quantile(const pareto_distribution<%1%>&, %1%)";
-      RealType result = 0;
-      RealType q = c.param;
-      RealType scale = c.dist.scale();
-      RealType shape = c.dist.shape();
-      if(false == (detail::check_probability(function, q, &result, Policy())
-           && detail::check_pareto(function, scale, shape, &result, Policy())))
-      {
-        return result;
-      }
-      if (q == 1)
-      {
-        return scale; // x must be scale (or less).
-      }
-      if (q == 0)
-      {
-         return policies::raise_overflow_error<RealType>(function, 0, Policy()); // x = + infinity.
-      }
-      result = scale / (pow(q, 1 / shape));
-      // K. Krishnamoorthy,  ISBN 1-58488-635-8 eq 23.1.3
-      return result;
-    } // quantile complement
-
-    template <class RealType, class Policy>
-    inline RealType mean(const pareto_distribution<RealType, Policy>& dist)
-    {
-      RealType result = 0;
-      static const char* function = "boost::math::mean(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, dist.scale(), dist.shape(), &result, Policy()))
-      {
-        return result;
-      }
-      if (dist.shape() > RealType(1))
-      {
-        return dist.shape() * dist.scale() / (dist.shape() - 1);
-      }
-      else
-      {
-        using boost::math::tools::max_value;
-        return max_value<RealType>(); // +infinity.
-      }
-    } // mean
-
-    template <class RealType, class Policy>
-    inline RealType mode(const pareto_distribution<RealType, Policy>& dist)
-    {
-      return dist.scale();
-    } // mode
-
-    template <class RealType, class Policy>
-    inline RealType median(const pareto_distribution<RealType, Policy>& dist)
-    {
-      RealType result = 0;
-      static const char* function = "boost::math::median(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, dist.scale(), dist.shape(), &result, Policy()))
-      {
-        return result;
-      }
-      BOOST_MATH_STD_USING
-      return dist.scale() * pow(RealType(2), (1/dist.shape()));
-    } // median
-
-    template <class RealType, class Policy>
-    inline RealType variance(const pareto_distribution<RealType, Policy>& dist)
-    {
-      RealType result = 0;
-      RealType scale = dist.scale();
-      RealType shape = dist.shape();
-      static const char* function = "boost::math::variance(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, scale, shape, &result, Policy()))
-      {
-        return result;
-      }
-      if (shape > 2)
-      {
-        result = (scale * scale * shape) /
-         ((shape - 1) *  (shape - 1) * (shape - 2));
-      }
-      else
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "variance is undefined for shape <= 2, but got %1%.", dist.shape(), Policy());
-      }
-      return result;
-    } // variance
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const pareto_distribution<RealType, Policy>& dist)
-    {
-      BOOST_MATH_STD_USING
-      RealType result = 0;
-      RealType shape = dist.shape();
-      static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, dist.scale(), shape, &result, Policy()))
-      {
-        return result;
-      }
-      if (shape > 3)
-      {
-        result = sqrt((shape - 2) / shape) *
-          2 * (shape + 1) /
-          (shape - 3);
-      }
-      else
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "skewness is undefined for shape <= 3, but got %1%.", dist.shape(), Policy());
-      }
-      return result;
-    } // skewness
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const pareto_distribution<RealType, Policy>& dist)
-    {
-      RealType result = 0;
-      RealType shape = dist.shape();
-      static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, dist.scale(), shape, &result, Policy()))
-      {
-        return result;
-      }
-      if (shape > 4)
-      {
-        result = 3 * ((shape - 2) * (3 * shape * shape + shape + 2)) /
-          (shape * (shape - 3) * (shape - 4));
-      }
-      else
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "kurtosis_excess is undefined for shape <= 4, but got %1%.", shape, Policy());
-      }
-      return result;
-    } // kurtosis
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const pareto_distribution<RealType, Policy>& dist)
-    {
-      RealType result = 0;
-      RealType shape = dist.shape();
-      static const char* function = "boost::math::pdf(const pareto_distribution<%1%>&, %1%)";
-      if(false == detail::check_pareto(function, dist.scale(), shape, &result, Policy()))
-      {
-        return result;
-      }
-      if (shape > 4)
-      {
-        result = 6 * ((shape * shape * shape) + (shape * shape) - 6 * shape - 2) /
-          (shape * (shape - 3) * (shape - 4));
-      }
-      else
-      {
-        result = policies::raise_domain_error<RealType>(
-          function,
-          "kurtosis_excess is undefined for shape <= 4, but got %1%.", dist.shape(), Policy());
-      }
-      return result;
-    } // kurtosis_excess
-
-    } // namespace math
-  } // namespace boost
-
-  // This include must be at the end, *after* the accessors
-  // for this distribution have been defined, in order to
-  // keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_PARETO_HPP
-
-
--- a/any/include/boost/math/distributions/poisson.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,527 +0,0 @@
-// boost\math\distributions\poisson.hpp
-
-// Copyright John Maddock 2006.
-// Copyright Paul A. Bristow 2007.
-
-// Use, modification and distribution are subject to the
-// Boost Software License, Version 1.0.
-// (See accompanying file LICENSE_1_0.txt
-// or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// Poisson distribution is a discrete probability distribution.
-// It expresses the probability of a number (k) of
-// events, occurrences, failures or arrivals occurring in a fixed time,
-// assuming these events occur with a known average or mean rate (lambda)
-// and are independent of the time since the last event.
-// The distribution was discovered by Simeon-Denis Poisson (1781-1840).
-
-// Parameter lambda is the mean number of events in the given time interval.
-// The random variate k is the number of events, occurrences or arrivals.
-// k argument may be integral, signed, or unsigned, or floating point.
-// If necessary, it has already been promoted from an integral type.
-
-// Note that the Poisson distribution
-// (like others including the binomial, negative binomial & Bernoulli)
-// is strictly defined as a discrete function:
-// only integral values of k are envisaged.
-// However because the method of calculation uses a continuous gamma function,
-// it is convenient to treat it as if a continous function,
-// and permit non-integral values of k.
-// To enforce the strict mathematical model, users should use floor or ceil functions
-// on k outside this function to ensure that k is integral.
-
-// See http://en.wikipedia.org/wiki/Poisson_distribution
-// http://documents.wolfram.com/v5/Add-onsLinks/StandardPackages/Statistics/DiscreteDistributions.html
-
-#ifndef BOOST_MATH_SPECIAL_POISSON_HPP
-#define BOOST_MATH_SPECIAL_POISSON_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp> // for incomplete gamma. gamma_q
-#include <boost/math/special_functions/trunc.hpp> // for incomplete gamma. gamma_q
-#include <boost/math/distributions/complement.hpp> // complements
-#include <boost/math/distributions/detail/common_error_handling.hpp> // error checks
-#include <boost/math/special_functions/fpclassify.hpp> // isnan.
-#include <boost/math/special_functions/factorials.hpp> // factorials.
-#include <boost/math/tools/roots.hpp> // for root finding.
-#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
-
-#include <utility>
-
-namespace boost
-{
-  namespace math
-  {
-    namespace poisson_detail
-    {
-      // Common error checking routines for Poisson distribution functions.
-      // These are convoluted, & apparently redundant, to try to ensure that
-      // checks are always performed, even if exceptions are not enabled.
-
-      template <class RealType, class Policy>
-      inline bool check_mean(const char* function, const RealType& mean, RealType* result, const Policy& pol)
-      {
-        if(!(boost::math::isfinite)(mean) || (mean < 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Mean argument is %1%, but must be >= 0 !", mean, pol);
-          return false;
-        }
-        return true;
-      } // bool check_mean
-
-      template <class RealType, class Policy>
-      inline bool check_mean_NZ(const char* function, const RealType& mean, RealType* result, const Policy& pol)
-      { // mean == 0 is considered an error.
-        if( !(boost::math::isfinite)(mean) || (mean <= 0))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Mean argument is %1%, but must be > 0 !", mean, pol);
-          return false;
-        }
-        return true;
-      } // bool check_mean_NZ
-
-      template <class RealType, class Policy>
-      inline bool check_dist(const char* function, const RealType& mean, RealType* result, const Policy& pol)
-      { // Only one check, so this is redundant really but should be optimized away.
-        return check_mean_NZ(function, mean, result, pol);
-      } // bool check_dist
-
-      template <class RealType, class Policy>
-      inline bool check_k(const char* function, const RealType& k, RealType* result, const Policy& pol)
-      {
-        if((k < 0) || !(boost::math::isfinite)(k))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Number of events k argument is %1%, but must be >= 0 !", k, pol);
-          return false;
-        }
-        return true;
-      } // bool check_k
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_k(const char* function, RealType mean, RealType k, RealType* result, const Policy& pol)
-      {
-        if((check_dist(function, mean, result, pol) == false) ||
-          (check_k(function, k, result, pol) == false))
-        {
-          return false;
-        }
-        return true;
-      } // bool check_dist_and_k
-
-      template <class RealType, class Policy>
-      inline bool check_prob(const char* function, const RealType& p, RealType* result, const Policy& pol)
-      { // Check 0 <= p <= 1
-        if(!(boost::math::isfinite)(p) || (p < 0) || (p > 1))
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "Probability argument is %1%, but must be >= 0 and <= 1 !", p, pol);
-          return false;
-        }
-        return true;
-      } // bool check_prob
-
-      template <class RealType, class Policy>
-      inline bool check_dist_and_prob(const char* function, RealType mean,  RealType p, RealType* result, const Policy& pol)
-      {
-        if((check_dist(function, mean, result, pol) == false) ||
-          (check_prob(function, p, result, pol) == false))
-        {
-          return false;
-        }
-        return true;
-      } // bool check_dist_and_prob
-
-    } // namespace poisson_detail
-
-    template <class RealType = double, class Policy = policies::policy<> >
-    class poisson_distribution
-    {
-    public:
-      typedef RealType value_type;
-      typedef Policy policy_type;
-
-      poisson_distribution(RealType l_mean = 1) : m_l(l_mean) // mean (lambda).
-      { // Expected mean number of events that occur during the given interval.
-        RealType r;
-        poisson_detail::check_dist(
-           "boost::math::poisson_distribution<%1%>::poisson_distribution",
-          m_l,
-          &r, Policy());
-      } // poisson_distribution constructor.
-
-      RealType mean() const
-      { // Private data getter function.
-        return m_l;
-      }
-    private:
-      // Data member, initialized by constructor.
-      RealType m_l; // mean number of occurrences.
-    }; // template <class RealType, class Policy> class poisson_distribution
-
-    typedef poisson_distribution<double> poisson; // Reserved name of type double.
-
-    // Non-member functions to give properties of the distribution.
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> range(const poisson_distribution<RealType, Policy>& /* dist */)
-    { // Range of permissible values for random variable k.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>()); // Max integer?
-    }
-
-    template <class RealType, class Policy>
-    inline const std::pair<RealType, RealType> support(const poisson_distribution<RealType, Policy>& /* dist */)
-    { // Range of supported values for random variable k.
-       // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-       using boost::math::tools::max_value;
-       return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-    }
-
-    template <class RealType, class Policy>
-    inline RealType mean(const poisson_distribution<RealType, Policy>& dist)
-    { // Mean of poisson distribution = lambda.
-      return dist.mean();
-    } // mean
-
-    template <class RealType, class Policy>
-    inline RealType mode(const poisson_distribution<RealType, Policy>& dist)
-    { // mode.
-      BOOST_MATH_STD_USING // ADL of std functions.
-      return floor(dist.mean());
-    }
-
-    //template <class RealType, class Policy>
-    //inline RealType median(const poisson_distribution<RealType, Policy>& dist)
-    //{ // median = approximately lambda + 1/3 - 0.2/lambda
-    //  RealType l = dist.mean();
-    //  return dist.mean() + static_cast<RealType>(0.3333333333333333333333333333333333333333333333)
-    //   - static_cast<RealType>(0.2) / l;
-    //} // BUT this formula appears to be out-by-one compared to quantile(half)
-    // Query posted on Wikipedia.
-    // Now implemented via quantile(half) in derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType variance(const poisson_distribution<RealType, Policy>& dist)
-    { // variance.
-      return dist.mean();
-    }
-
-    // RealType standard_deviation(const poisson_distribution<RealType, Policy>& dist)
-    // standard_deviation provided by derived accessors.
-
-    template <class RealType, class Policy>
-    inline RealType skewness(const poisson_distribution<RealType, Policy>& dist)
-    { // skewness = sqrt(l).
-      BOOST_MATH_STD_USING // ADL of std functions.
-      return 1 / sqrt(dist.mean());
-    }
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis_excess(const poisson_distribution<RealType, Policy>& dist)
-    { // skewness = sqrt(l).
-      return 1 / dist.mean(); // kurtosis_excess 1/mean from Wiki & MathWorld eq 31.
-      // http://mathworld.wolfram.com/Kurtosis.html explains that the kurtosis excess
-      // is more convenient because the kurtosis excess of a normal distribution is zero
-      // whereas the true kurtosis is 3.
-    } // RealType kurtosis_excess
-
-    template <class RealType, class Policy>
-    inline RealType kurtosis(const poisson_distribution<RealType, Policy>& dist)
-    { // kurtosis is 4th moment about the mean = u4 / sd ^ 4
-      // http://en.wikipedia.org/wiki/Curtosis
-      // kurtosis can range from -2 (flat top) to +infinity (sharp peak & heavy tails).
-      // http://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm
-      return 3 + 1 / dist.mean(); // NIST.
-      // http://mathworld.wolfram.com/Kurtosis.html explains that the kurtosis excess
-      // is more convenient because the kurtosis excess of a normal distribution is zero
-      // whereas the true kurtosis is 3.
-    } // RealType kurtosis
-
-    template <class RealType, class Policy>
-    RealType pdf(const poisson_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Probability Density/Mass Function.
-      // Probability that there are EXACTLY k occurrences (or arrivals).
-      BOOST_FPU_EXCEPTION_GUARD
-
-      BOOST_MATH_STD_USING // for ADL of std functions.
-
-      RealType mean = dist.mean();
-      // Error check:
-      RealType result = 0;
-      if(false == poisson_detail::check_dist_and_k(
-        "boost::math::pdf(const poisson_distribution<%1%>&, %1%)",
-        mean,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-
-      // Special case of mean zero, regardless of the number of events k.
-      if (mean == 0)
-      { // Probability for any k is zero.
-        return 0;
-      }
-      if (k == 0)
-      { // mean ^ k = 1, and k! = 1, so can simplify.
-        return exp(-mean);
-      }
-      return boost::math::gamma_p_derivative(k+1, mean, Policy());
-    } // pdf
-
-    template <class RealType, class Policy>
-    RealType cdf(const poisson_distribution<RealType, Policy>& dist, const RealType& k)
-    { // Cumulative Distribution Function Poisson.
-      // The random variate k is the number of occurrences(or arrivals)
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      // Returns the sum of the terms 0 through k of the Poisson Probability Density or Mass (pdf).
-
-      // But note that the Poisson distribution
-      // (like others including the binomial, negative binomial & Bernoulli)
-      // is strictly defined as a discrete function: only integral values of k are envisaged.
-      // However because of the method of calculation using a continuous gamma function,
-      // it is convenient to treat it as if it is a continous function
-      // and permit non-integral values of k.
-      // To enforce the strict mathematical model, users should use floor or ceil functions
-      // outside this function to ensure that k is integral.
-
-      // The terms are not summed directly (at least for larger k)
-      // instead the incomplete gamma integral is employed,
-
-      BOOST_MATH_STD_USING // for ADL of std function exp.
-
-      RealType mean = dist.mean();
-      // Error checks:
-      RealType result = 0;
-      if(false == poisson_detail::check_dist_and_k(
-        "boost::math::cdf(const poisson_distribution<%1%>&, %1%)",
-        mean,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special cases:
-      if (mean == 0)
-      { // Probability for any k is zero.
-        return 0;
-      }
-      if (k == 0)
-      { // return pdf(dist, static_cast<RealType>(0));
-        // but mean (and k) have already been checked,
-        // so this avoids unnecessary repeated checks.
-       return exp(-mean);
-      }
-      // For small integral k could use a finite sum -
-      // it's cheaper than the gamma function.
-      // BUT this is now done efficiently by gamma_q function.
-      // Calculate poisson cdf using the gamma_q function.
-      return gamma_q(k+1, mean, Policy());
-    } // binomial cdf
-
-    template <class RealType, class Policy>
-    RealType cdf(const complemented2_type<poisson_distribution<RealType, Policy>, RealType>& c)
-    { // Complemented Cumulative Distribution Function Poisson
-      // The random variate k is the number of events, occurrences or arrivals.
-      // k argument may be integral, signed, or unsigned, or floating point.
-      // If necessary, it has already been promoted from an integral type.
-      // But note that the Poisson distribution
-      // (like others including the binomial, negative binomial & Bernoulli)
-      // is strictly defined as a discrete function: only integral values of k are envisaged.
-      // However because of the method of calculation using a continuous gamma function,
-      // it is convenient to treat it as is it is a continous function
-      // and permit non-integral values of k.
-      // To enforce the strict mathematical model, users should use floor or ceil functions
-      // outside this function to ensure that k is integral.
-
-      // Returns the sum of the terms k+1 through inf of the Poisson Probability Density/Mass (pdf).
-      // The terms are not summed directly (at least for larger k)
-      // instead the incomplete gamma integral is employed,
-
-      RealType const& k = c.param;
-      poisson_distribution<RealType, Policy> const& dist = c.dist;
-
-      RealType mean = dist.mean();
-
-      // Error checks:
-      RealType result = 0;
-      if(false == poisson_detail::check_dist_and_k(
-        "boost::math::cdf(const poisson_distribution<%1%>&, %1%)",
-        mean,
-        k,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special case of mean, regardless of the number of events k.
-      if (mean == 0)
-      { // Probability for any k is unity, complement of zero.
-        return 1;
-      }
-      if (k == 0)
-      { // Avoid repeated checks on k and mean in gamma_p.
-         return -boost::math::expm1(-mean, Policy());
-      }
-      // Unlike un-complemented cdf (sum from 0 to k),
-      // can't use finite sum from k+1 to infinity for small integral k,
-      // anyway it is now done efficiently by gamma_p.
-      return gamma_p(k + 1, mean, Policy()); // Calculate Poisson cdf using the gamma_p function.
-      // CCDF = gamma_p(k+1, lambda)
-    } // poisson ccdf
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const poisson_distribution<RealType, Policy>& dist, const RealType& p)
-    { // Quantile (or Percent Point) Poisson function.
-      // Return the number of expected events k for a given probability p.
-      static const char* function = "boost::math::quantile(const poisson_distribution<%1%>&, %1%)";
-      RealType result = 0; // of Argument checks:
-      if(false == poisson_detail::check_prob(
-        function,
-        p,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special case:
-      if (dist.mean() == 0)
-      { // if mean = 0 then p = 0, so k can be anything?
-         if (false == poisson_detail::check_mean_NZ(
-         function,
-         dist.mean(),
-         &result, Policy()))
-        {
-          return result;
-        }
-      }
-      if(p == 0)
-      {
-         return 0; // Exact result regardless of discrete-quantile Policy
-      }
-      if(p == 1)
-      {
-         return policies::raise_overflow_error<RealType>(function, 0, Policy());
-      }
-      typedef typename Policy::discrete_quantile_type discrete_type;
-      boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-      RealType guess, factor = 8;
-      RealType z = dist.mean();
-      if(z < 1)
-         guess = z;
-      else
-         guess = boost::math::detail::inverse_poisson_cornish_fisher(z, p, RealType(1-p), Policy());
-      if(z > 5)
-      {
-         if(z > 1000)
-            factor = 1.01f;
-         else if(z > 50)
-            factor = 1.1f;
-         else if(guess > 10)
-            factor = 1.25f;
-         else
-            factor = 2;
-         if(guess < 1.1)
-            factor = 8;
-      }
-
-      return detail::inverse_discrete_quantile(
-         dist,
-         p,
-         false,
-         guess,
-         factor,
-         RealType(1),
-         discrete_type(),
-         max_iter);
-   } // quantile
-
-    template <class RealType, class Policy>
-    inline RealType quantile(const complemented2_type<poisson_distribution<RealType, Policy>, RealType>& c)
-    { // Quantile (or Percent Point) of Poisson function.
-      // Return the number of expected events k for a given
-      // complement of the probability q.
-      //
-      // Error checks:
-      static const char* function = "boost::math::quantile(complement(const poisson_distribution<%1%>&, %1%))";
-      RealType q = c.param;
-      const poisson_distribution<RealType, Policy>& dist = c.dist;
-      RealType result = 0;  // of argument checks.
-      if(false == poisson_detail::check_prob(
-        function,
-        q,
-        &result, Policy()))
-      {
-        return result;
-      }
-      // Special case:
-      if (dist.mean() == 0)
-      { // if mean = 0 then p = 0, so k can be anything?
-         if (false == poisson_detail::check_mean_NZ(
-         function,
-         dist.mean(),
-         &result, Policy()))
-        {
-          return result;
-        }
-      }
-      if(q == 0)
-      {
-         return policies::raise_overflow_error<RealType>(function, 0, Policy());
-      }
-      if(q == 1)
-      {
-         return 0;  // Exact result regardless of discrete-quantile Policy
-      }
-      typedef typename Policy::discrete_quantile_type discrete_type;
-      boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-      RealType guess, factor = 8;
-      RealType z = dist.mean();
-      if(z < 1)
-         guess = z;
-      else
-         guess = boost::math::detail::inverse_poisson_cornish_fisher(z, RealType(1-q), q, Policy());
-      if(z > 5)
-      {
-         if(z > 1000)
-            factor = 1.01f;
-         else if(z > 50)
-            factor = 1.1f;
-         else if(guess > 10)
-            factor = 1.25f;
-         else
-            factor = 2;
-         if(guess < 1.1)
-            factor = 8;
-      }
-
-      return detail::inverse_discrete_quantile(
-         dist,
-         q,
-         true,
-         guess,
-         factor,
-         RealType(1),
-         discrete_type(),
-         max_iter);
-   } // quantile complement.
-
-  } // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-#include <boost/math/distributions/detail/inv_discrete_quantile.hpp>
-
-#endif // BOOST_MATH_SPECIAL_POISSON_HPP
-
-
-
--- a/any/include/boost/math/distributions/rayleigh.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-//  Copyright Paul A. Bristow 2007.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_rayleigh_HPP
-#define BOOST_STATS_rayleigh_HPP
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/special_functions/log1p.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/config/no_tr1/cmath.hpp>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
-#endif
-
-#include <utility>
-
-namespace boost{ namespace math{
-
-namespace detail
-{ // Error checks:
-  template <class RealType, class Policy>
-  inline bool verify_sigma(const char* function, RealType sigma, RealType* presult, const Policy& pol)
-  {
-     if((sigma <= 0) || (!(boost::math::isfinite)(sigma)))
-     {
-        *presult = policies::raise_domain_error<RealType>(
-           function,
-           "The scale parameter \"sigma\" must be > 0 and finite, but was: %1%.", sigma, pol);
-        return false;
-     }
-     return true;
-  } // bool verify_sigma
-
-  template <class RealType, class Policy>
-  inline bool verify_rayleigh_x(const char* function, RealType x, RealType* presult, const Policy& pol)
-  {
-     if((x < 0) || (boost::math::isnan)(x))
-     {
-        *presult = policies::raise_domain_error<RealType>(
-           function,
-           "The random variable must be >= 0, but was: %1%.", x, pol);
-        return false;
-     }
-     return true;
-  } // bool verify_rayleigh_x
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class rayleigh_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   rayleigh_distribution(RealType l_sigma = 1)
-      : m_sigma(l_sigma)
-   {
-      RealType err;
-      detail::verify_sigma("boost::math::rayleigh_distribution<%1%>::rayleigh_distribution", l_sigma, &err, Policy());
-   } // rayleigh_distribution
-
-   RealType sigma()const
-   { // Accessor.
-     return m_sigma;
-   }
-
-private:
-   RealType m_sigma;
-}; // class rayleigh_distribution
-
-typedef rayleigh_distribution<double> rayleigh;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const rayleigh_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), std::numeric_limits<RealType>::has_infinity ? std::numeric_limits<RealType>::infinity() : max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const rayleigh_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0),  max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const rayleigh_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std function exp.
-
-   RealType sigma = dist.sigma();
-   RealType result = 0;
-   static const char* function = "boost::math::pdf(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
-   {
-      return result;
-   }
-   if((boost::math::isinf)(x))
-   {
-      return 0;
-   }
-   RealType sigmasqr = sigma * sigma;
-   result = x * (exp(-(x * x) / ( 2 * sigmasqr))) / sigmasqr;
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const rayleigh_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   RealType result = 0;
-   RealType sigma = dist.sigma();
-   static const char* function = "boost::math::cdf(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
-   {
-      return result;
-   }
-   result = -boost::math::expm1(-x * x / ( 2 * sigma * sigma), Policy());
-   return result;
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const rayleigh_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   RealType result = 0;
-   RealType sigma = dist.sigma();
-   static const char* function = "boost::math::quantile(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 0)
-   {
-      return 0;
-   }
-   if(p == 1)
-   {
-     return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   result = sqrt(-2 * sigma * sigma * boost::math::log1p(-p, Policy()));
-   return result;
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<rayleigh_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-
-   RealType result = 0;
-   RealType sigma = c.dist.sigma();
-   static const char* function = "boost::math::cdf(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   RealType x = c.param;
-   if(false == detail::verify_rayleigh_x(function, x, &result, Policy()))
-   {
-      return result;
-   }
-   RealType ea = x * x / (2 * sigma * sigma);
-   // Fix for VC11/12 x64 bug in exp(float):
-   if (ea >= tools::max_value<RealType>())
-      return 0;
-   result =  exp(-ea);
-   return result;
-} // cdf complement
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<rayleigh_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions, log & sqrt.
-
-   RealType result = 0;
-   RealType sigma = c.dist.sigma();
-   static const char* function = "boost::math::quantile(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   RealType q = c.param;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-   {
-      return result;
-   }
-   if(q == 1)
-   {
-      return 0;
-   }
-   if(q == 0)
-   {
-     return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   result = sqrt(-2 * sigma * sigma * log(q));
-   return result;
-} // quantile complement
-
-template <class RealType, class Policy>
-inline RealType mean(const rayleigh_distribution<RealType, Policy>& dist)
-{
-   RealType result = 0;
-   RealType sigma = dist.sigma();
-   static const char* function = "boost::math::mean(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   using boost::math::constants::root_half_pi;
-   return sigma * root_half_pi<RealType>();
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const rayleigh_distribution<RealType, Policy>& dist)
-{
-   RealType result = 0;
-   RealType sigma = dist.sigma();
-   static const char* function = "boost::math::variance(const rayleigh_distribution<%1%>&, %1%)";
-   if(false == detail::verify_sigma(function, sigma, &result, Policy()))
-   {
-      return result;
-   }
-   using boost::math::constants::four_minus_pi;
-   return four_minus_pi<RealType>() * sigma * sigma / 2;
-} // variance
-
-template <class RealType, class Policy>
-inline RealType mode(const rayleigh_distribution<RealType, Policy>& dist)
-{
-   return dist.sigma();
-}
-
-template <class RealType, class Policy>
-inline RealType median(const rayleigh_distribution<RealType, Policy>& dist)
-{
-   using boost::math::constants::root_ln_four;
-   return root_ln_four<RealType>() * dist.sigma();
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const rayleigh_distribution<RealType, Policy>& /*dist*/)
-{
-  // using namespace boost::math::constants;
-  return static_cast<RealType>(0.63111065781893713819189935154422777984404221106391L);
-  // Computed using NTL at 150 bit, about 50 decimal digits.
-  // return 2 * root_pi<RealType>() * pi_minus_three<RealType>() / pow23_four_minus_pi<RealType>();
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const rayleigh_distribution<RealType, Policy>& /*dist*/)
-{
-  // using namespace boost::math::constants;
-  return static_cast<RealType>(3.2450893006876380628486604106197544154170667057995L);
-  // Computed using NTL at 150 bit, about 50 decimal digits.
-  // return 3 - (6 * pi<RealType>() * pi<RealType>() - 24 * pi<RealType>() + 16) /
-  // (four_minus_pi<RealType>() * four_minus_pi<RealType>());
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const rayleigh_distribution<RealType, Policy>& /*dist*/)
-{
-  //using namespace boost::math::constants;
-  // Computed using NTL at 150 bit, about 50 decimal digits.
-  return static_cast<RealType>(0.2450893006876380628486604106197544154170667057995L);
-  // return -(6 * pi<RealType>() * pi<RealType>() - 24 * pi<RealType>() + 16) /
-  //   (four_minus_pi<RealType>() * four_minus_pi<RealType>());
-} // kurtosis
-
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_rayleigh_HPP
--- a/any/include/boost/math/distributions/skew_normal.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,719 +0,0 @@
-//  Copyright Benjamin Sobotta 2012
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_SKEW_NORMAL_HPP
-#define BOOST_STATS_SKEW_NORMAL_HPP
-
-// http://en.wikipedia.org/wiki/Skew_normal_distribution
-// http://azzalini.stat.unipd.it/SN/
-// Also:
-// Azzalini, A. (1985). "A class of distributions which includes the normal ones".
-// Scand. J. Statist. 12: 171-178.
-
-#include <boost/math/distributions/fwd.hpp> // TODO add skew_normal distribution to fwd.hpp!
-#include <boost/math/special_functions/owens_t.hpp> // Owen's T function
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/normal.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/constants/constants.hpp>
-#include <boost/math/tools/tuple.hpp>
-#include <boost/math/tools/roots.hpp> // Newton-Raphson
-#include <boost/assert.hpp>
-#include <boost/math/distributions/detail/generic_mode.hpp> // pdf max finder.
-
-#include <utility>
-#include <algorithm> // std::lower_bound, std::distance
-
-namespace boost{ namespace math{
-
-  namespace detail
-  {
-    template <class RealType, class Policy>
-    inline bool check_skew_normal_shape(
-      const char* function,
-      RealType shape,
-      RealType* result,
-      const Policy& pol)
-    {
-      if(!(boost::math::isfinite)(shape))
-      {
-        *result =
-          policies::raise_domain_error<RealType>(function,
-          "Shape parameter is %1%, but must be finite!",
-          shape, pol);
-        return false;
-      }
-      return true;
-    }
-
-  } // namespace detail
-
-  template <class RealType = double, class Policy = policies::policy<> >
-  class skew_normal_distribution
-  {
-  public:
-    typedef RealType value_type;
-    typedef Policy policy_type;
-
-    skew_normal_distribution(RealType l_location = 0, RealType l_scale = 1, RealType l_shape = 0)
-      : location_(l_location), scale_(l_scale), shape_(l_shape)
-    { // Default is a 'standard' normal distribution N01. (shape=0 results in the normal distribution with no skew)
-      static const char* function = "boost::math::skew_normal_distribution<%1%>::skew_normal_distribution";
-
-      RealType result;
-      detail::check_scale(function, l_scale, &result, Policy());
-      detail::check_location(function, l_location, &result, Policy());
-      detail::check_skew_normal_shape(function, l_shape, &result, Policy());
-    }
-
-    RealType location()const
-    { 
-      return location_;
-    }
-
-    RealType scale()const
-    { 
-      return scale_;
-    }
-
-    RealType shape()const
-    { 
-      return shape_;
-    }
-
-
-  private:
-    //
-    // Data members:
-    //
-    RealType location_;  // distribution location.
-    RealType scale_;    // distribution scale.
-    RealType shape_;    // distribution shape.
-  }; // class skew_normal_distribution
-
-  typedef skew_normal_distribution<double> skew_normal;
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> range(const skew_normal_distribution<RealType, Policy>& /*dist*/)
-  { // Range of permissible values for random variable x.
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(
-       std::numeric_limits<RealType>::has_infinity ? -std::numeric_limits<RealType>::infinity() : -max_value<RealType>(), 
-       std::numeric_limits<RealType>::has_infinity ? std::numeric_limits<RealType>::infinity() : max_value<RealType>()); // - to + max value.
-  }
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> support(const skew_normal_distribution<RealType, Policy>& /*dist*/)
-  { // Range of supported values for random variable x.
-    // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(-max_value<RealType>(),  max_value<RealType>()); // - to + max value.
-  }
-
-  template <class RealType, class Policy>
-  inline RealType pdf(const skew_normal_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    const RealType scale = dist.scale();
-    const RealType location = dist.location();
-    const RealType shape = dist.shape();
-
-    static const char* function = "boost::math::pdf(const skew_normal_distribution<%1%>&, %1%)";
-
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_location(function, location, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-    {
-      return result;
-    }
-    if((boost::math::isinf)(x))
-    {
-       return 0; // pdf + and - infinity is zero.
-    }
-    // Below produces MSVC 4127 warnings, so the above used instead.
-    //if(std::numeric_limits<RealType>::has_infinity && abs(x) == std::numeric_limits<RealType>::infinity())
-    //{ // pdf + and - infinity is zero.
-    //  return 0;
-    //}
-    if(false == detail::check_x(function, x, &result, Policy()))
-    {
-      return result;
-    }
-
-    const RealType transformed_x = (x-location)/scale;
-
-    normal_distribution<RealType, Policy> std_normal;
-
-    result = pdf(std_normal, transformed_x) * cdf(std_normal, shape*transformed_x) * 2 / scale;
-
-    return result;
-  } // pdf
-
-  template <class RealType, class Policy>
-  inline RealType cdf(const skew_normal_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    const RealType scale = dist.scale();
-    const RealType location = dist.location();
-    const RealType shape = dist.shape();
-
-    static const char* function = "boost::math::cdf(const skew_normal_distribution<%1%>&, %1%)";
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_location(function, location, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-    {
-      return result;
-    }
-    if((boost::math::isinf)(x))
-    {
-      if(x < 0) return 0; // -infinity
-      return 1; // + infinity
-    }
-    // These produce MSVC 4127 warnings, so the above used instead.
-    //if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-    //{ // cdf +infinity is unity.
-    //  return 1;
-    //}
-    //if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-    //{ // cdf -infinity is zero.
-    //  return 0;
-    //}
-    if(false == detail::check_x(function, x, &result, Policy()))
-    {
-      return result;
-    }
-
-    const RealType transformed_x = (x-location)/scale;
-
-    normal_distribution<RealType, Policy> std_normal;
-
-    result = cdf(std_normal, transformed_x) - owens_t(transformed_x, shape)*static_cast<RealType>(2);
-
-    return result;
-  } // cdf
-
-  template <class RealType, class Policy>
-  inline RealType cdf(const complemented2_type<skew_normal_distribution<RealType, Policy>, RealType>& c)
-  {
-    const RealType scale = c.dist.scale();
-    const RealType location = c.dist.location();
-    const RealType shape = c.dist.shape();
-    const RealType x = c.param;
-
-    static const char* function = "boost::math::cdf(const complement(skew_normal_distribution<%1%>&), %1%)";
-
-    if((boost::math::isinf)(x))
-    {
-      if(x < 0) return 1; // cdf complement -infinity is unity.
-      return 0; // cdf complement +infinity is zero
-    }
-    // These produce MSVC 4127 warnings, so the above used instead.
-    //if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
-    //{ // cdf complement +infinity is zero.
-    //  return 0;
-    //}
-    //if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
-    //{ // cdf complement -infinity is unity.
-    //  return 1;
-    //}
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-    if(false == detail::check_location(function, location, &result, Policy()))
-      return result;
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-      return result;
-    if(false == detail::check_x(function, x, &result, Policy()))
-      return result;
-
-    const RealType transformed_x = (x-location)/scale;
-
-    normal_distribution<RealType, Policy> std_normal;
-
-    result = cdf(complement(std_normal, transformed_x)) + owens_t(transformed_x, shape)*static_cast<RealType>(2);
-    return result;
-  } // cdf complement
-
-  template <class RealType, class Policy>
-  inline RealType location(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    return dist.location();
-  }
-
-  template <class RealType, class Policy>
-  inline RealType scale(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    return dist.scale();
-  }
-
-  template <class RealType, class Policy>
-  inline RealType shape(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    return dist.shape();
-  }
-
-  template <class RealType, class Policy>
-  inline RealType mean(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    BOOST_MATH_STD_USING  // for ADL of std functions
-
-    using namespace boost::math::constants;
-
-    //const RealType delta = dist.shape() / sqrt(static_cast<RealType>(1)+dist.shape()*dist.shape());
-
-    //return dist.location() + dist.scale() * delta * root_two_div_pi<RealType>();
-
-    return dist.location() + dist.scale() * dist.shape() / sqrt(pi<RealType>()+pi<RealType>()*dist.shape()*dist.shape()) * root_two<RealType>();
-  }
-
-  template <class RealType, class Policy>
-  inline RealType variance(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    using namespace boost::math::constants;
-
-    const RealType delta2 = static_cast<RealType>(1) / (static_cast<RealType>(1)+static_cast<RealType>(1)/(dist.shape()*dist.shape()));
-    //const RealType inv_delta2 = static_cast<RealType>(1)+static_cast<RealType>(1)/(dist.shape()*dist.shape());
-
-    RealType variance = dist.scale()*dist.scale()*(static_cast<RealType>(1)-two_div_pi<RealType>()*delta2);
-    //RealType variance = dist.scale()*dist.scale()*(static_cast<RealType>(1)-two_div_pi<RealType>()/inv_delta2);
-
-    return variance;
-  }
-
-  namespace detail
-  {
-    /*
-      TODO No closed expression for mode, so use max of pdf.
-    */
-    
-    template <class RealType, class Policy>
-    inline RealType mode_fallback(const skew_normal_distribution<RealType, Policy>& dist)
-    { // mode.
-        static const char* function = "mode(skew_normal_distribution<%1%> const&)";
-        const RealType scale = dist.scale();
-        const RealType location = dist.location();
-        const RealType shape = dist.shape();
-        
-        RealType result;
-        if(!detail::check_scale(
-          function,
-          scale, &result, Policy())
-          ||
-        !detail::check_skew_normal_shape(
-          function,
-          shape,
-          &result,
-          Policy()))
-        return result;
-
-        if( shape == 0 )
-        {
-          return location;
-        }
-
-        if( shape < 0 )
-        {
-          skew_normal_distribution<RealType, Policy> D(0, 1, -shape);
-          result = mode_fallback(D);
-          result = location-scale*result;
-          return result;
-        }
-        
-        BOOST_MATH_STD_USING
-
-        // 21 elements
-        static const RealType shapes[] = {
-          0.0,
-          1.000000000000000e-004,
-          2.069138081114790e-004,
-          4.281332398719396e-004,
-          8.858667904100824e-004,
-          1.832980710832436e-003,
-          3.792690190732250e-003,
-          7.847599703514606e-003,
-          1.623776739188722e-002,
-          3.359818286283781e-002,
-          6.951927961775606e-002,
-          1.438449888287663e-001,
-          2.976351441631319e-001,
-          6.158482110660261e-001,
-          1.274274985703135e+000,
-          2.636650898730361e+000,
-          5.455594781168514e+000,
-          1.128837891684688e+001,
-          2.335721469090121e+001,
-          4.832930238571753e+001,
-          1.000000000000000e+002};
-
-        // 21 elements
-        static const RealType guess[] = {
-          0.0,
-          5.000050000525391e-005,
-          1.500015000148736e-004,
-          3.500035000350010e-004,
-          7.500075000752560e-004,
-          1.450014500145258e-003,
-          3.050030500305390e-003,
-          6.250062500624765e-003,
-          1.295012950129504e-002,
-          2.675026750267495e-002,
-          5.525055250552491e-002,
-          1.132511325113255e-001,
-          2.249522495224952e-001,
-          3.992539925399257e-001,
-          5.353553535535358e-001,
-          4.954549545495457e-001,
-          3.524535245352451e-001,
-          2.182521825218249e-001,
-          1.256512565125654e-001,
-          6.945069450694508e-002,
-          3.735037350373460e-002
-        };
-
-        const RealType* result_ptr = std::lower_bound(shapes, shapes+21, shape);
-
-        typedef typename std::iterator_traits<RealType*>::difference_type diff_type;
-        
-        const diff_type d = std::distance(shapes, result_ptr);
-        
-        BOOST_ASSERT(d > static_cast<diff_type>(0));
-
-        // refine
-        if(d < static_cast<diff_type>(21)) // shape smaller 100
-        {
-          result = guess[d-static_cast<diff_type>(1)]
-            + (guess[d]-guess[d-static_cast<diff_type>(1)])/(shapes[d]-shapes[d-static_cast<diff_type>(1)])
-            * (shape-shapes[d-static_cast<diff_type>(1)]);
-        }
-        else // shape greater 100
-        {
-          result = 1e-4;
-        }
-
-        skew_normal_distribution<RealType, Policy> helper(0, 1, shape);
-        
-        result = detail::generic_find_mode_01(helper, result, function);
-        
-        result = result*scale + location;
-        
-        return result;
-    } // mode_fallback
-    
-    
-    /*
-     * TODO No closed expression for mode, so use f'(x) = 0
-     */
-    template <class RealType, class Policy>
-    struct skew_normal_mode_functor
-    { 
-      skew_normal_mode_functor(const boost::math::skew_normal_distribution<RealType, Policy> dist)
-        : distribution(dist)
-      {
-      }
-
-      boost::math::tuple<RealType, RealType> operator()(RealType const& x)
-      {
-        normal_distribution<RealType, Policy> std_normal;
-        const RealType shape = distribution.shape();
-        const RealType pdf_x = pdf(distribution, x);
-        const RealType normpdf_x = pdf(std_normal, x);
-        const RealType normpdf_ax = pdf(std_normal, x*shape);
-        RealType fx = static_cast<RealType>(2)*shape*normpdf_ax*normpdf_x - x*pdf_x;
-        RealType dx = static_cast<RealType>(2)*shape*x*normpdf_x*normpdf_ax*(static_cast<RealType>(1) + shape*shape) + pdf_x + x*fx;
-        // return both function evaluation difference f(x) and 1st derivative f'(x).
-        return boost::math::make_tuple(fx, -dx);
-      }
-    private:
-      const boost::math::skew_normal_distribution<RealType, Policy> distribution;
-    };
-    
-  } // namespace detail
-  
-  template <class RealType, class Policy>
-  inline RealType mode(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    const RealType scale = dist.scale();
-    const RealType location = dist.location();
-    const RealType shape = dist.shape();
-
-    static const char* function = "boost::math::mode(const skew_normal_distribution<%1%>&, %1%)";
-
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-    if(false == detail::check_location(function, location, &result, Policy()))
-      return result;
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-      return result;
-
-    if( shape == 0 )
-    {
-      return location;
-    }
-
-    if( shape < 0 )
-    {
-      skew_normal_distribution<RealType, Policy> D(0, 1, -shape);
-      result = mode(D);
-      result = location-scale*result;
-      return result;
-    }
-
-    // 21 elements
-    static const RealType shapes[] = {
-      0.0,
-      static_cast<RealType>(1.000000000000000e-004),
-      static_cast<RealType>(2.069138081114790e-004),
-      static_cast<RealType>(4.281332398719396e-004),
-      static_cast<RealType>(8.858667904100824e-004),
-      static_cast<RealType>(1.832980710832436e-003),
-      static_cast<RealType>(3.792690190732250e-003),
-      static_cast<RealType>(7.847599703514606e-003),
-      static_cast<RealType>(1.623776739188722e-002),
-      static_cast<RealType>(3.359818286283781e-002),
-      static_cast<RealType>(6.951927961775606e-002),
-      static_cast<RealType>(1.438449888287663e-001),
-      static_cast<RealType>(2.976351441631319e-001),
-      static_cast<RealType>(6.158482110660261e-001),
-      static_cast<RealType>(1.274274985703135e+000),
-      static_cast<RealType>(2.636650898730361e+000),
-      static_cast<RealType>(5.455594781168514e+000),
-      static_cast<RealType>(1.128837891684688e+001),
-      static_cast<RealType>(2.335721469090121e+001),
-      static_cast<RealType>(4.832930238571753e+001),
-      static_cast<RealType>(1.000000000000000e+002)
-    };
-
-    // 21 elements
-    static const RealType guess[] = {
-      0.0,
-      static_cast<RealType>(5.000050000525391e-005),
-      static_cast<RealType>(1.500015000148736e-004),
-      static_cast<RealType>(3.500035000350010e-004),
-      static_cast<RealType>(7.500075000752560e-004),
-      static_cast<RealType>(1.450014500145258e-003),
-      static_cast<RealType>(3.050030500305390e-003),
-      static_cast<RealType>(6.250062500624765e-003),
-      static_cast<RealType>(1.295012950129504e-002),
-      static_cast<RealType>(2.675026750267495e-002),
-      static_cast<RealType>(5.525055250552491e-002),
-      static_cast<RealType>(1.132511325113255e-001),
-      static_cast<RealType>(2.249522495224952e-001),
-      static_cast<RealType>(3.992539925399257e-001),
-      static_cast<RealType>(5.353553535535358e-001),
-      static_cast<RealType>(4.954549545495457e-001),
-      static_cast<RealType>(3.524535245352451e-001),
-      static_cast<RealType>(2.182521825218249e-001),
-      static_cast<RealType>(1.256512565125654e-001),
-      static_cast<RealType>(6.945069450694508e-002),
-      static_cast<RealType>(3.735037350373460e-002)
-    };
-
-    const RealType* result_ptr = std::lower_bound(shapes, shapes+21, shape);
-
-    typedef typename std::iterator_traits<RealType*>::difference_type diff_type;
-    
-    const diff_type d = std::distance(shapes, result_ptr);
-    
-    BOOST_ASSERT(d > static_cast<diff_type>(0));
-
-    // TODO: make the search bounds smarter, depending on the shape parameter
-    RealType search_min = 0; // below zero was caught above
-    RealType search_max = 0.55f; // will never go above 0.55
-
-    // refine
-    if(d < static_cast<diff_type>(21)) // shape smaller 100
-    {
-      // it is safe to assume that d > 0, because shape==0.0 is caught earlier
-      result = guess[d-static_cast<diff_type>(1)]
-        + (guess[d]-guess[d-static_cast<diff_type>(1)])/(shapes[d]-shapes[d-static_cast<diff_type>(1)])
-        * (shape-shapes[d-static_cast<diff_type>(1)]);
-    }
-    else // shape greater 100
-    {
-      result = 1e-4f;
-      search_max = guess[19]; // set 19 instead of 20 to have a safety margin because the table may not be exact @ shape=100
-    }
-    
-    const int get_digits = policies::digits<RealType, Policy>();// get digits from policy, 
-    boost::uintmax_t m = policies::get_max_root_iterations<Policy>(); // and max iterations.
-
-    skew_normal_distribution<RealType, Policy> helper(0, 1, shape);
-
-    result = tools::newton_raphson_iterate(detail::skew_normal_mode_functor<RealType, Policy>(helper), result,
-      search_min, search_max, get_digits, m);
-    
-    result = result*scale + location;
-
-    return result;
-  }
-  
-
-  
-  template <class RealType, class Policy>
-  inline RealType skewness(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    BOOST_MATH_STD_USING  // for ADL of std functions
-    using namespace boost::math::constants;
-
-    static const RealType factor = four_minus_pi<RealType>()/static_cast<RealType>(2);
-    const RealType delta = dist.shape() / sqrt(static_cast<RealType>(1)+dist.shape()*dist.shape());
-
-    return factor * pow(root_two_div_pi<RealType>() * delta, 3) /
-      pow(static_cast<RealType>(1)-two_div_pi<RealType>()*delta*delta, static_cast<RealType>(1.5));
-  }
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    return kurtosis_excess(dist)+static_cast<RealType>(3);
-  }
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis_excess(const skew_normal_distribution<RealType, Policy>& dist)
-  {
-    using namespace boost::math::constants;
-
-    static const RealType factor = pi_minus_three<RealType>()*static_cast<RealType>(2);
-
-    const RealType delta2 = static_cast<RealType>(1) / (static_cast<RealType>(1)+static_cast<RealType>(1)/(dist.shape()*dist.shape()));
-
-    const RealType x = static_cast<RealType>(1)-two_div_pi<RealType>()*delta2;
-    const RealType y = two_div_pi<RealType>() * delta2;
-
-    return factor * y*y / (x*x);
-  }
-
-  namespace detail
-  {
-
-    template <class RealType, class Policy>
-    struct skew_normal_quantile_functor
-    { 
-      skew_normal_quantile_functor(const boost::math::skew_normal_distribution<RealType, Policy> dist, RealType const& p)
-        : distribution(dist), prob(p)
-      {
-      }
-
-      boost::math::tuple<RealType, RealType> operator()(RealType const& x)
-      {
-        RealType c = cdf(distribution, x);
-        RealType fx = c - prob;  // Difference cdf - value - to minimize.
-        RealType dx = pdf(distribution, x); // pdf is 1st derivative.
-        // return both function evaluation difference f(x) and 1st derivative f'(x).
-        return boost::math::make_tuple(fx, dx);
-      }
-    private:
-      const boost::math::skew_normal_distribution<RealType, Policy> distribution;
-      RealType prob; 
-    };
-
-  } // namespace detail
-
-  template <class RealType, class Policy>
-  inline RealType quantile(const skew_normal_distribution<RealType, Policy>& dist, const RealType& p)
-  {
-    const RealType scale = dist.scale();
-    const RealType location = dist.location();
-    const RealType shape = dist.shape();
-
-    static const char* function = "boost::math::quantile(const skew_normal_distribution<%1%>&, %1%)";
-
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-    if(false == detail::check_location(function, location, &result, Policy()))
-      return result;
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-      return result;
-    if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-    // Compute initial guess via Cornish-Fisher expansion.
-    RealType x = -boost::math::erfc_inv(2 * p, Policy()) * constants::root_two<RealType>();
-
-    // Avoid unnecessary computations if there is no skew.
-    if(shape != 0)
-    {
-      const RealType skew = skewness(dist);
-      const RealType exk = kurtosis_excess(dist);
-
-      x = x + (x*x-static_cast<RealType>(1))*skew/static_cast<RealType>(6)
-      + x*(x*x-static_cast<RealType>(3))*exk/static_cast<RealType>(24)
-      - x*(static_cast<RealType>(2)*x*x-static_cast<RealType>(5))*skew*skew/static_cast<RealType>(36);
-    } // if(shape != 0)
-
-    result = standard_deviation(dist)*x+mean(dist);
-
-    // handle special case of non-skew normal distribution.
-    if(shape == 0)
-      return result;
-
-    // refine the result by numerically searching the root of (p-cdf)
-
-    const RealType search_min = range(dist).first;
-    const RealType search_max = range(dist).second;
-
-    const int get_digits = policies::digits<RealType, Policy>();// get digits from policy, 
-    boost::uintmax_t m = policies::get_max_root_iterations<Policy>(); // and max iterations.
-
-    result = tools::newton_raphson_iterate(detail::skew_normal_quantile_functor<RealType, Policy>(dist, p), result,
-      search_min, search_max, get_digits, m);
-
-    return result;
-  } // quantile
-
-  template <class RealType, class Policy>
-  inline RealType quantile(const complemented2_type<skew_normal_distribution<RealType, Policy>, RealType>& c)
-  {
-    const RealType scale = c.dist.scale();
-    const RealType location = c.dist.location();
-    const RealType shape = c.dist.shape();
-
-    static const char* function = "boost::math::quantile(const complement(skew_normal_distribution<%1%>&), %1%)";
-    RealType result = 0;
-    if(false == detail::check_scale(function, scale, &result, Policy()))
-      return result;
-    if(false == detail::check_location(function, location, &result, Policy()))
-      return result;
-    if(false == detail::check_skew_normal_shape(function, shape, &result, Policy()))
-      return result;
-    RealType q = c.param;
-    if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-    skew_normal_distribution<RealType, Policy> D(-location, scale, -shape);
-
-    result = -quantile(D, q);
-
-    return result;
-  } // quantile
-
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_SKEW_NORMAL_HPP
-
-
--- a/any/include/boost/math/distributions/students_t.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,493 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Copyright Paul A. Bristow 2006, 2012, 2017.
-//  Copyright Thomas Mang 2012.
-
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_STUDENTS_T_HPP
-#define BOOST_STATS_STUDENTS_T_HPP
-
-// http://en.wikipedia.org/wiki/Student%27s_t_distribution
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3664.htm
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/beta.hpp> // for ibeta(a, b, x).
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/normal.hpp> 
-
-#include <utility>
-
-#ifdef BOOST_MSVC
-# pragma warning(push)
-# pragma warning(disable: 4702) // unreachable code (return after domain_error throw).
-#endif
-
-namespace boost { namespace math {
-
-template <class RealType = double, class Policy = policies::policy<> >
-class students_t_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   students_t_distribution(RealType df) : df_(df)
-   { // Constructor.
-      RealType result;
-      detail::check_df_gt0_to_inf( // Checks that df > 0 or df == inf.
-         "boost::math::students_t_distribution<%1%>::students_t_distribution", df_, &result, Policy());
-   } // students_t_distribution
-
-   RealType degrees_of_freedom()const
-   {
-      return df_;
-   }
-
-   // Parameter estimation:
-   static RealType find_degrees_of_freedom(
-      RealType difference_from_mean,
-      RealType alpha,
-      RealType beta,
-      RealType sd,
-      RealType hint = 100);
-
-private:
-   // Data member:
-   RealType df_;  // degrees of freedom is a real number > 0 or +infinity.
-};
-
-typedef students_t_distribution<double> students_t; // Convenience typedef for double version.
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const students_t_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-  // Now including infinity.
-   using boost::math::tools::max_value;
-   //return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
-   return std::pair<RealType, RealType>(((::std::numeric_limits<RealType>::is_specialized & ::std::numeric_limits<RealType>::has_infinity) ? -std::numeric_limits<RealType>::infinity() : -max_value<RealType>()), ((::std::numeric_limits<RealType>::is_specialized & ::std::numeric_limits<RealType>::has_infinity) ? +std::numeric_limits<RealType>::infinity() : +max_value<RealType>()));
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const students_t_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-  // Now including infinity.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   //return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
-   return std::pair<RealType, RealType>(((::std::numeric_limits<RealType>::is_specialized & ::std::numeric_limits<RealType>::has_infinity) ? -std::numeric_limits<RealType>::infinity() : -max_value<RealType>()), ((::std::numeric_limits<RealType>::is_specialized & ::std::numeric_limits<RealType>::has_infinity) ? +std::numeric_limits<RealType>::infinity() : +max_value<RealType>()));
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const students_t_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_FPU_EXCEPTION_GUARD
-   BOOST_MATH_STD_USING  // for ADL of std functions.
-
-   RealType error_result;
-   if(false == detail::check_x_not_NaN(
-      "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", x, &error_result, Policy()))
-      return error_result;
-   RealType df = dist.degrees_of_freedom();
-   if(false == detail::check_df_gt0_to_inf( // Check that df > 0 or == +infinity.
-      "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", df, &error_result, Policy()))
-      return error_result;
-
-   RealType result;
-   if ((boost::math::isinf)(x))
-   { // - or +infinity.
-     result = static_cast<RealType>(0);
-     return result;
-   }
-   RealType limit = policies::get_epsilon<RealType, Policy>();
-   // Use policies so that if policy requests lower precision, 
-   // then get the normal distribution approximation earlier.
-   limit = static_cast<RealType>(1) / limit; // 1/eps
-   // for 64-bit double 1/eps = 4503599627370496
-   if (df > limit)
-   { // Special case for really big degrees_of_freedom > 1 / eps 
-     // - use normal distribution which is much faster and more accurate.
-     normal_distribution<RealType, Policy> n(0, 1); 
-     result = pdf(n, x);
-   }
-   else
-   { // 
-     RealType basem1 = x * x / df;
-     if(basem1 < 0.125)
-     {
-        result = exp(-boost::math::log1p(basem1, Policy()) * (1+df) / 2);
-     }
-     else
-     {
-        result = pow(1 / (1 + basem1), (df + 1) / 2);
-     }
-     result /= sqrt(df) * boost::math::beta(df / 2, RealType(0.5f), Policy());
-   }
-   return result;
-} // pdf
-
-template <class RealType, class Policy>
-inline RealType cdf(const students_t_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   RealType error_result;
-   // degrees_of_freedom > 0 or infinity check:
-   RealType df = dist.degrees_of_freedom();
-   if (false == detail::check_df_gt0_to_inf(  // Check that df > 0 or == +infinity.
-     "boost::math::cdf(const students_t_distribution<%1%>&, %1%)", df, &error_result, Policy()))
-   {
-     return error_result;
-   }
-   // Check for bad x first.
-   if(false == detail::check_x_not_NaN(
-      "boost::math::cdf(const students_t_distribution<%1%>&, %1%)", x, &error_result, Policy()))
-   { 
-      return error_result;
-   }
-   if (x == 0)
-   { // Special case with exact result.
-     return static_cast<RealType>(0.5);
-   }
-   if ((boost::math::isinf)(x))
-   { // x == - or + infinity, regardless of df.
-     return ((x < 0) ? static_cast<RealType>(0) : static_cast<RealType>(1));
-   }
-
-   RealType limit = policies::get_epsilon<RealType, Policy>();
-   // Use policies so that if policy requests lower precision, 
-   // then get the normal distribution approximation earlier.
-   limit = static_cast<RealType>(1) / limit; // 1/eps
-   // for 64-bit double 1/eps = 4503599627370496
-   if (df > limit)
-   { // Special case for really big degrees_of_freedom > 1 / eps (perhaps infinite?)
-     // - use normal distribution which is much faster and more accurate.
-     normal_distribution<RealType, Policy> n(0, 1); 
-     RealType result = cdf(n, x);
-     return result;
-   }
-   else
-   { // normal df case.
-     //
-     // Calculate probability of Student's t using the incomplete beta function.
-     // probability = ibeta(degrees_of_freedom / 2, 1/2, degrees_of_freedom / (degrees_of_freedom + t*t))
-     //
-     // However when t is small compared to the degrees of freedom, that formula
-     // suffers from rounding error, use the identity formula to work around
-     // the problem:
-     //
-     // I[x](a,b) = 1 - I[1-x](b,a)
-     //
-     // and:
-     //
-     //     x = df / (df + t^2)
-     //
-     // so:
-     //
-     // 1 - x = t^2 / (df + t^2)
-     //
-     RealType x2 = x * x;
-     RealType probability;
-     if(df > 2 * x2)
-     {
-        RealType z = x2 / (df + x2);
-        probability = ibetac(static_cast<RealType>(0.5), df / 2, z, Policy()) / 2;
-     }
-     else
-     {
-        RealType z = df / (df + x2);
-        probability = ibeta(df / 2, static_cast<RealType>(0.5), z, Policy()) / 2;
-     }
-     return (x > 0 ? 1   - probability : probability);
-  }
-} // cdf
-
-template <class RealType, class Policy>
-inline RealType quantile(const students_t_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING // for ADL of std functions
-   //
-   // Obtain parameters:
-   RealType probability = p;
- 
-   // Check for domain errors:
-   RealType df = dist.degrees_of_freedom();
-   static const char* function = "boost::math::quantile(const students_t_distribution<%1%>&, %1%)";
-   RealType error_result;
-   if(false == (detail::check_df_gt0_to_inf( // Check that df > 0 or == +infinity.
-      function, df, &error_result, Policy())
-         && detail::check_probability(function, probability, &error_result, Policy())))
-      return error_result;
-   // Special cases, regardless of degrees_of_freedom.
-   if (probability == 0)
-      return -policies::raise_overflow_error<RealType>(function, 0, Policy());
-   if (probability == 1)
-     return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   if (probability == static_cast<RealType>(0.5))
-     return 0;  //
-   //
-#if 0
-   // This next block is disabled in favour of a faster method than
-   // incomplete beta inverse, but code retained for future reference:
-   //
-   // Calculate quantile of Student's t using the incomplete beta function inverse:
-   probability = (probability > 0.5) ? 1 - probability : probability;
-   RealType t, x, y;
-   x = ibeta_inv(degrees_of_freedom / 2, RealType(0.5), 2 * probability, &y);
-   if(degrees_of_freedom * y > tools::max_value<RealType>() * x)
-      t = tools::overflow_error<RealType>(function);
-   else
-      t = sqrt(degrees_of_freedom * y / x);
-   //
-   // Figure out sign based on the size of p:
-   //
-   if(p < 0.5)
-      t = -t;
-
-   return t;
-#endif
-   //
-   // Depending on how many digits RealType has, this may forward
-   // to the incomplete beta inverse as above.  Otherwise uses a
-   // faster method that is accurate to ~15 digits everywhere
-   // and a couple of epsilon at double precision and in the central 
-   // region where most use cases will occur...
-   //
-   return boost::math::detail::fast_students_t_quantile(df, probability, Policy());
-} // quantile
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<students_t_distribution<RealType, Policy>, RealType>& c)
-{
-   return cdf(c.dist, -c.param);
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<students_t_distribution<RealType, Policy>, RealType>& c)
-{
-   return -quantile(c.dist, c.param);
-}
-
-//
-// Parameter estimation follows:
-//
-namespace detail{
-//
-// Functors for finding degrees of freedom:
-//
-template <class RealType, class Policy>
-struct sample_size_func
-{
-   sample_size_func(RealType a, RealType b, RealType s, RealType d)
-      : alpha(a), beta(b), ratio(s*s/(d*d)) {}
-
-   RealType operator()(const RealType& df)
-   {
-      if(df <= tools::min_value<RealType>())
-      { // 
-         return 1;
-      }
-      students_t_distribution<RealType, Policy> t(df);
-      RealType qa = quantile(complement(t, alpha));
-      RealType qb = quantile(complement(t, beta));
-      qa += qb;
-      qa *= qa;
-      qa *= ratio;
-      qa -= (df + 1);
-      return qa;
-   }
-   RealType alpha, beta, ratio;
-};
-
-}  // namespace detail
-
-template <class RealType, class Policy>
-RealType students_t_distribution<RealType, Policy>::find_degrees_of_freedom(
-      RealType difference_from_mean,
-      RealType alpha,
-      RealType beta,
-      RealType sd,
-      RealType hint)
-{
-   static const char* function = "boost::math::students_t_distribution<%1%>::find_degrees_of_freedom";
-   //
-   // Check for domain errors:
-   //
-   RealType error_result;
-   if(false == detail::check_probability(
-      function, alpha, &error_result, Policy())
-         && detail::check_probability(function, beta, &error_result, Policy()))
-      return error_result;
-
-   if(hint <= 0)
-      hint = 1;
-
-   detail::sample_size_func<RealType, Policy> f(alpha, beta, sd, difference_from_mean);
-   tools::eps_tolerance<RealType> tol(policies::digits<RealType, Policy>());
-   boost::uintmax_t max_iter = policies::get_max_root_iterations<Policy>();
-   std::pair<RealType, RealType> r = tools::bracket_and_solve_root(f, hint, RealType(2), false, tol, max_iter, Policy());
-   RealType result = r.first + (r.second - r.first) / 2;
-   if(max_iter >= policies::get_max_root_iterations<Policy>())
-   {
-      return policies::raise_evaluation_error<RealType>(function, "Unable to locate solution in a reasonable time:"
-         " either there is no answer to how many degrees of freedom are required"
-         " or the answer is infinite.  Current best guess is %1%", result, Policy());
-   }
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const students_t_distribution<RealType, Policy>& /*dist*/)
-{
-  // Assume no checks on degrees of freedom are useful (unlike mean).
-   return 0; // Always zero by definition.
-}
-
-template <class RealType, class Policy>
-inline RealType median(const students_t_distribution<RealType, Policy>& /*dist*/)
-{
-   // Assume no checks on degrees of freedom are useful (unlike mean).
-   return 0; // Always zero by definition.
-}
-
-// See section 5.1 on moments at  http://en.wikipedia.org/wiki/Student%27s_t-distribution
-
-template <class RealType, class Policy>
-inline RealType mean(const students_t_distribution<RealType, Policy>& dist)
-{  // Revised for https://svn.boost.org/trac/boost/ticket/7177
-   RealType df = dist.degrees_of_freedom();
-   if(((boost::math::isnan)(df)) || (df <= 1) ) 
-   { // mean is undefined for moment <= 1!
-      return policies::raise_domain_error<RealType>(
-      "boost::math::mean(students_t_distribution<%1%> const&, %1%)",
-      "Mean is undefined for degrees of freedom < 1 but got %1%.", df, Policy());
-      return std::numeric_limits<RealType>::quiet_NaN();
-   }
-   return 0;
-} // mean
-
-template <class RealType, class Policy>
-inline RealType variance(const students_t_distribution<RealType, Policy>& dist)
-{ // http://en.wikipedia.org/wiki/Student%27s_t-distribution
-  // Revised for https://svn.boost.org/trac/boost/ticket/7177
-  RealType df = dist.degrees_of_freedom();
-  if ((boost::math::isnan)(df) || (df <= 2))
-  { // NaN or undefined for <= 2.
-     return policies::raise_domain_error<RealType>(
-      "boost::math::variance(students_t_distribution<%1%> const&, %1%)",
-      "variance is undefined for degrees of freedom <= 2, but got %1%.",
-      df, Policy());
-    return std::numeric_limits<RealType>::quiet_NaN(); // Undefined.
-  }
-  if ((boost::math::isinf)(df))
-  { // +infinity.
-    return 1;
-  }
-  RealType limit = policies::get_epsilon<RealType, Policy>();
-  // Use policies so that if policy requests lower precision, 
-  // then get the normal distribution approximation earlier.
-  limit = static_cast<RealType>(1) / limit; // 1/eps
-  // for 64-bit double 1/eps = 4503599627370496
-  if (df > limit)
-  { // Special case for really big degrees_of_freedom > 1 / eps.
-    return 1;
-  }
-  else
-  {
-    return df / (df - 2);
-  }
-} // variance
-
-template <class RealType, class Policy>
-inline RealType skewness(const students_t_distribution<RealType, Policy>& dist)
-{
-    RealType df = dist.degrees_of_freedom();
-   if( ((boost::math::isnan)(df)) || (dist.degrees_of_freedom() <= 3))
-   { // Undefined for moment k = 3.
-      return policies::raise_domain_error<RealType>(
-         "boost::math::skewness(students_t_distribution<%1%> const&, %1%)",
-         "Skewness is undefined for degrees of freedom <= 3, but got %1%.",
-         dist.degrees_of_freedom(), Policy());
-      return std::numeric_limits<RealType>::quiet_NaN();
-   }
-   return 0; // For all valid df, including infinity.
-} // skewness
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const students_t_distribution<RealType, Policy>& dist)
-{
-   RealType df = dist.degrees_of_freedom();
-   if(((boost::math::isnan)(df)) || (df <= 4))
-   { // Undefined or infinity for moment k = 4.
-      return policies::raise_domain_error<RealType>(
-       "boost::math::kurtosis(students_t_distribution<%1%> const&, %1%)",
-       "Kurtosis is undefined for degrees of freedom <= 4, but got %1%.",
-        df, Policy());
-        return std::numeric_limits<RealType>::quiet_NaN(); // Undefined.
-   }
-   if ((boost::math::isinf)(df))
-   { // +infinity.
-     return 3;
-   }
-   RealType limit = policies::get_epsilon<RealType, Policy>();
-   // Use policies so that if policy requests lower precision, 
-   // then get the normal distribution approximation earlier.
-   limit = static_cast<RealType>(1) / limit; // 1/eps
-   // for 64-bit double 1/eps = 4503599627370496
-   if (df > limit)
-   { // Special case for really big degrees_of_freedom > 1 / eps.
-     return 3;
-   }
-   else
-   {
-     //return 3 * (df - 2) / (df - 4); re-arranged to
-     return 6 / (df - 4) + 3;
-   }
-} // kurtosis
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const students_t_distribution<RealType, Policy>& dist)
-{
-   // see http://mathworld.wolfram.com/Kurtosis.html
-
-   RealType df = dist.degrees_of_freedom();
-   if(((boost::math::isnan)(df)) || (df <= 4))
-   { // Undefined or infinity for moment k = 4.
-     return policies::raise_domain_error<RealType>(
-       "boost::math::kurtosis_excess(students_t_distribution<%1%> const&, %1%)",
-       "Kurtosis_excess is undefined for degrees of freedom <= 4, but got %1%.",
-      df, Policy());
-     return std::numeric_limits<RealType>::quiet_NaN(); // Undefined.
-   }
-   if ((boost::math::isinf)(df))
-   { // +infinity.
-     return 0;
-   }
-   RealType limit = policies::get_epsilon<RealType, Policy>();
-   // Use policies so that if policy requests lower precision, 
-   // then get the normal distribution approximation earlier.
-   limit = static_cast<RealType>(1) / limit; // 1/eps
-   // for 64-bit double 1/eps = 4503599627370496
-   if (df > limit)
-   { // Special case for really big degrees_of_freedom > 1 / eps.
-     return 0;
-   }
-   else
-   {
-     return 6 / (df - 4);
-   }
-}
-
-} // namespace math
-} // namespace boost
-
-#ifdef BOOST_MSVC
-# pragma warning(pop)
-#endif
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_STUDENTS_T_HPP
--- a/any/include/boost/math/distributions/triangular.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,531 +0,0 @@
-//  Copyright John Maddock 2006, 2007.
-//  Copyright Paul A. Bristow 2006, 2007.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_TRIANGULAR_HPP
-#define BOOST_STATS_TRIANGULAR_HPP
-
-// http://mathworld.wolfram.com/TriangularDistribution.html
-// Note that the 'constructors' defined by Wolfram are difference from those here,
-// for example
-// N[variance[triangulardistribution{1, +2}, 1.5], 50] computes 
-// 0.041666666666666666666666666666666666666666666666667
-// TriangularDistribution{1, +2}, 1.5 is the analog of triangular_distribution(1, 1.5, 2)
-
-// http://en.wikipedia.org/wiki/Triangular_distribution
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-#include <boost/math/constants/constants.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-  namespace detail
-  {
-    template <class RealType, class Policy>
-    inline bool check_triangular_lower(
-      const char* function,
-      RealType lower,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(lower))
-      { // Any finite value is OK.
-        return true;
-      }
-      else
-      { // Not finite: infinity or NaN.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "Lower parameter is %1%, but must be finite!", lower, pol);
-        return false;
-      }
-    } // bool check_triangular_lower(
-
-    template <class RealType, class Policy>
-    inline bool check_triangular_mode(
-      const char* function,
-      RealType mode,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(mode))
-      { // any finite value is OK.
-        return true;
-      }
-      else
-      { // Not finite: infinity or NaN.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "Mode parameter is %1%, but must be finite!", mode, pol);
-        return false;
-      }
-    } // bool check_triangular_mode(
-
-    template <class RealType, class Policy>
-    inline bool check_triangular_upper(
-      const char* function,
-      RealType upper,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(upper))
-      { // any finite value is OK.
-        return true;
-      }
-      else
-      { // Not finite: infinity or NaN.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "Upper parameter is %1%, but must be finite!", upper, pol);
-        return false;
-      }
-    } // bool check_triangular_upper(
-
-    template <class RealType, class Policy>
-    inline bool check_triangular_x(
-      const char* function,
-      RealType const& x,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(x))
-      { // Any finite value is OK
-        return true;
-      }
-      else
-      { // Not finite: infinity or NaN.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "x parameter is %1%, but must be finite!", x, pol);
-        return false;
-      }
-    } // bool check_triangular_x
-
-    template <class RealType, class Policy>
-    inline bool check_triangular(
-      const char* function,
-      RealType lower,
-      RealType mode,
-      RealType upper,
-      RealType* result, const Policy& pol)
-    {
-      if ((check_triangular_lower(function, lower, result, pol) == false)
-        || (check_triangular_mode(function, mode, result, pol) == false)
-        || (check_triangular_upper(function, upper, result, pol) == false))
-      { // Some parameter not finite.
-        return false;
-      }
-      else if (lower >= upper) // lower == upper NOT useful.
-      { // lower >= upper.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "lower parameter is %1%, but must be less than upper!", lower, pol);
-        return false;
-      }
-      else
-      { // Check lower <= mode <= upper.
-        if (mode < lower)
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "mode parameter is %1%, but must be >= than lower!", lower, pol);
-          return false;
-        }
-        if (mode > upper)
-        {
-          *result = policies::raise_domain_error<RealType>(
-            function,
-            "mode parameter is %1%, but must be <= than upper!", upper, pol);
-          return false;
-        }
-        return true; // All OK.
-      }
-    } // bool check_triangular
-  } // namespace detail
-
-  template <class RealType = double, class Policy = policies::policy<> >
-  class triangular_distribution
-  {
-  public:
-    typedef RealType value_type;
-    typedef Policy policy_type;
-
-    triangular_distribution(RealType l_lower = -1, RealType l_mode = 0, RealType l_upper = 1)
-      : m_lower(l_lower), m_mode(l_mode), m_upper(l_upper) // Constructor.
-    { // Evans says 'standard triangular' is lower 0, mode 1/2, upper 1,
-      // has median sqrt(c/2) for c <=1/2 and 1 - sqrt(1-c)/2 for c >= 1/2
-      // But this -1, 0, 1 is more useful in most applications to approximate normal distribution,
-      // where the central value is the most likely and deviations either side equally likely.
-      RealType result;
-      detail::check_triangular("boost::math::triangular_distribution<%1%>::triangular_distribution",l_lower, l_mode, l_upper, &result, Policy());
-    }
-    // Accessor functions.
-    RealType lower()const
-    {
-      return m_lower;
-    }
-    RealType mode()const
-    {
-      return m_mode;
-    }
-    RealType upper()const
-    {
-      return m_upper;
-    }
-  private:
-    // Data members:
-    RealType m_lower;  // distribution lower aka a
-    RealType m_mode;  // distribution mode aka c
-    RealType m_upper;  // distribution upper aka b
-  }; // class triangular_distribution
-
-  typedef triangular_distribution<double> triangular;
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> range(const triangular_distribution<RealType, Policy>& /* dist */)
-  { // Range of permissible values for random variable x.
-    using boost::math::tools::max_value;
-    return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>());
-  }
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> support(const triangular_distribution<RealType, Policy>& dist)
-  { // Range of supported values for random variable x.
-    // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-    return std::pair<RealType, RealType>(dist.lower(), dist.upper());
-  }
-
-  template <class RealType, class Policy>
-  RealType pdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    static const char* function = "boost::math::pdf(const triangular_distribution<%1%>&, %1%)";
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_triangular_x(function, x, &result, Policy()))
-    {
-      return result;
-    }
-    if((x < lower) || (x > upper))
-    {
-      return 0;
-    }
-    if (x == lower)
-    { // (mode - lower) == 0 which would lead to divide by zero!
-      return (mode == lower) ? 2 / (upper - lower) : RealType(0);
-    }
-    else if (x == upper)
-    {
-      return (mode == upper) ? 2 / (upper - lower) : RealType(0);
-    }
-    else if (x <= mode)
-    {
-      return 2 * (x - lower) / ((upper - lower) * (mode - lower));
-    }
-    else
-    {  // (x > mode)
-      return 2 * (upper - x) / ((upper - lower) * (upper - mode));
-    }
-  } // RealType pdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
-
-  template <class RealType, class Policy>
-  inline RealType cdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    static const char* function = "boost::math::cdf(const triangular_distribution<%1%>&, %1%)";
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_triangular_x(function, x, &result, Policy()))
-    {
-      return result;
-    }
-    if((x <= lower))
-    {
-      return 0;
-    }
-    if (x >= upper)
-    {
-      return 1;
-    }
-    // else lower < x < upper
-    if (x <= mode)
-    {
-      return ((x - lower) * (x - lower)) / ((upper - lower) * (mode - lower));
-    }
-    else
-    {
-      return 1 - (upper - x) *  (upper - x) / ((upper - lower) * (upper - mode));
-    }
-  } // RealType cdf(const triangular_distribution<RealType, Policy>& dist, const RealType& x)
-
-  template <class RealType, class Policy>
-  RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& p)
-  {
-    BOOST_MATH_STD_USING  // for ADL of std functions (sqrt).
-    static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks
-    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_probability(function, p, &result, Policy()))
-    {
-      return result;
-    }
-    if(p == 0)
-    {
-      return lower;
-    }
-    if(p == 1)
-    {
-      return upper;
-    }
-    RealType p0 = (mode - lower) / (upper - lower);
-    RealType q = 1 - p;
-    if (p < p0)
-    {
-      result = sqrt((upper - lower) * (mode - lower) * p) + lower;
-    }
-    else if (p == p0)
-    {
-      result = mode;
-    }
-    else // p > p0
-    {
-      result = upper - sqrt((upper - lower) * (upper - mode) * q);
-    }
-    return result;
-
-  } // RealType quantile(const triangular_distribution<RealType, Policy>& dist, const RealType& q)
-
-  template <class RealType, class Policy>
-  RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
-  {
-    static const char* function = "boost::math::cdf(const triangular_distribution<%1%>&, %1%)";
-    RealType lower = c.dist.lower();
-    RealType mode = c.dist.mode();
-    RealType upper = c.dist.upper();
-    RealType x = c.param;
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_triangular_x(function, x, &result, Policy()))
-    {
-      return result;
-    }
-    if (x <= lower)
-    {
-      return 1;
-    }
-    if (x >= upper)
-    {
-      return 0;
-    }
-    if (x <= mode)
-    {
-      return 1 - ((x - lower) * (x - lower)) / ((upper - lower) * (mode - lower));
-    }
-    else
-    {
-      return (upper - x) *  (upper - x) / ((upper - lower) * (upper - mode));
-    }
-  } // RealType cdf(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
-
-  template <class RealType, class Policy>
-  RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
-  {
-    BOOST_MATH_STD_USING  // Aid ADL for sqrt.
-    static const char* function = "boost::math::quantile(const triangular_distribution<%1%>&, %1%)";
-    RealType l = c.dist.lower();
-    RealType m = c.dist.mode();
-    RealType u = c.dist.upper();
-    RealType q = c.param; // probability 0 to 1.
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular(function, l, m, u, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_probability(function, q, &result, Policy()))
-    {
-      return result;
-    }
-    if(q == 0)
-    {
-      return u;
-    }
-    if(q == 1)
-    {
-      return l;
-    }
-    RealType lower = c.dist.lower();
-    RealType mode = c.dist.mode();
-    RealType upper = c.dist.upper();
-
-    RealType p = 1 - q;
-    RealType p0 = (mode - lower) / (upper - lower);
-    if(p < p0)
-    {
-      RealType s = (upper - lower) * (mode - lower);
-      s *= p;
-      result = sqrt((upper - lower) * (mode - lower) * p) + lower;
-    }
-    else if (p == p0)
-    {
-      result = mode;
-    }
-    else // p > p0
-    {
-      result = upper - sqrt((upper - lower) * (upper - mode) * q);
-    }
-    return result;
-  } // RealType quantile(const complemented2_type<triangular_distribution<RealType, Policy>, RealType>& c)
-
-  template <class RealType, class Policy>
-  inline RealType mean(const triangular_distribution<RealType, Policy>& dist)
-  {
-    static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0;  // of checks.
-    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return (lower + upper + mode) / 3;
-  } // RealType mean(const triangular_distribution<RealType, Policy>& dist)
-
-
-  template <class RealType, class Policy>
-  inline RealType variance(const triangular_distribution<RealType, Policy>& dist)
-  {
-    static const char* function = "boost::math::mean(const triangular_distribution<%1%>&)";
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular(function, lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return (lower * lower + upper * upper + mode * mode - lower * upper - lower * mode - upper * mode) / 18;
-  } // RealType variance(const triangular_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType mode(const triangular_distribution<RealType, Policy>& dist)
-  {
-    static const char* function = "boost::math::mode(const triangular_distribution<%1%>&)";
-    RealType mode = dist.mode();
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular_mode(function, mode, &result, Policy()))
-    { // This should never happen!
-      return result;
-    }
-    return mode;
-  } // RealType mode
-
-  template <class RealType, class Policy>
-  inline RealType median(const triangular_distribution<RealType, Policy>& dist)
-  {
-    BOOST_MATH_STD_USING // ADL of std functions.
-    static const char* function = "boost::math::median(const triangular_distribution<%1%>&)";
-    RealType mode = dist.mode();
-    RealType result = 0; // of checks.
-    if(false == detail::check_triangular_mode(function, mode, &result, Policy()))
-    { // This should never happen!
-      return result;
-    }
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    if (mode >= (upper + lower) / 2)
-    {
-      return lower + sqrt((upper - lower) * (mode - lower)) / constants::root_two<RealType>();
-    }
-    else
-    {
-      return upper - sqrt((upper - lower) * (upper - mode)) / constants::root_two<RealType>();
-    }
-  } // RealType mode
-
-  template <class RealType, class Policy>
-  inline RealType skewness(const triangular_distribution<RealType, Policy>& dist)
-  {
-    BOOST_MATH_STD_USING  // for ADL of std functions
-    using namespace boost::math::constants; // for root_two
-    static const char* function = "boost::math::skewness(const triangular_distribution<%1%>&)";
-
-    RealType lower = dist.lower();
-    RealType mode = dist.mode();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == boost::math::detail::check_triangular(function,lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return root_two<RealType>() * (lower + upper - 2 * mode) * (2 * lower - upper - mode) * (lower - 2 * upper + mode) /
-      (5 * pow((lower * lower + upper * upper + mode * mode 
-        - lower * upper - lower * mode - upper * mode), RealType(3)/RealType(2)));
-    // #11768: Skewness formula for triangular distribution is incorrect -  corrected 29 Oct 2015 for release 1.61.
-  } // RealType skewness(const triangular_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis(const triangular_distribution<RealType, Policy>& dist)
-  { // These checks may be belt and braces as should have been checked on construction?
-    static const char* function = "boost::math::kurtosis(const triangular_distribution<%1%>&)";
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType mode = dist.mode();
-    RealType result = 0;  // of checks.
-    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return static_cast<RealType>(12)/5; //  12/5 = 2.4;
-  } // RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis_excess(const triangular_distribution<RealType, Policy>& dist)
-  { // These checks may be belt and braces as should have been checked on construction?
-    static const char* function = "boost::math::kurtosis_excess(const triangular_distribution<%1%>&)";
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType mode = dist.mode();
-    RealType result = 0;  // of checks.
-    if(false == detail::check_triangular(function,lower, mode, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return static_cast<RealType>(-3)/5; // - 3/5 = -0.6
-    // Assuming mathworld really means kurtosis excess?  Wikipedia now corrected to match this.
-  }
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_TRIANGULAR_HPP
-
-
-
--- a/any/include/boost/math/distributions/uniform.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,382 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Copyright Paul A. Bristow 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-// TODO deal with infinity as special better - or remove.
-//
-
-#ifndef BOOST_STATS_UNIFORM_HPP
-#define BOOST_STATS_UNIFORM_HPP
-
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3668.htm
-// http://mathworld.wolfram.com/UniformDistribution.html
-// http://documents.wolfram.com/calculationcenter/v2/Functions/ListsMatrices/Statistics/UniformDistribution.html
-// http://en.wikipedia.org/wiki/Uniform_distribution_%28continuous%29
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-  namespace detail
-  {
-    template <class RealType, class Policy>
-    inline bool check_uniform_lower(
-      const char* function,
-      RealType lower,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(lower))
-      { // any finite value is OK.
-        return true;
-      }
-      else
-      { // Not finite.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "Lower parameter is %1%, but must be finite!", lower, pol);
-        return false;
-      }
-    } // bool check_uniform_lower(
-
-    template <class RealType, class Policy>
-    inline bool check_uniform_upper(
-      const char* function,
-      RealType upper,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(upper))
-      { // Any finite value is OK.
-        return true;
-      }
-      else
-      { // Not finite.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "Upper parameter is %1%, but must be finite!", upper, pol);
-        return false;
-      }
-    } // bool check_uniform_upper(
-
-    template <class RealType, class Policy>
-    inline bool check_uniform_x(
-      const char* function,
-      RealType const& x,
-      RealType* result, const Policy& pol)
-    {
-      if((boost::math::isfinite)(x))
-      { // Any finite value is OK
-        return true;
-      }
-      else
-      { // Not finite..
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "x parameter is %1%, but must be finite!", x, pol);
-        return false;
-      }
-    } // bool check_uniform_x
-
-    template <class RealType, class Policy>
-    inline bool check_uniform(
-      const char* function,
-      RealType lower,
-      RealType upper,
-      RealType* result, const Policy& pol)
-    {
-      if((check_uniform_lower(function, lower, result, pol) == false)
-        || (check_uniform_upper(function, upper, result, pol) == false))
-      {
-        return false;
-      }
-      else if (lower >= upper) // If lower == upper then 1 / (upper-lower) = 1/0 = +infinity!
-      { // upper and lower have been checked before, so must be lower >= upper.
-        *result = policies::raise_domain_error<RealType>(
-          function,
-          "lower parameter is %1%, but must be less than upper!", lower, pol);
-        return false;
-      }
-      else
-      { // All OK,
-        return true;
-      }
-    } // bool check_uniform(
-
-  } // namespace detail
-
-  template <class RealType = double, class Policy = policies::policy<> >
-  class uniform_distribution
-  {
-  public:
-    typedef RealType value_type;
-    typedef Policy policy_type;
-
-    uniform_distribution(RealType l_lower = 0, RealType l_upper = 1) // Constructor.
-      : m_lower(l_lower), m_upper(l_upper) // Default is standard uniform distribution.
-    {
-      RealType result;
-      detail::check_uniform("boost::math::uniform_distribution<%1%>::uniform_distribution", l_lower, l_upper, &result, Policy());
-    }
-    // Accessor functions.
-    RealType lower()const
-    {
-      return m_lower;
-    }
-
-    RealType upper()const
-    {
-      return m_upper;
-    }
-  private:
-    // Data members:
-    RealType m_lower;  // distribution lower aka a.
-    RealType m_upper;  // distribution upper aka b.
-  }; // class uniform_distribution
-
-  typedef uniform_distribution<double> uniform;
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> range(const uniform_distribution<RealType, Policy>& /* dist */)
-  { // Range of permissible values for random variable x.
-     using boost::math::tools::max_value;
-     return std::pair<RealType, RealType>(-max_value<RealType>(), max_value<RealType>()); // - to + 'infinity'.
-     // Note RealType infinity is NOT permitted, only max_value.
-  }
-
-  template <class RealType, class Policy>
-  inline const std::pair<RealType, RealType> support(const uniform_distribution<RealType, Policy>& dist)
-  { // Range of supported values for random variable x.
-     // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-     using boost::math::tools::max_value;
-     return std::pair<RealType, RealType>(dist.lower(),  dist.upper());
-  }
-
-  template <class RealType, class Policy>
-  inline RealType pdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::pdf(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_uniform_x("boost::math::pdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
-    {
-      return result;
-    }
-
-    if((x < lower) || (x > upper) )
-    {
-      return 0;
-    }
-    else
-    {
-      return 1 / (upper - lower);
-    }
-  } // RealType pdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
-
-  template <class RealType, class Policy>
-  inline RealType cdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::cdf(const uniform_distribution<%1%>&, %1%)",lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_uniform_x("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
-    {
-      return result;
-    }
-    if (x < lower)
-    {
-      return 0;
-    }
-    if (x > upper)
-    {
-      return 1;
-    }
-    return (x - lower) / (upper - lower); // lower <= x <= upper
-  } // RealType cdf(const uniform_distribution<RealType, Policy>& dist, const RealType& x)
-
-  template <class RealType, class Policy>
-  inline RealType quantile(const uniform_distribution<RealType, Policy>& dist, const RealType& p)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks
-    if(false == detail::check_uniform("boost::math::quantile(const uniform_distribution<%1%>&, %1%)",lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_probability("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", p, &result, Policy()))
-    {
-      return result;
-    }
-    if(p == 0)
-    {
-      return lower;
-    }
-    if(p == 1)
-    {
-      return upper;
-    }
-    return p * (upper - lower) + lower;
-  } // RealType quantile(const uniform_distribution<RealType, Policy>& dist, const RealType& p)
-
-  template <class RealType, class Policy>
-  inline RealType cdf(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
-  {
-    RealType lower = c.dist.lower();
-    RealType upper = c.dist.upper();
-    RealType x = c.param;
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_uniform_x("boost::math::cdf(const uniform_distribution<%1%>&, %1%)", x, &result, Policy()))
-    {
-      return result;
-    }
-    if (x < lower)
-    {
-      return 1;
-    }
-    if (x > upper)
-    {
-      return 0;
-    }
-    return (upper - x) / (upper - lower);
-  } // RealType cdf(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
-
-  template <class RealType, class Policy>
-  inline RealType quantile(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
-  {
-    RealType lower = c.dist.lower();
-    RealType upper = c.dist.upper();
-    RealType q = c.param;
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    if(false == detail::check_probability("boost::math::quantile(const uniform_distribution<%1%>&, %1%)", q, &result, Policy()))
-    {
-       return result;
-    }
-    if(q == 0)
-    {
-       return upper;
-    }
-    if(q == 1)
-    {
-       return lower;
-    }
-    return -q * (upper - lower) + upper;
-  } // RealType quantile(const complemented2_type<uniform_distribution<RealType, Policy>, RealType>& c)
-
-  template <class RealType, class Policy>
-  inline RealType mean(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0;  // of checks.
-    if(false == detail::check_uniform("boost::math::mean(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return (lower + upper ) / 2;
-  } // RealType mean(const uniform_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType variance(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::variance(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return (upper - lower) * ( upper - lower) / 12;
-    // for standard uniform = 0.833333333333333333333333333333333333333333;
-  } // RealType variance(const uniform_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType mode(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::mode(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    result = lower; // Any value [lower, upper] but arbitrarily choose lower.
-    return result;
-  }
-
-  template <class RealType, class Policy>
-  inline RealType median(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::median(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return (lower + upper) / 2; //
-  }
-  template <class RealType, class Policy>
-  inline RealType skewness(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0; // of checks.
-    if(false == detail::check_uniform("boost::math::skewness(const uniform_distribution<%1%>&)",lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return 0;
-  } // RealType skewness(const uniform_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis_excess(const uniform_distribution<RealType, Policy>& dist)
-  {
-    RealType lower = dist.lower();
-    RealType upper = dist.upper();
-    RealType result = 0;  // of checks.
-    if(false == detail::check_uniform("boost::math::kurtosis_execess(const uniform_distribution<%1%>&)", lower, upper, &result, Policy()))
-    {
-      return result;
-    }
-    return static_cast<RealType>(-6)/5; //  -6/5 = -1.2;
-  } // RealType kurtosis_excess(const uniform_distribution<RealType, Policy>& dist)
-
-  template <class RealType, class Policy>
-  inline RealType kurtosis(const uniform_distribution<RealType, Policy>& dist)
-  {
-    return kurtosis_excess(dist) + 3;
-  }
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_UNIFORM_HPP
-
-
-
--- a/any/include/boost/math/distributions/weibull.hpp	Sat Feb 16 16:31:25 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,395 +0,0 @@
-//  Copyright John Maddock 2006.
-//  Use, modification and distribution are subject to the
-//  Boost Software License, Version 1.0. (See accompanying file
-//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_STATS_WEIBULL_HPP
-#define BOOST_STATS_WEIBULL_HPP
-
-// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3668.htm
-// http://mathworld.wolfram.com/WeibullDistribution.html
-
-#include <boost/math/distributions/fwd.hpp>
-#include <boost/math/special_functions/gamma.hpp>
-#include <boost/math/special_functions/log1p.hpp>
-#include <boost/math/special_functions/expm1.hpp>
-#include <boost/math/distributions/detail/common_error_handling.hpp>
-#include <boost/math/distributions/complement.hpp>
-
-#include <utility>
-
-namespace boost{ namespace math
-{
-namespace detail{
-
-template <class RealType, class Policy>
-inline bool check_weibull_shape(
-      const char* function,
-      RealType shape,
-      RealType* result, const Policy& pol)
-{
-   if((shape <= 0) || !(boost::math::isfinite)(shape))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Shape parameter is %1%, but must be > 0 !", shape, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_weibull_x(
-      const char* function,
-      RealType const& x,
-      RealType* result, const Policy& pol)
-{
-   if((x < 0) || !(boost::math::isfinite)(x))
-   {
-      *result = policies::raise_domain_error<RealType>(
-         function,
-         "Random variate is %1% but must be >= 0 !", x, pol);
-      return false;
-   }
-   return true;
-}
-
-template <class RealType, class Policy>
-inline bool check_weibull(
-      const char* function,
-      RealType scale,
-      RealType shape,
-      RealType* result, const Policy& pol)
-{
-   return check_scale(function, scale, result, pol) && check_weibull_shape(function, shape, result, pol);
-}
-
-} // namespace detail
-
-template <class RealType = double, class Policy = policies::policy<> >
-class weibull_distribution
-{
-public:
-   typedef RealType value_type;
-   typedef Policy policy_type;
-
-   weibull_distribution(RealType l_shape, RealType l_scale = 1)
-      : m_shape(l_shape), m_scale(l_scale)
-   {
-      RealType result;
-      detail::check_weibull("boost::math::weibull_distribution<%1%>::weibull_distribution", l_scale, l_shape, &result, Policy());
-   }
-
-   RealType shape()const
-   {
-      return m_shape;
-   }
-
-   RealType scale()const
-   {
-      return m_scale;
-   }
-private:
-   //
-   // Data members:
-   //
-   RealType m_shape;     // distribution shape
-   RealType m_scale;     // distribution scale
-};
-
-typedef weibull_distribution<double> weibull;
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> range(const weibull_distribution<RealType, Policy>& /*dist*/)
-{ // Range of permissible values for random variable x.
-   using boost::math::tools::max_value;
-   return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
-}
-
-template <class RealType, class Policy>
-inline const std::pair<RealType, RealType> support(const weibull_distribution<RealType, Policy>& /*dist*/)
-{ // Range of supported values for random variable x.
-   // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
-   using boost::math::tools::max_value;
-   using boost::math::tools::min_value;
-   return std::pair<RealType, RealType>(min_value<RealType>(),  max_value<RealType>());
-   // A discontinuity at x == 0, so only support down to min_value.
-}
-
-template <class RealType, class Policy>
-inline RealType pdf(const weibull_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::pdf(const weibull_distribution<%1%>, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_weibull_x(function, x, &result, Policy()))
-      return result;
-
-   if(x == 0)
-   {
-      if(shape == 1)
-      {
-         return 1 / scale;
-      }
-      if(shape > 1)
-      {
-         return 0;
-      }
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-   }
-   result = exp(-pow(x / scale, shape));
-   result *= pow(x / scale, shape - 1) * shape / scale;
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const weibull_distribution<RealType, Policy>& dist, const RealType& x)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const weibull_distribution<%1%>, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_weibull_x(function, x, &result, Policy()))
-      return result;
-
-   result = -boost::math::expm1(-pow(x / scale, shape), Policy());
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const weibull_distribution<RealType, Policy>& dist, const RealType& p)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const weibull_distribution<%1%>, %1%)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, p, &result, Policy()))
-      return result;
-
-   if(p == 1)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = scale * pow(-boost::math::log1p(-p, Policy()), 1 / shape);
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType cdf(const complemented2_type<weibull_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::cdf(const weibull_distribution<%1%>, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_weibull_x(function, c.param, &result, Policy()))
-      return result;
-
-   result = exp(-pow(c.param / scale, shape));
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType quantile(const complemented2_type<weibull_distribution<RealType, Policy>, RealType>& c)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::quantile(const weibull_distribution<%1%>, %1%)";
-
-   RealType shape = c.dist.shape();
-   RealType scale = c.dist.scale();
-   RealType q = c.param;
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-   if(false == detail::check_probability(function, q, &result, Policy()))
-      return result;
-
-   if(q == 0)
-      return policies::raise_overflow_error<RealType>(function, 0, Policy());
-
-   result = scale * pow(-log(q), 1 / shape);
-
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mean(const weibull_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::mean(const weibull_distribution<%1%>)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-
-   result = scale * boost::math::tgamma(1 + 1 / shape, Policy());
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType variance(const weibull_distribution<RealType, Policy>& dist)
-{
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   static const char* function = "boost::math::variance(const weibull_distribution<%1%>)";
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-   {
-      return result;
-   }
-   result = boost::math::tgamma(1 + 1 / shape, Policy());
-   result *= -result;
-   result += boost::math::tgamma(1 + 2 / shape, Policy());
-   result *= scale * scale;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType mode(const weibull_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std function pow.
-
-   static const char* function = "boost::math::mode(const weibull_distribution<%1%>)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-   {
-      return result;
-   }
-   if(shape <= 1)
-      return 0;
-   result = scale * pow((shape - 1) / shape, 1 / shape);
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType median(const weibull_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std function pow.
-
-   static const char* function = "boost::math::median(const weibull_distribution<%1%>)";
-
-   RealType shape = dist.shape(); // Wikipedia k
-   RealType scale = dist.scale(); // Wikipedia lambda
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-   {
-      return result;
-   }
-   using boost::math::constants::ln_two;
-   result = scale * pow(ln_two<RealType>(), 1 / shape);
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType skewness(const weibull_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::skewness(const weibull_distribution<%1%>)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-   {
-      return result;
-   }
-   RealType g1, g2, g3, d;
-
-   g1 = boost::math::tgamma(1 + 1 / shape, Policy());
-   g2 = boost::math::tgamma(1 + 2 / shape, Policy());
-   g3 = boost::math::tgamma(1 + 3 / shape, Policy());
-   d = pow(g2 - g1 * g1, RealType(1.5));
-
-   result = (2 * g1 * g1 * g1 - 3 * g1 * g2 + g3) / d;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis_excess(const weibull_distribution<RealType, Policy>& dist)
-{
-   BOOST_MATH_STD_USING  // for ADL of std functions
-
-   static const char* function = "boost::math::kurtosis_excess(const weibull_distribution<%1%>)";
-
-   RealType shape = dist.shape();
-   RealType scale = dist.scale();
-
-   RealType result = 0;
-   if(false == detail::check_weibull(function, scale, shape, &result, Policy()))
-      return result;
-
-   RealType g1, g2, g3, g4, d, g1_2, g1_4;
-
-   g1 = boost::math::tgamma(1 + 1 / shape, Policy());
-   g2 = boost::math::tgamma(1 + 2 / shape, Policy());
-   g3 = boost::math::tgamma(1 + 3 / shape, Policy());
-   g4 = boost::math::tgamma(1 + 4 / shape, Policy());
-   g1_2 = g1 * g1;
-   g1_4 = g1_2 * g1_2;
-   d = g2 - g1_2;
-   d *= d;
-
-   result = -6 * g1_4 + 12 * g1_2 * g2 - 3 * g2 * g2 - 4 * g1 * g3 + g4;
-   result /= d;
-   return result;
-}
-
-template <class RealType, class Policy>
-inline RealType kurtosis(const weibull_distribution<RealType, Policy>& dist)
-{
-   return kurtosis_excess(dist) + 3;
-}
-
-} // namespace math
-} // namespace boost
-
-// This include must be at the end, *after* the accessors
-// for this distribution have been defined, in order to
-// keep compilers that support two-phase lookup happy.
-#include <boost/math/distributions/detail/derived_accessors.hpp>
-
-#endif // BOOST_STATS_WEIBULL_HPP
-
-