diff --git a/src/mlpack/core/boost_backport/CMakeLists.txt b/src/mlpack/core/boost_backport/CMakeLists.txt deleted file mode 100644 index 8a177fda47..0000000000 --- a/src/mlpack/core/boost_backport/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -# Define the files that we need to compile. -# Anything not in this list will not be compiled into mlpack. -set(SOURCES - bernoulli.hpp - detail/bernoulli_details.hpp - detail/polygamma.hpp - detail/unchecked_bernoulli.hpp - math_fwd.hpp - policy.hpp -) - -# add directory name to sources -set(DIR_SRCS) -foreach(file ${SOURCES}) - set(DIR_SRCS ${DIR_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/${file}) -endforeach() - -# Append sources (with directory name) to list of all mlpack sources (used at -# parent scope). -set(MLPACK_SRCS ${MLPACK_SRCS} ${DIR_SRCS} PARENT_SCOPE) diff --git a/src/mlpack/core/boost_backport/LICENSE.txt b/src/mlpack/core/boost_backport/LICENSE.txt deleted file mode 100644 index 36b7cd93cd..0000000000 --- a/src/mlpack/core/boost_backport/LICENSE.txt +++ /dev/null @@ -1,23 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/src/mlpack/core/boost_backport/README.md b/src/mlpack/core/boost_backport/README.md deleted file mode 100644 index 2d17b82b3a..0000000000 --- a/src/mlpack/core/boost_backport/README.md +++ /dev/null @@ -1,17 +0,0 @@ -The files in this directory are taken from Boost 1.56.0 and Boost 1.61.0 in -order to backport: - - * Trigamma and polygamma function calculation for the gamma_distribution.hpp - file (added in Boost 1.58.0, files taken from Boost 1.61.0) - -These files are licensed under the Boost Software License, available in -LICENSE.txt in this directory. - -If you want a copy of mlpack without a dependence on the Boost Software License, -then you will need to - - * remove this entire directory - * remove the line "boost_backport" from src/mlpack/core/CMakeLists.txt - * change the line "find_package(Boost x.yy" in the root CMakeLists.txt so that - x is 1 and yy is at least 58. (That is, make mlpack require Boost 1.58 or - newer). diff --git a/src/mlpack/core/math/digamma.hpp b/src/mlpack/core/math/digamma.hpp index 5cadddb89a..81ea67aa2b 100644 --- a/src/mlpack/core/math/digamma.hpp +++ b/src/mlpack/core/math/digamma.hpp @@ -19,7 +19,6 @@ namespace mlpack { namespace math { - /** * This function evaluates the polynomial based on the * constants passed to the function. @@ -63,7 +62,7 @@ EvaluatePolyLarge(const T(&a)[N], const T& x) */ template typename std::enable_if::type -EvaluatePoly_1_2(const T(&a)[N], const T& x) +EvaluatePoly12(const T(&a)[N], const T& x) { T x2 = x * x; T t[2]; @@ -94,7 +93,7 @@ EvaluatePoly_1_2(const T(&a)[N], const T& x) */ template typename std::enable_if::type -EvaluatePoly_1_2(const T(&a)[N], const T& x) +EvaluatePoly12(const T(&a)[N], const T& x) { T x2 = x * x; T t[2]; @@ -118,38 +117,38 @@ EvaluatePoly_1_2(const T(&a)[N], const T& x) * @param x Input for which digamma will be calculated. */ template -T Digamma_1_2(T x) +T Digamma12(T x) { T y = 0.99558162689208984F; - const T root_1 = T(1569415565) / 1073741824uL; - const T root_2 = (T(381566830) / 1073741824uL) / 1073741824uL; - const T root_3 = 0.9016312093258695918615325266959189453125e-19; + const T root1 = T(1569415565) / 1073741824uL; + const T root2 = (T(381566830) / 1073741824uL) / 1073741824uL; + const T root3 = 0.9016312093258695918615325266959189453125e-19; const T P[] = { - 0.25479851061131551, - -0.32555031186804491, - -0.65031853770896507, - -0.28919126444774784, - -0.045251321448739056, - -0.0020713321167745952 + 0.25479851061131551, + -0.32555031186804491, + -0.65031853770896507, + -0.28919126444774784, + -0.045251321448739056, + -0.0020713321167745952 }; const T Q[] = { - 1.0, - 2.0767117023730469, - 1.4606242909763515, - 0.43593529692665969, - 0.054151797245674225, - 0.0021284987017821144, - -0.55789841321675513e-6 + 1.0, + 2.0767117023730469, + 1.4606242909763515, + 0.43593529692665969, + 0.054151797245674225, + 0.0021284987017821144, + -0.55789841321675513e-6 }; - T g = x - root_1; - g -= root_2; - g -= root_3; + T g = x - root1; + g -= root2; + g -= root3; - T r = EvaluatePoly_1_2(P, T(x-1)) / EvaluatePoly_1_2(Q, T(x-1)); + T r = EvaluatePoly12(P, T(x - 1)) / EvaluatePoly12(Q, T(x - 1)); T result = (g * y) + (g * r); @@ -166,20 +165,20 @@ template T DigammaLarge(T x) { const T P[] = { - 0.083333333333333333333333333333333333333333333333333, - -0.0083333333333333333333333333333333333333333333333333, - 0.003968253968253968253968253968253968253968253968254, - -0.0041666666666666666666666666666666666666666666666667, - 0.0075757575757575757575757575757575757575757575757576, - -0.021092796092796092796092796092796092796092796092796, - 0.083333333333333333333333333333333333333333333333333, - -0.44325980392156862745098039215686274509803921568627 + 0.083333333333333333333333333333333333333333333333333, + -0.0083333333333333333333333333333333333333333333333333, + 0.003968253968253968253968253968253968253968253968254, + -0.0041666666666666666666666666666666666666666666666667, + 0.0075757575757575757575757575757575757575757575757576, + -0.021092796092796092796092796092796092796092796092796, + 0.083333333333333333333333333333333333333333333333333, + -0.44325980392156862745098039215686274509803921568627 }; x -= 1; T result = std::log(x); result += 1 / (2 * x); - T z = 1 / (x * x); + const T z = 1 / (x * x); result -= z * EvaluatePolyLarge(P, z); return result; @@ -209,7 +208,7 @@ T Digamma(T x) // Check for evaluation of the function on poles. T remainder = x - floor(x); - if(remainder > 0.5) + if (remainder > 0.5) { remainder -= 1; } @@ -237,14 +236,14 @@ T Digamma(T x) result += 1 / x; } - // If x < 1, shift to x > 1 + // If x < 1, shift to x > 1. while (x < 1) { result -= 1 / x; x += 1; } - result += Digamma_1_2(x); + result += Digamma12(x); } return result; diff --git a/src/mlpack/core/math/trigamma.hpp b/src/mlpack/core/math/trigamma.hpp index dc1ab76e37..118f7ae7f8 100644 --- a/src/mlpack/core/math/trigamma.hpp +++ b/src/mlpack/core/math/trigamma.hpp @@ -96,75 +96,75 @@ T TrigammaPrec(T x) { T offset = 2.1093254089355469; - const T P_1_2[] = { - -1.1093280605946045, - -3.8310674472619321, - -3.3703848401898283, - 0.28080574467981213, - 1.6638069578676164, - 0.64468386819102836 + const T P12[] = { + -1.1093280605946045, + -3.8310674472619321, + -3.3703848401898283, + 0.28080574467981213, + 1.6638069578676164, + 0.64468386819102836 + }; + + const T Q12[] = { + 1.0, + 3.4535389668541151, + 4.5208926987851437, + 2.7012734178351534, + 0.64468798399785611, + -0.20314516859987728e-6 + }; + + const T P24[] = { + -0.13803835004508849e-7, + 0.50000049158540261, + 1.6077979838469348, + 2.5645435828098254, + 2.0534873203680393, + 0.74566981111565923 + }; + + const T Q24[] = { + 1.0, + 2.8822787662376169, + 4.1681660554090917, + 2.7853527819234466, + 0.74967671848044792, + -0.00057069112416246805 + }; + + const T P4INF[] = { + 0.68947581948701249e-17L, + 0.49999999999998975L, + 1.0177274392923795L, + 2.498208511343429L, + 2.1921221359427595L, + 1.5897035272532764L, + 0.40154388356961734L }; - const T Q_1_2[] = { - 1.0, - 3.4535389668541151, - 4.5208926987851437, - 2.7012734178351534, - 0.64468798399785611, - -0.20314516859987728e-6 + const T Q4INF[] = { + 1.0L, + 1.7021215452463932L, + 4.4290431747556469L, + 2.9745631894384922L, + 2.3013614809773616L, + 0.28360399799075752L, + 0.022892987908906897L }; - const T P_2_4[] = { - -0.13803835004508849e-7, - 0.50000049158540261, - 1.6077979838469348, - 2.5645435828098254, - 2.0534873203680393, - 0.74566981111565923 - }; - - const T Q_2_4[] = { - 1.0, - 2.8822787662376169, - 4.1681660554090917, - 2.7853527819234466, - 0.74967671848044792, - -0.00057069112416246805 - }; - - const T P_4_INF[] = { - 0.68947581948701249e-17L, - 0.49999999999998975L, - 1.0177274392923795L, - 2.498208511343429L, - 2.1921221359427595L, - 1.5897035272532764L, - 0.40154388356961734L - }; - - const T Q_4_INF[] = { - 1.0L, - 1.7021215452463932L, - 4.4290431747556469L, - 2.9745631894384922L, - 2.3013614809773616L, - 0.28360399799075752L, - 0.022892987908906897L - }; - // For 1 < x <= 2. if (x <= 2) - return (offset + EvaluatePolyPrec(P_1_2, x) / EvaluatePolyPrec(Q_1_2, x)) / (x * x); + return (offset + EvaluatePolyPrec(P12, x) / EvaluatePolyPrec(Q12, x)) / (x * x); // For 2 < x <= 4. else if (x <= 4) { T y = 1 / x; - return (1 + EvaluatePolyPrec(P_2_4, y) / EvaluatePolyPrec(Q_2_4, y)) / x; + return (1 + EvaluatePolyPrec(P24, y) / EvaluatePolyPrec(Q24, y)) / x; } // For x > 4. T y = 1 / x; - return (1 + EvaluatePolyPrec(P_4_INF, y) / EvaluatePolyPrec(Q_4_INF, y)) / x; + return (1 + EvaluatePolyPrec(P4INF, y) / EvaluatePolyPrec(Q4INF, y)) / x; } /**