From 63f93caf01251999ff81da483337cc45cf2dea46 Mon Sep 17 00:00:00 2001 From: William Ledbetter <williamgledbetter@gmail.com> Date: Tue, 25 Aug 2020 22:51:30 -0500 Subject: [PATCH 1/4] Only allow fvar constructor for convertible types Only test quadrature constexpr if compatibility macro typo Fix derivative casting? different way boost::has_right_shift fails for me even before fvar changes... prep for PR cleaning --- include/boost/math/differentiation/autodiff.hpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/include/boost/math/differentiation/autodiff.hpp b/include/boost/math/differentiation/autodiff.hpp index a369593099..d04376f2b2 100644 --- a/include/boost/math/differentiation/autodiff.hpp +++ b/include/boost/math/differentiation/autodiff.hpp @@ -146,15 +146,15 @@ class fvar { // RealType(ca) | RealType | RealType is copy constructible from the arithmetic types. explicit fvar(root_type const&); // Initialize a constant. (No epsilon terms.) - template <typename RealType2> + template <typename RealType2, typename std::enable_if<std::is_convertible<RealType2, RealType>::value>::type* = nullptr> fvar(RealType2 const& ca); // Supports any RealType2 for which static_cast<root_type>(ca) compiles. // r = cr | RealType& | Assignment operator. fvar& operator=(fvar const&) = default; // r = ca | RealType& | Assignment operator from the arithmetic types. - // Handled by constructor that takes a single parameter of generic type. - // fvar& operator=(root_type const&); // Set a constant. + template<typename RealType2> + typename std::enable_if<std::is_convertible<RealType2, RealType>::value, fvar&>::type& operator=(RealType2 const&); // r += cr | RealType& | Adds cr to r. template <typename RealType2, size_t Order2> @@ -679,19 +679,18 @@ fvar<RealType, Order>::fvar(root_type const& ca) : v{{static_cast<RealType>(ca)} // Can cause compiler error if RealType2 cannot be cast to root_type. template <typename RealType, size_t Order> -template <typename RealType2> +template <typename RealType2, typename std::enable_if<std::is_convertible<RealType2, RealType>::value>::type*> fvar<RealType, Order>::fvar(RealType2 const& ca) : v{{static_cast<RealType>(ca)}} {} -/* template<typename RealType, size_t Order> -fvar<RealType,Order>& fvar<RealType,Order>::operator=(root_type const& ca) +template<typename RealType2> +typename std::enable_if<std::is_convertible<RealType2, RealType>::value, fvar<RealType, Order>&>::type& fvar<RealType,Order>::operator=(RealType2 const& ca) { v.front() = static_cast<RealType>(ca); - if constexpr (0 < Order) + BOOST_IF_CONSTEXPR (0 < Order) std::fill(v.begin()+1, v.end(), static_cast<RealType>(0)); return *this; } -*/ template <typename RealType, size_t Order> template <typename RealType2, size_t Order2> From e3bebe8a22834336ad1aab37feb87a591d11b488 Mon Sep 17 00:00:00 2001 From: William Ledbetter <williamgledbetter@gmail.com> Date: Wed, 26 Aug 2020 11:08:12 -0500 Subject: [PATCH 2/4] Added overload of operator>> that behaves like assignment Quicker testing fix travis prep for PR --- .../boost/math/differentiation/autodiff.hpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/boost/math/differentiation/autodiff.hpp b/include/boost/math/differentiation/autodiff.hpp index d04376f2b2..e4986321c5 100644 --- a/include/boost/math/differentiation/autodiff.hpp +++ b/include/boost/math/differentiation/autodiff.hpp @@ -394,6 +394,12 @@ class fvar { template <typename RealType2, size_t Order2> friend std::ostream& operator<<(std::ostream&, fvar<RealType2, Order2> const&); + template <typename RealType2, size_t Order2> + friend std::istream& operator>>(std::istream&, fvar<RealType2, Order2> &); + + template <typename RealType2, size_t Order2> + friend std::wistream& operator>>(std::wistream&, fvar<RealType2, Order2> &); + // C++11 Compatibility #ifdef BOOST_NO_CXX17_IF_CONSTEXPR template <typename RootType> @@ -1740,6 +1746,22 @@ std::ostream& operator<<(std::ostream& out, fvar<RealType, Order> const& cr) { return out << ')'; } +template <typename RealType, size_t Order> +std::istream& operator>>(std::istream& in, fvar<RealType, Order> & cr) { + in >> cr.v.front(); + BOOST_IF_CONSTEXPR (0 < Order) + std::fill(cr.v.begin()+1, cr.v.end(), static_cast<RealType>(0)); + return in; +} + +template <typename RealType, size_t Order> +std::wistream& operator>>(std::wistream& in, fvar<RealType, Order> & cr) { + in >> cr.v.front(); + BOOST_IF_CONSTEXPR (0 < Order) + std::fill(cr.v.begin()+1, cr.v.end(), static_cast<RealType>(0)); + return in; +} + // Additional functions template <typename RealType, size_t Order> From cc9be49e447a773172c53229f47e15c9d5b6849a Mon Sep 17 00:00:00 2001 From: William Ledbetter <williamgledbetter@gmail.com> Date: Mon, 31 Aug 2020 17:05:51 -0500 Subject: [PATCH 3/4] preliminary eigen tests --- .travis.yml | 1300 +++++++++-------- .../math/differentiation/autodiff_eigen.hpp | 59 + test/Jamfile.v2 | 1 + test/test_autodiff_9.cpp | 229 +++ 4 files changed, 944 insertions(+), 645 deletions(-) create mode 100644 include/boost/math/differentiation/autodiff_eigen.hpp create mode 100644 test/test_autodiff_9.cpp diff --git a/.travis.yml b/.travis.yml index f53ea49074..01bb2f8ab1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,743 +27,753 @@ matrix: - env: BOGUS_JOB=true include: - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../tools - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../tools - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../tools - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../tools - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../tools - addons: - apt: - packages: - - g++-6 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-5 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-5 - - libgmp-dev - - libmpfr-dev - - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=misc + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-5 + - g++-6 - libgmp-dev - libmpfr-dev - libfftw3-dev + - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=quadrature + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-5 + - g++-6 - libgmp-dev - libmpfr-dev - libfftw3-dev + - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=float128_tests + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-5 + - g++-6 - libgmp-dev - libmpfr-dev - libfftw3-dev + - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../example//examples + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-5 + - g++-6 - libgmp-dev - libmpfr-dev - libfftw3-dev + - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../tools + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-5 + - g++-6 - libgmp-dev - libmpfr-dev - libfftw3-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=misc - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../tools - addons: - apt: - packages: - - g++-8 - - libgmp-dev - - libmpfr-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=misc - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=float128_tests - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../example//examples - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../tools + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-6 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=misc + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-8 + - g++-5 - libgmp-dev - libmpfr-dev - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=special_fun - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test - - - os: linux - dist: trusty - compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=quadrature - addons: - apt: - packages: - - g++-8 - sources: - - ubuntu-toolchain-r-test + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-5 + # - libgmp-dev + # - libmpfr-dev + # - libfftw3-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=misc + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=float128_tests + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - g++-8 - sources: - - ubuntu-toolchain-r-test + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-8 + # - libgmp-dev + # - libmpfr-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=misc + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../example//examples + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - g++-8 - sources: - - ubuntu-toolchain-r-test + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-8 + # - libgmp-dev + # - libmpfr-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 - env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../tools + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - g++-8 - - libgmp-dev - - libmpfr-dev - sources: - - ubuntu-toolchain-r-test + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=float128_tests + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - g++-8 + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # dist: trusty + # compiler: g++-8 + # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - g++-8 + # - libgmp-dev + # - libmpfr-dev + # sources: + # - ubuntu-toolchain-r-test + + # - os: linux + # compiler: clang++-6.0 + # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=special_fun + # addons: + # apt: + # packages: + # - clang-6.0 + # sources: + # - ubuntu-toolchain-r-test + # - llvm-toolchain-xenial-6.0 + + # - os: linux + # compiler: clang++-6.0 + # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=distribution_tests + # addons: + # apt: + # packages: + # - clang-6.0 + # sources: + # - ubuntu-toolchain-r-test + # - llvm-toolchain-xenial-6.0 + + # - os: linux + # compiler: clang++-6.0 + # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=misc + # addons: + # apt: + # packages: + # - clang-6.0 + # sources: + # - ubuntu-toolchain-r-test + # - llvm-toolchain-xenial-6.0 - os: linux compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=special_fun + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - clang-6.0 + - libeigen3-dev sources: - ubuntu-toolchain-r-test - llvm-toolchain-xenial-6.0 - - os: linux - compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=distribution_tests - addons: - apt: - packages: - - clang-6.0 - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-xenial-6.0 - - - os: linux - compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=misc - addons: - apt: - packages: - - clang-6.0 - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-xenial-6.0 - - - os: linux - compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=quadrature - addons: - apt: - packages: - - clang-6.0 - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-xenial-6.0 - - - os: linux - compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../example//examples - addons: - apt: - packages: - - clang-6.0 - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-xenial-6.0 - - - os: linux - compiler: clang++-6.0 - env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../tools - addons: - apt: - packages: - - clang-6.0 - - libgmp-dev - - libmpfr-dev - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-xenial-6.0 - - - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=special_fun - osx_image: xcode11 - - - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=distribution_tests - osx_image: xcode11 - - - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=misc - osx_image: xcode11 + # - os: linux + # compiler: clang++-6.0 + # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../example//examples + # addons: + # apt: + # packages: + # - clang-6.0 + # sources: + # - ubuntu-toolchain-r-test + # - llvm-toolchain-xenial-6.0 + + # - os: linux + # compiler: clang++-6.0 + # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../tools + # addons: + # apt: + # packages: + # - clang-6.0 + # - libgmp-dev + # - libmpfr-dev + # sources: + # - ubuntu-toolchain-r-test + # - llvm-toolchain-xenial-6.0 + + # - os: osx + # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=special_fun + # osx_image: xcode11 + + # - os: osx + # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=distribution_tests + # osx_image: xcode11 + + # - os: osx + # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=misc + # osx_image: xcode11 - os: osx env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=quadrature osx_image: xcode11 - - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=float128_tests - osx_image: xcode11 + # - os: osx + # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=float128_tests + # osx_image: xcode11 - - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=../example//examples - osx_image: xcode11 + # - os: osx + # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=../example//examples + # osx_image: xcode11 install: diff --git a/include/boost/math/differentiation/autodiff_eigen.hpp b/include/boost/math/differentiation/autodiff_eigen.hpp new file mode 100644 index 0000000000..1c7c44f977 --- /dev/null +++ b/include/boost/math/differentiation/autodiff_eigen.hpp @@ -0,0 +1,59 @@ +#ifndef BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP +#define BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP + +#include <Eigen/Core> +#include <boost/math/differentiation/autodiff.hpp> + +namespace Eigen { +template <typename RealType, size_t Order> +struct NumTraits<boost::math::differentiation::autodiff_v1::detail:: + template fvar<RealType, Order>> : NumTraits<RealType> { + using fvar = + boost::math::differentiation::autodiff_v1::detail::template fvar<RealType, + Order>; + + enum { + RequireInitialization = 1, + ReadCost = 1, + AddCost = 16, + MulCost = 16, + }; +}; + +template <typename RealType, size_t Order, typename BinaryOp, typename A> +struct ScalarBinaryOpTraits<boost::math::differentiation::autodiff_v1::detail:: + template fvar<RealType, Order>, + A, BinaryOp> { + typedef boost::math::differentiation::autodiff_v1::detail::template fvar< + RealType, Order> + ReturnType; +}; + +template <typename RealType, size_t Order, typename BinaryOp, typename A> +struct ScalarBinaryOpTraits<A, + boost::math::differentiation::autodiff_v1::detail:: + template fvar<RealType, Order>, + BinaryOp> { + typedef boost::math::differentiation::autodiff_v1::detail::template fvar< + RealType, Order> + ReturnType; +}; + +template <typename RealType, size_t Order, typename RealType2, size_t Order2, + typename BinaryOp> +struct ScalarBinaryOpTraits< + boost::math::differentiation::autodiff_v1::detail::template fvar<RealType, + Order>, + boost::math::differentiation::autodiff_v1::detail::template fvar<RealType2, + Order2>, + BinaryOp> { + typedef ScalarBinaryOpTraits<RealType, RealType2, BinaryOp>::ReturnType + RealReturn; + const size_t ReturnOrder = (Order > Order2) ? Order : Order2; + typedef boost::math::differentiation::autodiff_v1::detail::template fvar< + RealReturn, ReturnOrder> + ReturnType; +} +} // namespace Eigen + +#endif // BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index f83b60b78c..f95bbfbb35 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1336,6 +1336,7 @@ test-suite quadrature : [ run test_autodiff_6.cpp ../../test/build//boost_unit_test_framework : : : <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : <linkflags>-lquadmath ] [ requires cxx11_inline_namespaces ] ] [ run test_autodiff_7.cpp ../../test/build//boost_unit_test_framework : : : <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : <linkflags>-lquadmath ] [ requires cxx11_inline_namespaces ] ] [ run test_autodiff_8.cpp ../../test/build//boost_unit_test_framework : : : <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : <linkflags>-lquadmath ] [ requires cxx11_inline_namespaces ] ] + [ run test_autodiff_9.cpp ../../test/build//boost_unit_test_framework : : : <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : <linkflags>-lquadmath ] [ requires cxx11_inline_namespaces ] ] [ compile compile_test/autodiff_incl_test.cpp : <toolset>gcc-mingw:<cxxflags>-Wa,-mbig-obj <debug-symbols>off <toolset>msvc:<cxxflags>/bigobj release [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : <linkflags>-lquadmath ] [ requires cxx11_inline_namespaces ] ] ; diff --git a/test/test_autodiff_9.cpp b/test/test_autodiff_9.cpp new file mode 100644 index 0000000000..926ef24449 --- /dev/null +++ b/test/test_autodiff_9.cpp @@ -0,0 +1,229 @@ +#include <Eigen/Core> +#include <boost/math/differentiation/autodiff_eigen.hpp> + +#include "test_autodiff.hpp" + +BOOST_AUTO_TEST_SUITE(test_autodiff_9) + +BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_init, T, all_float_types) { + constexpr int size = 5; + + constexpr std::size_t n = 5; + typedef typename fvar<T, n> fTn; + Eigen::Matrix<fTn, size, 1> x; + x[0] = fTn(1.5); + x[1] = make_fvar<T, n - 1>(2.5); + x[2] = fvar<T, n - 2>(3.5); + x[3] = 4; + x[4] = 5.5; + + constexpr std::size_t m = 2; + typedef typename fvar<T, n> fTm; + Eigen::Matrix<fTm, size, 1> y; + y = x.template cast<fTn>(); + BOOST_CHECK_EQUAL(x[0].derivative(0), y[0].derivative(0)); + BOOST_CHECK_EQUAL(x[1].derivative(0), y[1].derivative(0)); + BOOST_CHECK_EQUAL(x[2].derivative(0), y[2].derivative(0)); + BOOST_CHECK_EQUAL(x[3].derivative(0), y[3].derivative(0)); + BOOST_CHECK_EQUAL(x[4].derivative(0), y[4].derivative(0)); + + constexpr std::size_t p = 3; + typedef typename fvar<T, p> fTp; + Eigen::Matrix<fTp, 1, size> z = + Eigen::Matrix<fTn, size, 1>::Random().transpose().template cast<fTp>(); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_general, T, all_float_types) { + using std::cos; + using std::exp; + using std::log; + using std::pow; + using std::sin; + + constexpr int dim = 3; + constexpr std::size_t n = 2; + constexpr double p = 3.456; + + typedef typename fvar<T, n> fTn; + Eigen::Matrix<fTn, dim, 1> x; + x[0] = -1; + x[1] = 0; + x[2] = 1; + x[3] = 5; + + Eigen::Matrix<fTn, dim, 1> y1, y2, y3, y4, y5; + y1 = sin(x); + y2 = cos(x); + y3 = exp(x); + y4 = pow(x, p); + y5 = log(x); + + // Check sin + BOOST_CHECK_EQUAL(y1[0].derivative(0), sin(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y1[1].derivative(0), sin(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y1[2].derivative(0), sin(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y1[3].derivative(0), sin(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y1[0].derivative(1), cos(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y1[1].derivative(1), cos(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y1[2].derivative(1), cos(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y1[3].derivative(1), cos(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y1[0].derivative(2), -sin(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y1[1].derivative(2), -sin(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y1[2].derivative(2), -sin(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y1[3].derivative(2), -sin(x[3].derivative(0))); + + // Check cos + BOOST_CHECK_EQUAL(y2[0].derivative(0), cos(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y2[1].derivative(0), cos(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y2[2].derivative(0), cos(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y2[3].derivative(0), cos(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y2[0].derivative(1), -sin(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y2[1].derivative(1), -sin(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y2[2].derivative(1), -sin(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y2[3].derivative(1), -sin(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y2[0].derivative(2), -cos(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y2[1].derivative(2), -cos(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y2[2].derivative(2), -cos(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y2[3].derivative(2), -cos(x[3].derivative(0))); + + // Check exp + BOOST_CHECK_EQUAL(y3[0].derivative(0), exp(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y3[1].derivative(0), exp(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y3[2].derivative(0), exp(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y3[3].derivative(0), exp(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y3[0].derivative(1), exp(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y3[1].derivative(1), exp(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y3[2].derivative(1), exp(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y3[3].derivative(1), exp(x[3].derivative(0))); + BOOST_CHECK_EQUAL(y3[0].derivative(2), exp(x[0].derivative(0))); + BOOST_CHECK_EQUAL(y3[1].derivative(2), exp(x[1].derivative(0))); + BOOST_CHECK_EQUAL(y3[2].derivative(2), exp(x[2].derivative(0))); + BOOST_CHECK_EQUAL(y3[3].derivative(2), exp(x[3].derivative(0))); + + // Check pow + BOOST_CHECK_EQUAL(y4[0].derivative(0), pow(x[0].derivative(0), p)); + BOOST_CHECK_EQUAL(y4[1].derivative(0), pow(x[1].derivative(0), p)); + BOOST_CHECK_EQUAL(y4[2].derivative(0), pow(x[2].derivative(0), p)); + BOOST_CHECK_EQUAL(y4[3].derivative(0), pow(x[3].derivative(0), p)); + BOOST_CHECK_EQUAL(y4[0].derivative(1), p * pow(x[0].derivative(0), p - 1)); + BOOST_CHECK_EQUAL(y4[1].derivative(1), p * pow(x[1].derivative(0), p - 1)); + BOOST_CHECK_EQUAL(y4[2].derivative(1), p * pow(x[2].derivative(0), p - 1)); + BOOST_CHECK_EQUAL(y4[3].derivative(1), p * pow(x[3].derivative(0), p - 1)); + BOOST_CHECK_EQUAL(y4[0].derivative(2), + (p - 1) * p * pow(x[0].derivative(0), p - 2)); + BOOST_CHECK_EQUAL(y4[1].derivative(2), + (p - 1) * p * pow(x[1].derivative(0), p - 2)); + BOOST_CHECK_EQUAL(y4[2].derivative(2), + (p - 1) * p * pow(x[2].derivative(0), p - 2)); + BOOST_CHECK_EQUAL(y4[3].derivative(2), + (p - 1) * p * pow(x[3].derivative(0), p - 2)); + + // Check log + BOOST_CHECK_EQUAL(y5[2].derivative(0), log(x[0].derivative(0)); + BOOST_CHECK_EQUAL(y5[3].derivative(0), log(x[3].derivative(0)); + BOOST_CHECK_EQUAL(y5[2].derivative(1), 1/x[2].derivative(0)); + BOOST_CHECK_EQUAL(y5[3].derivative(1), 1/x[3].derivative(0)); + BOOST_CHECK_EQUAL(y5[2].derivative(2), -1/pow(x[2].derivative(0), 2)); + BOOST_CHECK_EQUAL(y5[3].derivative(2), -1/pow(x[3].derivative(0), 2)); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_scalar, T, all_float_types) { + constexpr int dim = 4; + constexpr size_t n = 4; + + typedef typename fvar<T, n> fTn; + fTn x = 4; + Eigen::Matrix<fTn, dim, 1> X; + Eigen::Matrix<fTn, dim, 1> Z; + Eigen::Matrix<fTn, dim, dim> I = Eigen::Matrix<fTn, dim, dim>::Identity(); + X[0] = x; + Z[0] = x; + X[1] = 2; + Z[1] = x; + X[2] = x; + Z[2] = -3; + X[3] = 4; + Z[3] = 5; + + // y = x*x + 2*x - 3*x + 20 + fTn y1 = X.transpose() * Z; + fTn y2 = Z.transpose() * I * X; + + BOOST_CHECK_EQUAL(y1.derivative(0), x * x + 2 * x - 3 * x + 20); + BOOST_CHECK_EQUAL(y1.derivative(1), 2 * x - 1); + BOOST_CHECK_EQUAL(y1.derivative(2), 2); + BOOST_CHECK_EQUAL(y1.derivative(3), 0); + BOOST_CHECK_EQUAL(y1.derivative(4), 0); + BOOST_CHECK_EQUAL(y2.derivative(0), x * x + 2 * x - 3 * x + 20); + BOOST_CHECK_EQUAL(y2.derivative(1), 2 * x - 1); + BOOST_CHECK_EQUAL(y2.derivative(2), 2); + BOOST_CHECK_EQUAL(y2.derivative(3), 0); + BOOST_CHECK_EQUAL(y2.derivative(4), 0); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_vector, T, all_float_types) { + // Note: Can't handle taking gradient all at once. That would require the same + // approach as `make_ftuple`, which has upper limits. + using std::cos; + using std::sin; + + constexpr int dim = 3; + constexpr size_t n = 4; + + typedef typename fvar<T, n> fTn; + fTn x = 5; + T xD0 = x.derivative(0); + Eigen::Matrix<fTn, dim, 1> X; + X[0] = 1; + X[1] = x; + X[2] = x * x; + Eigen::Matrix<fTn, dim, dim> M; + M(0, 0) = 1; + M(0, 1) = 2; + M(0, 2) = x; + M(1, 0) = 1 / x; + M(1, 1) = 4; + M(1, 2) = 0; + M(2, 0) = 5; + M(2, 1) = sin(x); + M(2, 2) = cos(x * x); + + Eigen::Matrix<fTn, dim, 1> Y = M * X; + + // Y[0] = 1 + 2*x + x*x*x + BOOST_CHECK_EQUAL(Y[0].derivative(0), 1 + 2 * xD0 + pow(xD0, 3)); + BOOST_CHECK_EQUAL(Y[0].derivative(1), 2 + 3 * xD0 * xD0); + BOOST_CHECK_EQUAL(Y[0].derivative(2), 6 * xD0); + BOOST_CHECK_EQUAL(Y[0].derivative(3), 6); + BOOST_CHECK_EQUAL(Y[0].derivative(4), 0); + + // Y[1] = 1/x + 4*x + 0 + BOOST_CHECK_EQUAL(Y[1].derivative(0), 1 / xD0 + 4 * xD0); + BOOST_CHECK_EQUAL(Y[1].derivative(1), -1 / (xD0 * xD0) + 4); + BOOST_CHECK_EQUAL(Y[1].derivative(2), 2 / (pow(xD0, 3))); + BOOST_CHECK_EQUAL(Y[1].derivative(3), -6 / (pow(xD0, 3) * xD0)); + BOOST_CHECK_EQUAL(Y[1].derivative(4), 24 / (pow(xD0, 3) * xD0 * xD0)); + + // Y[2] = 5 + x*sin(x) + x*x*cos(x*x) + BOOST_CHECK_EQUAL(Y[2].derivative(0), + 5 + xD0 * sin(xD0) + xD0 * xD0 * cos(xD0 * xD0)); + BOOST_CHECK_EQUAL(Y[2].derivative(1), 2 * xD0 * cos(xD0 * xD0) - + 2 * pow(xD0, 3) * sin(xD0 * xD0) + + sin(xD0) + xD0 * cos(xD0)); + BOOST_CHECK_EQUAL(Y[2].derivative(2), + -xD0 * (10 * xD0 * sin(xD0 * xD0) + sin(xD0)) + + (2 - 4 * pow(xD0, 4)) * cos(xD0 * xD0) + 2 * cos(xD0)); + BOOST_CHECK_EQUAL(Y[2].derivative(3), -24 * xD0 * sin(xD0 * xD0) + + 8 * pow(xD0, 5) * sin(xD0 * xD0) - + 36 * pow(xD0, 3) * cos(xD0 * xD0) - + 3 * sin(xD0) - xD0 * cos(xD0)); + BOOST_CHECK_EQUAL( + Y[2].derivative(4), + -24 * sin(xD0 * xD0) + 112 * pow(xD0, 4) * sin(xD0 * xD0) + + 4 * (4 * pow(xD0, 4) - 39) * xD0 * xD0 * cos(xD0 * xD0) + + xD0 * sin(xD0) - 4 * cos(xD0)); +} + +// BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_determinant, T, all_float_types) { +// constexpr int dim = 4; +// } From 1c35f077b82b9d1100b31767003cd8103ec12c87 Mon Sep 17 00:00:00 2001 From: William Ledbetter <williamgledbetter@gmail.com> Date: Fri, 8 Jan 2021 10:36:03 -0600 Subject: [PATCH 4/4] debug eigen tests match parentheses Set active variables still debugging using no typename catch all typename eigen built-in common functions element-wise ops scalar binary op traits cast for multiplication try float specialization is travis' eigen up to date? Newer eigen, relocate compatibility code relocate eigen code location add typename and static much faster debugging help type conversion fix cast include for determinant and inverse fix dimension tolerance tweak tolerances osx cleanup preliminary eigen tests debug eigen tests match parentheses Set active variables still debugging using no typename catch all typename eigen built-in common functions element-wise ops scalar binary op traits cast for multiplication try float specialization is travis' eigen up to date? Newer eigen, relocate compatibility code relocate eigen code location add typename and static much faster debugging help type conversion fix cast include for determinant and inverse fix dimension tolerance tweak tolerances osx cleanup try fixing windows build Try this eigen location undo no 'cl' command? Is it because of "include?" Try "vcpkg integrate install" --- .travis.yml | 1265 +++++++++-------- appveyor.yml | 126 +- .../math/differentiation/autodiff_eigen.hpp | 59 - test/test_autodiff_9.cpp | 215 ++- 4 files changed, 850 insertions(+), 815 deletions(-) delete mode 100644 include/boost/math/differentiation/autodiff_eigen.hpp diff --git a/.travis.yml b/.travis.yml index 01bb2f8ab1..5c3f6d59d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,134 +27,395 @@ matrix: - env: BOGUS_JOB=true include: - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE="quadrature include=/usr/include/eigen3" + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE="quadrature include=/usr/include/eigen3" + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE="quadrature include=/usr/include/eigen3" + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE="quadrature include=/usr/include/eigen3" + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + - libeigen3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../tools + addons: + apt: + packages: + - g++-6 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-5 + - libgmp-dev + - libmpfr-dev + - libfftw3-dev + sources: + - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE="quadrature include=/usr/include/eigen3" + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=distribution_tests addons: apt: packages: - - g++-6 + - g++-5 - libgmp-dev - libmpfr-dev - libfftw3-dev - - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE="quadrature include=/usr/include/eigen3" + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=misc addons: apt: packages: - - g++-6 + - g++-5 - libgmp-dev - libmpfr-dev - libfftw3-dev - - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" + dist: bionic + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: packages: - - g++-6 + - g++-5 - libgmp-dev - libmpfr-dev - libfftw3-dev @@ -163,249 +424,31 @@ matrix: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE="quadrature include=/usr/include/eigen3" + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=float128_tests addons: apt: packages: - - g++-6 + - g++-5 - libgmp-dev - libmpfr-dev - libfftw3-dev - - libeigen3-dev sources: - ubuntu-toolchain-r-test - os: linux - env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE="quadrature include=/usr/include/eigen3" + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../example//examples addons: apt: packages: - - g++-6 + - g++-5 - libgmp-dev - libmpfr-dev - libfftw3-dev - - libeigen3-dev sources: - ubuntu-toolchain-r-test - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++03 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++11 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++14 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=gnu++14 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=c++1z TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-6 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=misc - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - os: linux - env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../tools addons: apt: packages: @@ -413,82 +456,45 @@ matrix: - libgmp-dev - libmpfr-dev - libfftw3-dev - - libeigen3-dev sources: - ubuntu-toolchain-r-test - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=c++14 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-5 - # - libgmp-dev - # - libmpfr-dev - # - libfftw3-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=misc - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=misc + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: @@ -498,77 +504,77 @@ matrix: sources: - ubuntu-toolchain-r-test - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-8 - # - libgmp-dev - # - libmpfr-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=misc - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=c++14 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-8 + - libgmp-dev + - libmpfr-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=misc + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: @@ -578,66 +584,66 @@ matrix: sources: - ubuntu-toolchain-r-test - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-8 - # - libgmp-dev - # - libmpfr-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++03 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-8 + - libgmp-dev + - libmpfr-dev + sources: + - ubuntu-toolchain-r-test - os: linux dist: trusty compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=special_fun + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: bionic + compiler: g++-8 env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: apt: @@ -647,75 +653,76 @@ matrix: sources: - ubuntu-toolchain-r-test - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=float128_tests - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - g++-8 - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # dist: trusty - # compiler: g++-8 - # env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - g++-8 - # - libgmp-dev - # - libmpfr-dev - # sources: - # - ubuntu-toolchain-r-test - - # - os: linux - # compiler: clang++-6.0 - # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=special_fun - # addons: - # apt: - # packages: - # - clang-6.0 - # sources: - # - ubuntu-toolchain-r-test - # - llvm-toolchain-xenial-6.0 - - # - os: linux - # compiler: clang++-6.0 - # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=distribution_tests - # addons: - # apt: - # packages: - # - clang-6.0 - # sources: - # - ubuntu-toolchain-r-test - # - llvm-toolchain-xenial-6.0 - - # - os: linux - # compiler: clang++-6.0 - # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=misc - # addons: - # apt: - # packages: - # - clang-6.0 - # sources: - # - ubuntu-toolchain-r-test - # - llvm-toolchain-xenial-6.0 + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=float128_tests + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../example//examples + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=gnu++17 TEST_SUITE=../tools + addons: + apt: + packages: + - g++-8 + - libgmp-dev + - libmpfr-dev + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=special_fun + addons: + apt: + packages: + - clang-6.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-6.0 + + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=distribution_tests + addons: + apt: + packages: + - clang-6.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-6.0 + + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=misc + addons: + apt: + packages: + - clang-6.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-6.0 - os: linux + dist: bionic compiler: clang++-6.0 env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE="quadrature include=/usr/include/eigen3" addons: @@ -727,53 +734,57 @@ matrix: - ubuntu-toolchain-r-test - llvm-toolchain-xenial-6.0 - # - os: linux - # compiler: clang++-6.0 - # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../example//examples - # addons: - # apt: - # packages: - # - clang-6.0 - # sources: - # - ubuntu-toolchain-r-test - # - llvm-toolchain-xenial-6.0 - - # - os: linux - # compiler: clang++-6.0 - # env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../tools - # addons: - # apt: - # packages: - # - clang-6.0 - # - libgmp-dev - # - libmpfr-dev - # sources: - # - ubuntu-toolchain-r-test - # - llvm-toolchain-xenial-6.0 - - # - os: osx - # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=special_fun - # osx_image: xcode11 - - # - os: osx - # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=distribution_tests - # osx_image: xcode11 - - # - os: osx - # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=misc - # osx_image: xcode11 + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../example//examples + addons: + apt: + packages: + - clang-6.0 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-6.0 + + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=c++11 TEST_SUITE=../tools + addons: + apt: + packages: + - clang-6.0 + - libgmp-dev + - libmpfr-dev + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-6.0 + + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=special_fun + osx_image: xcode11 + + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=distribution_tests + osx_image: xcode11 + + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=misc + osx_image: xcode11 - os: osx - env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=quadrature + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE="quadrature include=/usr/local/include/eigen3" osx_image: xcode11 + addons: + homebrew: + packages: + eigen - # - os: osx - # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=float128_tests - # osx_image: xcode11 + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=float128_tests + osx_image: xcode11 - # - os: osx - # env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=../example//examples - # osx_image: xcode11 + - os: osx + env: TOOLSET=clang COMPILER=clang++ CXXSTD=c++14 TEST_SUITE=../example//examples + osx_image: xcode11 install: diff --git a/appveyor.yml b/appveyor.yml index bbee7ac0aa..01848bbcd2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,97 +16,95 @@ platform: environment: matrix: - - ARGS: --toolset=msvc-9.0 address-model=32 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-10.0 address-model=32 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-11.0 address-model=32 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-12.0 address-model=32 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-14.0 address-model=32 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-9.0 address-model=32 + # - ARGS: --toolset=msvc-9.0 address-model=32 + # TEST_SUITE: special_fun distribution_tests + # - ARGS: --toolset=msvc-10.0 address-model=32 + # TEST_SUITE: special_fun distribution_tests + # - ARGS: --toolset=msvc-11.0 address-model=32 + # TEST_SUITE: special_fun distribution_tests + # - ARGS: --toolset=msvc-12.0 address-model=32 + # TEST_SUITE: special_fun distribution_tests + # - ARGS: --toolset=msvc-14.0 address-model=32 + # TEST_SUITE: special_fun distribution_tests + - ARGS: --include=/c/tools/vcpkg/installed/eigen3_x86-windows --toolset=msvc-9.0 address-model=32 TEST_SUITE: misc quadrature ../example//examples - ARGS: --toolset=msvc-10.0 address-model=32 TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=msvc-11.0 address-model=32 + - ARGS: --toolset=msvc-11.0 address-model=32 include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=msvc-12.0 address-model=32 + - ARGS: --toolset=msvc-12.0 address-model=32 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=msvc-14.0 address-model=32 + - ARGS: --toolset=msvc-14.0 address-model=32 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=msvc-12.0 address-model=64 - TEST_SUITE: special_fun distribution_tests - - ARGS: --toolset=msvc-12.0 address-model=64 + # - ARGS: --toolset=msvc-12.0 address-model=64 + # TEST_SUITE: special_fun distribution_tests + - ARGS: --toolset=msvc-12.0 address-model=64 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=msvc-14.0 address-model=64 - TEST_SUITE: special_fun - - ARGS: --toolset=msvc-14.0 address-model=64 - TEST_SUITE: distribution_tests - - ARGS: --toolset=msvc-14.0 address-model=64 + # - ARGS: --toolset=msvc-14.0 address-model=64 + # TEST_SUITE: special_fun + # - ARGS: --toolset=msvc-14.0 address-model=64 + # TEST_SUITE: distribution_tests + - ARGS: --toolset=msvc-14.0 address-model=64 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=17 - TEST_SUITE: special_fun distribution_tests + # - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + # ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=17 + # TEST_SUITE: special_fun distribution_tests - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=17 + ARGS: --toolset=msvc-14.1 address-model=64 cxxstd=17 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARGS: --toolset=msvc-14.1 address-model=32 - TEST_SUITE: special_fun + # - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + # ARGS: --toolset=msvc-14.1 address-model=32 + # TEST_SUITE: special_fun - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARGS: --toolset=msvc-14.1 address-model=32 - TEST_SUITE: distribution_tests + # - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + # ARGS: --toolset=msvc-14.1 address-model=32 + # TEST_SUITE: distribution_tests - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARGS: --toolset=msvc-14.1 address-model=32 + ARGS: --toolset=msvc-14.1 address-model=32 --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: misc quadrature ../example//examples - - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: float128_tests - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 + # TEST_SUITE: float128_tests + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z - TEST_SUITE: float128_tests - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z + # TEST_SUITE: float128_tests + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: special_fun - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 + # TEST_SUITE: special_fun + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z - TEST_SUITE: special_fun - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z + # TEST_SUITE: special_fun + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: distribution_tests - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 + # TEST_SUITE: distribution_tests + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z - TEST_SUITE: distribution_tests - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z + # TEST_SUITE: distribution_tests + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: misc - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 + # TEST_SUITE: misc + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z + - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z --include=/c/tools/vcpkg/installed/eigen3_x86-windows TEST_SUITE: quadrature PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - ARGS: --toolset=gcc address-model=64 - TEST_SUITE: ../example//examples - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - - - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z - TEST_SUITE: ../example//examples - PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% - + # - ARGS: --toolset=gcc address-model=64 + # TEST_SUITE: ../example//examples + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% + # - ARGS: --toolset=gcc address-model=64 cxxflags=-std=gnu++1z + # TEST_SUITE: ../example//examples + # PATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;%PATH% install: - cd .. @@ -122,6 +120,8 @@ install: - xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\math - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py math + - vcpkg install eigen3 + - vcpkg integrate install - bootstrap - b2 headers diff --git a/include/boost/math/differentiation/autodiff_eigen.hpp b/include/boost/math/differentiation/autodiff_eigen.hpp deleted file mode 100644 index 1c7c44f977..0000000000 --- a/include/boost/math/differentiation/autodiff_eigen.hpp +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP -#define BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP - -#include <Eigen/Core> -#include <boost/math/differentiation/autodiff.hpp> - -namespace Eigen { -template <typename RealType, size_t Order> -struct NumTraits<boost::math::differentiation::autodiff_v1::detail:: - template fvar<RealType, Order>> : NumTraits<RealType> { - using fvar = - boost::math::differentiation::autodiff_v1::detail::template fvar<RealType, - Order>; - - enum { - RequireInitialization = 1, - ReadCost = 1, - AddCost = 16, - MulCost = 16, - }; -}; - -template <typename RealType, size_t Order, typename BinaryOp, typename A> -struct ScalarBinaryOpTraits<boost::math::differentiation::autodiff_v1::detail:: - template fvar<RealType, Order>, - A, BinaryOp> { - typedef boost::math::differentiation::autodiff_v1::detail::template fvar< - RealType, Order> - ReturnType; -}; - -template <typename RealType, size_t Order, typename BinaryOp, typename A> -struct ScalarBinaryOpTraits<A, - boost::math::differentiation::autodiff_v1::detail:: - template fvar<RealType, Order>, - BinaryOp> { - typedef boost::math::differentiation::autodiff_v1::detail::template fvar< - RealType, Order> - ReturnType; -}; - -template <typename RealType, size_t Order, typename RealType2, size_t Order2, - typename BinaryOp> -struct ScalarBinaryOpTraits< - boost::math::differentiation::autodiff_v1::detail::template fvar<RealType, - Order>, - boost::math::differentiation::autodiff_v1::detail::template fvar<RealType2, - Order2>, - BinaryOp> { - typedef ScalarBinaryOpTraits<RealType, RealType2, BinaryOp>::ReturnType - RealReturn; - const size_t ReturnOrder = (Order > Order2) ? Order : Order2; - typedef boost::math::differentiation::autodiff_v1::detail::template fvar< - RealReturn, ReturnOrder> - ReturnType; -} -} // namespace Eigen - -#endif // BOOST_MATH_DIFFERENTIATION_AUTODIFF_EIGEN_HPP diff --git a/test/test_autodiff_9.cpp b/test/test_autodiff_9.cpp index 926ef24449..8b373c39fd 100644 --- a/test/test_autodiff_9.cpp +++ b/test/test_autodiff_9.cpp @@ -1,15 +1,64 @@ #include <Eigen/Core> -#include <boost/math/differentiation/autodiff_eigen.hpp> +#include <Eigen/Dense> #include "test_autodiff.hpp" +namespace Eigen { +template <typename RealType, size_t Order> +struct NumTraits<boost::math::differentiation::autodiff_v1::detail:: + template fvar<RealType, Order>> : NumTraits<RealType> { + using fvar = + boost::math::differentiation::autodiff_v1::detail::template fvar<RealType, + Order>; + + enum { + RequireInitialization = 1, + ReadCost = 1, + AddCost = 16, + MulCost = 16, + }; +}; + +#define BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(A) \ + template <class RealType, size_t Order, typename BinaryOp> \ + struct ScalarBinaryOpTraits<boost::math::differentiation::autodiff_v1:: \ + detail::template fvar<RealType, Order>, \ + A, BinaryOp> { \ + typedef boost::math::differentiation::autodiff_v1::detail::template fvar< \ + RealType, Order> \ + ReturnType; \ + }; \ + template <class RealType, size_t Order, typename BinaryOp> \ + struct ScalarBinaryOpTraits<A, \ + boost::math::differentiation::autodiff_v1:: \ + detail::template fvar<RealType, Order>, \ + BinaryOp> { \ + typedef boost::math::differentiation::autodiff_v1::detail::template fvar< \ + RealType, Order> \ + ReturnType; \ + }; + +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(float); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(double); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(long double); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(short); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned short); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(int); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned int); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(long); +BOOST_AUTODIFF_EIGEN_SCALAR_TRAITS(unsigned long); + +} // namespace Eigen + BOOST_AUTO_TEST_SUITE(test_autodiff_9) +using boost::math::differentiation::autodiff_v1::detail::fvar; + BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_init, T, all_float_types) { constexpr int size = 5; constexpr std::size_t n = 5; - typedef typename fvar<T, n> fTn; + typedef fvar<T, n> fTn; Eigen::Matrix<fTn, size, 1> x; x[0] = fTn(1.5); x[1] = make_fvar<T, n - 1>(2.5); @@ -18,19 +67,19 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_init, T, all_float_types) { x[4] = 5.5; constexpr std::size_t m = 2; - typedef typename fvar<T, n> fTm; + typedef fvar<T, m> fTm; Eigen::Matrix<fTm, size, 1> y; - y = x.template cast<fTn>(); + y = x.template cast<fTm>(); BOOST_CHECK_EQUAL(x[0].derivative(0), y[0].derivative(0)); BOOST_CHECK_EQUAL(x[1].derivative(0), y[1].derivative(0)); BOOST_CHECK_EQUAL(x[2].derivative(0), y[2].derivative(0)); BOOST_CHECK_EQUAL(x[3].derivative(0), y[3].derivative(0)); BOOST_CHECK_EQUAL(x[4].derivative(0), y[4].derivative(0)); - constexpr std::size_t p = 3; - typedef typename fvar<T, p> fTp; - Eigen::Matrix<fTp, 1, size> z = - Eigen::Matrix<fTn, size, 1>::Random().transpose().template cast<fTp>(); + // constexpr std::size_t p = 3; + // typedef fvar<T, p> fTp; + // Eigen::Matrix<fTp, 1, size> z = + // Eigen::Matrix<fTn, size, 1>::Random().transpose().template cast<fTp>(); } BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_general, T, all_float_types) { @@ -40,23 +89,23 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_general, T, all_float_types) { using std::pow; using std::sin; - constexpr int dim = 3; + constexpr int dim = 4; constexpr std::size_t n = 2; constexpr double p = 3.456; - typedef typename fvar<T, n> fTn; + typedef fvar<T, n> fTn; Eigen::Matrix<fTn, dim, 1> x; - x[0] = -1; - x[1] = 0; - x[2] = 1; - x[3] = 5; + x[0] = make_fvar<T, n>(-1); + x[1] = make_fvar<T, n>(0); + x[2] = make_fvar<T, n>(1); + x[3] = make_fvar<T, n>(5); Eigen::Matrix<fTn, dim, 1> y1, y2, y3, y4, y5; - y1 = sin(x); - y2 = cos(x); - y3 = exp(x); - y4 = pow(x, p); - y5 = log(x); + y1 = x.array().sin(); + y2 = x.array().cos(); + y3 = x.array().exp(); + y4 = x.array().pow(p); + y5 = x.array().log(); // Check sin BOOST_CHECK_EQUAL(y1[0].derivative(0), sin(x[0].derivative(0))); @@ -100,39 +149,37 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_general, T, all_float_types) { BOOST_CHECK_EQUAL(y3[2].derivative(2), exp(x[2].derivative(0))); BOOST_CHECK_EQUAL(y3[3].derivative(2), exp(x[3].derivative(0))); - // Check pow - BOOST_CHECK_EQUAL(y4[0].derivative(0), pow(x[0].derivative(0), p)); - BOOST_CHECK_EQUAL(y4[1].derivative(0), pow(x[1].derivative(0), p)); - BOOST_CHECK_EQUAL(y4[2].derivative(0), pow(x[2].derivative(0), p)); - BOOST_CHECK_EQUAL(y4[3].derivative(0), pow(x[3].derivative(0), p)); - BOOST_CHECK_EQUAL(y4[0].derivative(1), p * pow(x[0].derivative(0), p - 1)); - BOOST_CHECK_EQUAL(y4[1].derivative(1), p * pow(x[1].derivative(0), p - 1)); - BOOST_CHECK_EQUAL(y4[2].derivative(1), p * pow(x[2].derivative(0), p - 1)); - BOOST_CHECK_EQUAL(y4[3].derivative(1), p * pow(x[3].derivative(0), p - 1)); - BOOST_CHECK_EQUAL(y4[0].derivative(2), - (p - 1) * p * pow(x[0].derivative(0), p - 2)); - BOOST_CHECK_EQUAL(y4[1].derivative(2), - (p - 1) * p * pow(x[1].derivative(0), p - 2)); - BOOST_CHECK_EQUAL(y4[2].derivative(2), - (p - 1) * p * pow(x[2].derivative(0), p - 2)); - BOOST_CHECK_EQUAL(y4[3].derivative(2), - (p - 1) * p * pow(x[3].derivative(0), p - 2)); - - // Check log - BOOST_CHECK_EQUAL(y5[2].derivative(0), log(x[0].derivative(0)); - BOOST_CHECK_EQUAL(y5[3].derivative(0), log(x[3].derivative(0)); - BOOST_CHECK_EQUAL(y5[2].derivative(1), 1/x[2].derivative(0)); - BOOST_CHECK_EQUAL(y5[3].derivative(1), 1/x[3].derivative(0)); - BOOST_CHECK_EQUAL(y5[2].derivative(2), -1/pow(x[2].derivative(0), 2)); - BOOST_CHECK_EQUAL(y5[3].derivative(2), -1/pow(x[3].derivative(0), 2)); + // Check pow (without negative or zero) + T powTol = 1e-4; + BOOST_CHECK_CLOSE(y4[2].derivative(0), pow(x[2].derivative(0), p), powTol); + BOOST_CHECK_CLOSE(y4[3].derivative(0), pow(x[3].derivative(0), p), powTol); + BOOST_CHECK_CLOSE(y4[2].derivative(1), p * pow(x[2].derivative(0), p - 1), + powTol); + BOOST_CHECK_CLOSE(y4[3].derivative(1), p * pow(x[3].derivative(0), p - 1), + powTol); + BOOST_CHECK_CLOSE(y4[2].derivative(2), + (p - 1) * p * pow(x[2].derivative(0), p - 2), powTol); + BOOST_CHECK_CLOSE(y4[3].derivative(2), + (p - 1) * p * pow(x[3].derivative(0), p - 2), powTol); + + // Check log (without negative or zero) + T logTol = 1e-5; + BOOST_CHECK_CLOSE(y5[2].derivative(0), log(x[2].derivative(0)), logTol); + BOOST_CHECK_CLOSE(y5[3].derivative(0), log(x[3].derivative(0)), logTol); + BOOST_CHECK_CLOSE(y5[2].derivative(1), 1 / x[2].derivative(0), logTol); + BOOST_CHECK_CLOSE(y5[3].derivative(1), 1 / x[3].derivative(0), logTol); + BOOST_CHECK_CLOSE(y5[2].derivative(2), -1 / pow(x[2].derivative(0), 2), + logTol); + BOOST_CHECK_CLOSE(y5[3].derivative(2), -1 / pow(x[3].derivative(0), 2), + logTol); } BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_scalar, T, all_float_types) { constexpr int dim = 4; constexpr size_t n = 4; - typedef typename fvar<T, n> fTn; - fTn x = 4; + typedef fvar<T, n> fTn; + fTn x = make_fvar<T, n>(4); Eigen::Matrix<fTn, dim, 1> X; Eigen::Matrix<fTn, dim, 1> Z; Eigen::Matrix<fTn, dim, dim> I = Eigen::Matrix<fTn, dim, dim>::Identity(); @@ -170,8 +217,8 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_vector, T, all_float_types) { constexpr int dim = 3; constexpr size_t n = 4; - typedef typename fvar<T, n> fTn; - fTn x = 5; + typedef fvar<T, n> fTn; + fTn x = make_fvar<T, n>(5); T xD0 = x.derivative(0); Eigen::Matrix<fTn, dim, 1> X; X[0] = 1; @@ -190,8 +237,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_vector, T, all_float_types) { Eigen::Matrix<fTn, dim, 1> Y = M * X; + T powTol = 1e-4; + // Y[0] = 1 + 2*x + x*x*x - BOOST_CHECK_EQUAL(Y[0].derivative(0), 1 + 2 * xD0 + pow(xD0, 3)); + BOOST_CHECK_CLOSE(Y[0].derivative(0), 1 + 2 * xD0 + pow(xD0, 3), powTol); BOOST_CHECK_EQUAL(Y[0].derivative(1), 2 + 3 * xD0 * xD0); BOOST_CHECK_EQUAL(Y[0].derivative(2), 6 * xD0); BOOST_CHECK_EQUAL(Y[0].derivative(3), 6); @@ -200,30 +249,64 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_vector, T, all_float_types) { // Y[1] = 1/x + 4*x + 0 BOOST_CHECK_EQUAL(Y[1].derivative(0), 1 / xD0 + 4 * xD0); BOOST_CHECK_EQUAL(Y[1].derivative(1), -1 / (xD0 * xD0) + 4); - BOOST_CHECK_EQUAL(Y[1].derivative(2), 2 / (pow(xD0, 3))); - BOOST_CHECK_EQUAL(Y[1].derivative(3), -6 / (pow(xD0, 3) * xD0)); - BOOST_CHECK_EQUAL(Y[1].derivative(4), 24 / (pow(xD0, 3) * xD0 * xD0)); + BOOST_CHECK_CLOSE(Y[1].derivative(2), 2 / (pow(xD0, 3)), powTol); + BOOST_CHECK_CLOSE(Y[1].derivative(3), -6 / (pow(xD0, 3) * xD0), powTol); + BOOST_CHECK_CLOSE(Y[1].derivative(4), 24 / (pow(xD0, 3) * xD0 * xD0), powTol); // Y[2] = 5 + x*sin(x) + x*x*cos(x*x) BOOST_CHECK_EQUAL(Y[2].derivative(0), 5 + xD0 * sin(xD0) + xD0 * xD0 * cos(xD0 * xD0)); - BOOST_CHECK_EQUAL(Y[2].derivative(1), 2 * xD0 * cos(xD0 * xD0) - - 2 * pow(xD0, 3) * sin(xD0 * xD0) + - sin(xD0) + xD0 * cos(xD0)); - BOOST_CHECK_EQUAL(Y[2].derivative(2), + BOOST_CHECK_CLOSE(Y[2].derivative(1), + 2 * xD0 * cos(xD0 * xD0) - + 2 * pow(xD0, 3) * sin(xD0 * xD0) + sin(xD0) + + xD0 * cos(xD0), + powTol); + BOOST_CHECK_CLOSE(Y[2].derivative(2), -xD0 * (10 * xD0 * sin(xD0 * xD0) + sin(xD0)) + - (2 - 4 * pow(xD0, 4)) * cos(xD0 * xD0) + 2 * cos(xD0)); - BOOST_CHECK_EQUAL(Y[2].derivative(3), -24 * xD0 * sin(xD0 * xD0) + - 8 * pow(xD0, 5) * sin(xD0 * xD0) - - 36 * pow(xD0, 3) * cos(xD0 * xD0) - - 3 * sin(xD0) - xD0 * cos(xD0)); - BOOST_CHECK_EQUAL( + (2 - 4 * pow(xD0, 4)) * cos(xD0 * xD0) + 2 * cos(xD0), + powTol); + BOOST_CHECK_CLOSE( + Y[2].derivative(3), + -24 * xD0 * sin(xD0 * xD0) + 8 * pow(xD0, 5) * sin(xD0 * xD0) - + 36 * pow(xD0, 3) * cos(xD0 * xD0) - 3 * sin(xD0) - xD0 * cos(xD0), + powTol); + BOOST_CHECK_CLOSE( Y[2].derivative(4), -24 * sin(xD0 * xD0) + 112 * pow(xD0, 4) * sin(xD0 * xD0) + 4 * (4 * pow(xD0, 4) - 39) * xD0 * xD0 * cos(xD0 * xD0) + - xD0 * sin(xD0) - 4 * cos(xD0)); + xD0 * sin(xD0) - 4 * cos(xD0), + powTol); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_determinant, T, all_float_types) { + using std::cos; + using std::sin; + constexpr int dim = 4; + constexpr size_t n = 1; + + typedef fvar<T, n> fTn; + fTn x = make_fvar<T, n>(3); + T xD0 = x.derivative(0); + Eigen::Matrix<fTn, dim, dim> M = 10 * Eigen::Matrix<fTn, dim, dim>::Random(); + M(0, 3) = x; + M(1, 0) = 3 * x; + M(1, 2) = 1 / x; + M(2, 2) = x * x; + M(3, 1) = sin(x); + fTn y = M.determinant(); + + Eigen::Matrix<T, dim, dim> dMdx = Eigen::Matrix<T, dim, dim>::Zero(); + dMdx(0, 3) = 1; + dMdx(1, 0) = 3; + dMdx(1, 2) = -1 / (xD0 * xD0); + dMdx(2, 2) = 2 * xD0; + dMdx(3, 1) = cos(xD0); + + T detTol = 1e-3; + + T ans = y.derivative(0) * + (M.inverse() * dMdx.template cast<fTn>()).trace().derivative(0); + BOOST_CHECK_CLOSE(y.derivative(1), ans, detTol); } -// BOOST_AUTO_TEST_CASE_TEMPLATE(eigen_determinant, T, all_float_types) { -// constexpr int dim = 4; -// } +BOOST_AUTO_TEST_SUITE_END()