11 #ifndef EIGEN_MACROS_H 12 #define EIGEN_MACROS_H 18 #define EIGEN_WORLD_VERSION 3 19 #define EIGEN_MAJOR_VERSION 4 20 #define EIGEN_MINOR_VERSION 0 22 #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \ 23 (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \ 24 EIGEN_MINOR_VERSION>=z)))) 26 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR 27 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::RowMajor 29 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::ColMajor 32 #ifndef EIGEN_DEFAULT_DENSE_INDEX_TYPE 33 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE std::ptrdiff_t 39 #ifndef EIGEN_MAX_CPP_VER 40 #define EIGEN_MAX_CPP_VER 99 48 #ifndef EIGEN_FAST_MATH 49 #define EIGEN_FAST_MATH 1 52 #ifndef EIGEN_STACK_ALLOCATION_LIMIT 54 #define EIGEN_STACK_ALLOCATION_LIMIT 131072 63 #define EIGEN_COMP_GNUC (__GNUC__*10+__GNUC_MINOR__) 65 #define EIGEN_COMP_GNUC 0 69 #if defined(__clang__) 70 #define EIGEN_COMP_CLANG (__clang_major__*100+__clang_minor__) 72 #define EIGEN_COMP_CLANG 0 76 #if defined(__castxml__) 77 #define EIGEN_COMP_CASTXML 1 79 #define EIGEN_COMP_CASTXML 0 84 #define EIGEN_COMP_LLVM 1 86 #define EIGEN_COMP_LLVM 0 90 #if defined(__INTEL_COMPILER) 91 #define EIGEN_COMP_ICC __INTEL_COMPILER 93 #define EIGEN_COMP_ICC 0 97 #if defined(__MINGW32__) 98 #define EIGEN_COMP_MINGW 1 100 #define EIGEN_COMP_MINGW 0 104 #if defined(__SUNPRO_CC) 105 #define EIGEN_COMP_SUNCC 1 107 #define EIGEN_COMP_SUNCC 0 111 #if defined(_MSC_VER) 112 #define EIGEN_COMP_MSVC _MSC_VER 114 #define EIGEN_COMP_MSVC 0 117 #if defined(__NVCC__) 118 #if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9) 119 #define EIGEN_COMP_NVCC ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100)) 120 #elif defined(__CUDACC_VER__) 121 #define EIGEN_COMP_NVCC __CUDACC_VER__ 123 #error "NVCC did not define compiler version." 126 #define EIGEN_COMP_NVCC 0 144 #if defined(_MSVC_LANG) 145 #define EIGEN_COMP_MSVC_LANG _MSVC_LANG 147 #define EIGEN_COMP_MSVC_LANG 0 157 #if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC || EIGEN_COMP_LLVM || EIGEN_COMP_CLANG) 158 #define EIGEN_COMP_MSVC_STRICT _MSC_VER 160 #define EIGEN_COMP_MSVC_STRICT 0 169 #if defined(__IBMCPP__) || defined(__xlc__) || defined(__ibmxl__) 170 #define EIGEN_COMP_IBM __xlC__ 172 #define EIGEN_COMP_IBM 0 177 #define EIGEN_COMP_PGI (__PGIC__*100+__PGIC_MINOR__) 179 #define EIGEN_COMP_PGI 0 183 #if defined(__CC_ARM) || defined(__ARMCC_VERSION) 184 #define EIGEN_COMP_ARM 1 186 #define EIGEN_COMP_ARM 0 190 #if defined(__EMSCRIPTEN__) 191 #define EIGEN_COMP_EMSCRIPTEN 1 193 #define EIGEN_COMP_EMSCRIPTEN 0 198 #if EIGEN_COMP_GNUC && !(EIGEN_COMP_CLANG || EIGEN_COMP_ICC || EIGEN_COMP_MINGW || EIGEN_COMP_PGI || EIGEN_COMP_IBM || EIGEN_COMP_ARM || EIGEN_COMP_EMSCRIPTEN) 199 #define EIGEN_COMP_GNUC_STRICT 1 201 #define EIGEN_COMP_GNUC_STRICT 0 206 #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__==x && __GNUC_MINOR__>=y) || __GNUC__>x) 207 #define EIGEN_GNUC_AT_MOST(x,y) ((__GNUC__==x && __GNUC_MINOR__<=y) || __GNUC__<x) 208 #define EIGEN_GNUC_AT(x,y) ( __GNUC__==x && __GNUC_MINOR__==y ) 210 #define EIGEN_GNUC_AT_LEAST(x,y) 0 211 #define EIGEN_GNUC_AT_MOST(x,y) 0 212 #define EIGEN_GNUC_AT(x,y) 0 216 #if EIGEN_COMP_GNUC && (__GNUC__ <= 3) 217 #define EIGEN_GCC3_OR_OLDER 1 219 #define EIGEN_GCC3_OR_OLDER 0 229 #if defined(__x86_64__) || (defined(_M_X64) && !defined(_M_ARM64EC)) || defined(__amd64) 230 #define EIGEN_ARCH_x86_64 1 232 #define EIGEN_ARCH_x86_64 0 235 #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__i386) 236 #define EIGEN_ARCH_i386 1 238 #define EIGEN_ARCH_i386 0 241 #if EIGEN_ARCH_x86_64 || EIGEN_ARCH_i386 242 #define EIGEN_ARCH_i386_OR_x86_64 1 244 #define EIGEN_ARCH_i386_OR_x86_64 0 249 #define EIGEN_ARCH_ARM 1 251 #define EIGEN_ARCH_ARM 0 255 #if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) 256 #define EIGEN_ARCH_ARM64 1 258 #define EIGEN_ARCH_ARM64 0 262 #if EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64 263 #define EIGEN_ARCH_ARM_OR_ARM64 1 265 #define EIGEN_ARCH_ARM_OR_ARM64 0 269 #if EIGEN_ARCH_ARM_OR_ARM64 && defined(__ARM_ARCH) && __ARM_ARCH >= 8 270 #define EIGEN_ARCH_ARMV8 1 272 #define EIGEN_ARCH_ARMV8 0 279 #ifndef EIGEN_HAS_ARM64_FP16 280 #if defined(__ARM_FP16_FORMAT_IEEE) 281 #define EIGEN_HAS_ARM64_FP16 1 283 #define EIGEN_HAS_ARM64_FP16 0 291 #ifndef EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 292 #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) 293 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 1 295 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 0 303 #ifndef EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC 304 #if defined(__ARM_FEATURE_FP16_SCALAR_ARITHMETIC) 305 #define EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC 1 311 #if defined(__mips__) || defined(__mips) 312 #define EIGEN_ARCH_MIPS 1 314 #define EIGEN_ARCH_MIPS 0 318 #if defined(__sparc__) || defined(__sparc) 319 #define EIGEN_ARCH_SPARC 1 321 #define EIGEN_ARCH_SPARC 0 325 #if defined(__ia64__) 326 #define EIGEN_ARCH_IA64 1 328 #define EIGEN_ARCH_IA64 0 332 #if defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC) 333 #define EIGEN_ARCH_PPC 1 335 #define EIGEN_ARCH_PPC 0 345 #if defined(__unix__) || defined(__unix) 346 #define EIGEN_OS_UNIX 1 348 #define EIGEN_OS_UNIX 0 352 #if defined(__linux__) 353 #define EIGEN_OS_LINUX 1 355 #define EIGEN_OS_LINUX 0 360 #if defined(__ANDROID__) || defined(ANDROID) 361 #define EIGEN_OS_ANDROID 1 363 #define EIGEN_OS_ANDROID 0 367 #if defined(__gnu_linux__) && !(EIGEN_OS_ANDROID) 368 #define EIGEN_OS_GNULINUX 1 370 #define EIGEN_OS_GNULINUX 0 374 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) 375 #define EIGEN_OS_BSD 1 377 #define EIGEN_OS_BSD 0 381 #if defined(__APPLE__) 382 #define EIGEN_OS_MAC 1 384 #define EIGEN_OS_MAC 0 389 #define EIGEN_OS_QNX 1 391 #define EIGEN_OS_QNX 0 396 #define EIGEN_OS_WIN 1 398 #define EIGEN_OS_WIN 0 403 #define EIGEN_OS_WIN64 1 405 #define EIGEN_OS_WIN64 0 409 #if defined(_WIN32_WCE) 410 #define EIGEN_OS_WINCE 1 412 #define EIGEN_OS_WINCE 0 416 #if defined(__CYGWIN__) 417 #define EIGEN_OS_CYGWIN 1 419 #define EIGEN_OS_CYGWIN 0 423 #if EIGEN_OS_WIN && !( EIGEN_OS_WINCE || EIGEN_OS_CYGWIN ) 424 #define EIGEN_OS_WIN_STRICT 1 426 #define EIGEN_OS_WIN_STRICT 0 438 #if (defined(sun) || defined(__sun)) && !(defined(__SVR4) || defined(__svr4__)) 439 #define EIGEN_OS_SUN __SUNPRO_C 441 #define EIGEN_OS_SUN 0 445 #if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__)) 446 #define EIGEN_OS_SOLARIS 1 448 #define EIGEN_OS_SOLARIS 0 458 #if defined(__NVCC__) && defined(__HIPCC__) 459 #error "NVCC as the target platform for HIPCC is currently not supported." 462 #if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA) 464 #define EIGEN_CUDACC __CUDACC__ 467 #if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA) 469 #define EIGEN_CUDA_ARCH __CUDA_ARCH__ 472 #if defined(EIGEN_CUDACC) 474 #define EIGEN_CUDA_SDK_VER (CUDA_VERSION * 10) 476 #define EIGEN_CUDA_SDK_VER 0 479 #if defined(__HIPCC__) && !defined(EIGEN_NO_HIP) 481 #define EIGEN_HIPCC __HIPCC__ 486 #include <hip/hip_runtime.h> 488 #if defined(__HIP_DEVICE_COMPILE__) 490 #define EIGEN_HIP_DEVICE_COMPILE __HIP_DEVICE_COMPILE__ 505 #define EIGEN_HIP_LAUNCH_BOUNDS_1024 __launch_bounds__(1024) 509 #if !defined(EIGEN_HIP_LAUNCH_BOUNDS_1024) 510 #define EIGEN_HIP_LAUNCH_BOUNDS_1024 511 #endif // !defined(EIGEN_HIP_LAUNCH_BOUNDS_1024) 515 #if defined(EIGEN_CUDACC) || defined(EIGEN_HIPCC) 538 #if defined(EIGEN_CUDA_ARCH) || defined(EIGEN_HIP_DEVICE_COMPILE) 542 #define EIGEN_GPU_COMPILE_PHASE 568 #if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__) 571 #define SYCL_DEVICE_ONLY 578 #if EIGEN_GNUC_AT_MOST(4,3) && !EIGEN_COMP_CLANG 580 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0 582 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1 587 # define EIGEN_HAS_BUILTIN(x) __has_builtin(x) 589 # define EIGEN_HAS_BUILTIN(x) 0 594 #ifndef __has_feature 595 # define __has_feature(x) 0 600 #if !( EIGEN_COMP_CLANG && ( (EIGEN_COMP_CLANG<309) \ 601 || (defined(__apple_build_version__) && (__apple_build_version__ < 9000000))) \ 602 || EIGEN_COMP_GNUC_STRICT && EIGEN_COMP_GNUC<49) 603 #define EIGEN_HAS_STATIC_ARRAY_TEMPLATE 1 605 #define EIGEN_HAS_STATIC_ARRAY_TEMPLATE 0 615 #if EIGEN_COMP_MSVC_LANG > 0 616 #define EIGEN_CPLUSPLUS EIGEN_COMP_MSVC_LANG 617 #elif EIGEN_COMP_MSVC >= 1900 618 #define EIGEN_CPLUSPLUS 201103L 619 #elif defined(__cplusplus) 620 #define EIGEN_CPLUSPLUS __cplusplus 622 #define EIGEN_CPLUSPLUS 0 628 #if EIGEN_CPLUSPLUS > 201703L 629 #define EIGEN_COMP_CXXVER 20 630 #elif EIGEN_CPLUSPLUS > 201402L 631 #define EIGEN_COMP_CXXVER 17 632 #elif EIGEN_CPLUSPLUS > 201103L 633 #define EIGEN_COMP_CXXVER 14 634 #elif EIGEN_CPLUSPLUS >= 201103L 635 #define EIGEN_COMP_CXXVER 11 637 #define EIGEN_COMP_CXXVER 03 640 #ifndef EIGEN_HAS_CXX14_VARIABLE_TEMPLATES 641 #if defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304 && EIGEN_MAX_CPP_VER>=14 642 #define EIGEN_HAS_CXX14_VARIABLE_TEMPLATES 1 644 #define EIGEN_HAS_CXX14_VARIABLE_TEMPLATES 0 654 #if EIGEN_MAX_CPP_VER>=11 && EIGEN_COMP_CXXVER>=11 655 #define EIGEN_HAS_CXX11 1 657 #define EIGEN_HAS_CXX11 0 660 #if EIGEN_MAX_CPP_VER>=14 && EIGEN_COMP_CXXVER>=14 661 #define EIGEN_HAS_CXX14 1 663 #define EIGEN_HAS_CXX14 0 667 #ifndef EIGEN_HAS_RVALUE_REFERENCES 668 #if EIGEN_MAX_CPP_VER>=11 && \ 669 (__has_feature(cxx_rvalue_references) || \ 670 (EIGEN_COMP_CXXVER >= 11) || (EIGEN_COMP_MSVC >= 1600)) 671 #define EIGEN_HAS_RVALUE_REFERENCES 1 673 #define EIGEN_HAS_RVALUE_REFERENCES 0 680 #ifndef EIGEN_HAS_C99_MATH 681 #if EIGEN_MAX_CPP_VER>=11 && \ 682 ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) \ 683 || (defined(__GNUC__) && defined(_GLIBCXX_USE_C99)) \ 684 || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) \ 685 || (EIGEN_COMP_MSVC >= 1900) || defined(SYCL_DEVICE_ONLY)) 686 #define EIGEN_HAS_C99_MATH 1 688 #define EIGEN_HAS_C99_MATH 0 694 #ifndef EIGEN_HAS_STD_RESULT_OF 695 #if EIGEN_HAS_CXX11 && EIGEN_COMP_CXXVER < 17 696 #define EIGEN_HAS_STD_RESULT_OF 1 698 #define EIGEN_HAS_STD_RESULT_OF 0 703 #ifndef EIGEN_HAS_STD_HASH 706 #if EIGEN_HAS_CXX11 && !defined(EIGEN_GPU_COMPILE_PHASE) 707 #define EIGEN_HAS_STD_HASH 1 709 #define EIGEN_HAS_STD_HASH 0 711 #endif // EIGEN_HAS_STD_HASH 713 #ifndef EIGEN_HAS_STD_INVOKE_RESULT 714 #if EIGEN_MAX_CPP_VER >= 17 && EIGEN_COMP_CXXVER >= 17 715 #define EIGEN_HAS_STD_INVOKE_RESULT 1 717 #define EIGEN_HAS_STD_INVOKE_RESULT 0 721 #ifndef EIGEN_HAS_ALIGNAS 722 #if EIGEN_MAX_CPP_VER>=11 && EIGEN_HAS_CXX11 && \ 723 ( __has_feature(cxx_alignas) \ 725 || (EIGEN_COMP_MSVC >= 1800) \ 726 || (EIGEN_GNUC_AT_LEAST(4,8)) \ 727 || (EIGEN_COMP_CLANG>=305) \ 728 || (EIGEN_COMP_ICC>=1500) \ 729 || (EIGEN_COMP_PGI>=1500) \ 730 || (EIGEN_COMP_SUNCC>=0x5130)) 731 #define EIGEN_HAS_ALIGNAS 1 733 #define EIGEN_HAS_ALIGNAS 0 740 #ifndef EIGEN_HAS_TYPE_TRAITS 741 #if EIGEN_MAX_CPP_VER>=11 && (EIGEN_HAS_CXX11 || EIGEN_COMP_MSVC >= 1700) \ 742 && ((!EIGEN_COMP_GNUC_STRICT) || EIGEN_GNUC_AT_LEAST(5, 1)) \ 743 && ((!defined(__GLIBCXX__)) || __GLIBCXX__ > 20150626) 744 #define EIGEN_HAS_TYPE_TRAITS 1 745 #define EIGEN_INCLUDE_TYPE_TRAITS 747 #define EIGEN_HAS_TYPE_TRAITS 0 752 #ifndef EIGEN_HAS_VARIADIC_TEMPLATES 753 #if EIGEN_MAX_CPP_VER>=11 && (EIGEN_COMP_CXXVER >= 11) \ 754 && (!defined(__NVCC__) || !EIGEN_ARCH_ARM_OR_ARM64 || (EIGEN_COMP_NVCC >= 80000) ) 757 #define EIGEN_HAS_VARIADIC_TEMPLATES 1 758 #elif EIGEN_MAX_CPP_VER>=11 && (EIGEN_COMP_CXXVER >= 11) && defined(SYCL_DEVICE_ONLY) 759 #define EIGEN_HAS_VARIADIC_TEMPLATES 1 761 #define EIGEN_HAS_VARIADIC_TEMPLATES 0 766 #ifndef EIGEN_HAS_CONSTEXPR 767 #if defined(EIGEN_CUDACC) 769 #if EIGEN_MAX_CPP_VER>=14 && (EIGEN_COMP_CXXVER >= 11 && (EIGEN_COMP_CLANG || EIGEN_COMP_NVCC >= 70500)) 770 #define EIGEN_HAS_CONSTEXPR 1 772 #elif EIGEN_MAX_CPP_VER>=14 && (__has_feature(cxx_relaxed_constexpr) || (EIGEN_COMP_CXXVER >= 14) || \ 773 (EIGEN_GNUC_AT_LEAST(4,8) && (EIGEN_COMP_CXXVER >= 11)) || \ 774 (EIGEN_COMP_CLANG >= 306 && (EIGEN_COMP_CXXVER >= 11))) 775 #define EIGEN_HAS_CONSTEXPR 1 778 #ifndef EIGEN_HAS_CONSTEXPR 779 #define EIGEN_HAS_CONSTEXPR 0 782 #endif // EIGEN_HAS_CONSTEXPR 784 #if EIGEN_HAS_CONSTEXPR 785 #define EIGEN_CONSTEXPR constexpr 787 #define EIGEN_CONSTEXPR 792 #ifndef EIGEN_HAS_CXX11_MATH 793 #if EIGEN_MAX_CPP_VER>=11 && ((EIGEN_COMP_CXXVER > 11) || (EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC || EIGEN_COMP_ICC) \ 794 && (EIGEN_ARCH_i386_OR_x86_64) && (EIGEN_OS_GNULINUX || EIGEN_OS_WIN_STRICT || EIGEN_OS_MAC)) 795 #define EIGEN_HAS_CXX11_MATH 1 797 #define EIGEN_HAS_CXX11_MATH 0 802 #ifndef EIGEN_HAS_CXX11_CONTAINERS 803 #if EIGEN_MAX_CPP_VER>=11 && \ 804 ((EIGEN_COMP_CXXVER > 11) \ 805 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC || EIGEN_COMP_ICC>=1400))) 806 #define EIGEN_HAS_CXX11_CONTAINERS 1 808 #define EIGEN_HAS_CXX11_CONTAINERS 0 813 #ifndef EIGEN_HAS_CXX11_NOEXCEPT 814 #if EIGEN_MAX_CPP_VER>=11 && \ 815 (__has_feature(cxx_noexcept) \ 816 || (EIGEN_COMP_CXXVER > 11) \ 817 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC || EIGEN_COMP_ICC>=1400))) 818 #define EIGEN_HAS_CXX11_NOEXCEPT 1 820 #define EIGEN_HAS_CXX11_NOEXCEPT 0 824 #ifndef EIGEN_HAS_CXX11_ATOMIC 825 #if EIGEN_MAX_CPP_VER>=11 && \ 826 (__has_feature(cxx_atomic) \ 827 || (EIGEN_COMP_CXXVER > 11) \ 828 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_MSVC==0 || EIGEN_COMP_MSVC >= 1700))) 829 #define EIGEN_HAS_CXX11_ATOMIC 1 831 #define EIGEN_HAS_CXX11_ATOMIC 0 835 #ifndef EIGEN_HAS_CXX11_OVERRIDE_FINAL 836 #if EIGEN_MAX_CPP_VER>=11 && \ 837 (EIGEN_COMP_CXXVER >= 11 || EIGEN_COMP_MSVC >= 1700) 838 #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 1 840 #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 0 848 #ifndef EIGEN_HAS_CXX17_OVERALIGN 849 #if EIGEN_MAX_CPP_VER>=17 && EIGEN_COMP_CXXVER>=17 && ( \ 850 (EIGEN_COMP_MSVC >= 1912) \ 851 || (EIGEN_GNUC_AT_LEAST(7,0)) \ 852 || ((!defined(__apple_build_version__)) && (EIGEN_COMP_CLANG>=500)) \ 853 || (( defined(__apple_build_version__)) && (__apple_build_version__>=10000000)) \ 855 #define EIGEN_HAS_CXX17_OVERALIGN 1 857 #define EIGEN_HAS_CXX17_OVERALIGN 0 861 #if defined(EIGEN_CUDACC) && EIGEN_HAS_CONSTEXPR 863 #if defined(__NVCC__) 865 #ifdef __CUDACC_RELAXED_CONSTEXPR__ 866 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC 868 #elif defined(__clang__) && defined(__CUDA__) && __has_feature(cxx_relaxed_constexpr) 870 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC 882 #ifndef EIGEN_HAS_BUILTIN_INT128 883 #if defined(__SIZEOF_INT128__) && !(EIGEN_OS_WIN && EIGEN_COMP_CLANG) 884 #define EIGEN_HAS_BUILTIN_INT128 1 886 #define EIGEN_HAS_BUILTIN_INT128 0 896 #define EIGEN_NOT_A_MACRO 898 #define EIGEN_DEBUG_VAR(x) std::cerr << #x << " = " << x << std::endl; 901 #define EIGEN_CAT2(a,b) a ## b 902 #define EIGEN_CAT(a,b) EIGEN_CAT2(a,b) 904 #define EIGEN_COMMA , 907 #define EIGEN_MAKESTRING2(a) #a 908 #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a) 913 #ifndef EIGEN_STRONG_INLINE 914 #if (EIGEN_COMP_MSVC || EIGEN_COMP_ICC) && !defined(EIGEN_GPUCC) 915 #define EIGEN_STRONG_INLINE __forceinline 917 #define EIGEN_STRONG_INLINE inline 929 #if EIGEN_GNUC_AT_LEAST(4,2) && !defined(SYCL_DEVICE_ONLY) 930 #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline 932 #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE 936 #define EIGEN_DONT_INLINE __attribute__((noinline)) 937 #elif EIGEN_COMP_MSVC 938 #define EIGEN_DONT_INLINE __declspec(noinline) 940 #define EIGEN_DONT_INLINE 944 #define EIGEN_PERMISSIVE_EXPR __extension__ 946 #define EIGEN_PERMISSIVE_EXPR 952 #if defined(EIGEN_CUDACC) || defined(SYCL_DEVICE_ONLY) || defined(EIGEN_HIPCC) 954 #ifndef EIGEN_NO_DEBUG 955 #define EIGEN_NO_DEBUG 958 #ifdef EIGEN_INTERNAL_DEBUGGING 959 #undef EIGEN_INTERNAL_DEBUGGING 962 #ifdef EIGEN_EXCEPTIONS 963 #undef EIGEN_EXCEPTIONS 967 #if defined(SYCL_DEVICE_ONLY) 968 #ifndef EIGEN_DONT_VECTORIZE 969 #define EIGEN_DONT_VECTORIZE 971 #define EIGEN_DEVICE_FUNC __attribute__((flatten)) __attribute__((always_inline)) 973 #elif defined(EIGEN_GPUCC) 974 #define EIGEN_DEVICE_FUNC __host__ __device__ 976 #define EIGEN_DEVICE_FUNC 984 #define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC 985 #define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC inline 988 # ifndef EIGEN_NO_DEBUG 989 # define EIGEN_NO_DEBUG 994 #ifdef EIGEN_NO_DEBUG 995 #ifdef SYCL_DEVICE_ONLY // used to silence the warning on SYCL device 996 #define eigen_plain_assert(x) EIGEN_UNUSED_VARIABLE(x) 998 #define eigen_plain_assert(x) 1001 #if EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1007 #define eigen_plain_assert(x) assert(x) 1020 inline void assert_fail(
const char *condition,
const char *
function,
const char *
file,
int line)
1022 std::cerr <<
"assertion failed: " << condition <<
" in function " <<
function <<
" at " << file <<
":" << line << std::endl;
1027 #define eigen_plain_assert(x) \ 1029 if(!Eigen::internal::copy_bool(x)) \ 1030 Eigen::internal::assert_fail(EIGEN_MAKESTRING(x), __PRETTY_FUNCTION__, __FILE__, __LINE__); \ 1036 #ifndef eigen_assert 1037 #define eigen_assert(x) eigen_plain_assert(x) 1040 #ifdef EIGEN_INTERNAL_DEBUGGING 1041 #define eigen_internal_assert(x) eigen_assert(x) 1043 #define eigen_internal_assert(x) 1046 #ifdef EIGEN_NO_DEBUG 1047 #define EIGEN_ONLY_USED_FOR_DEBUG(x) EIGEN_UNUSED_VARIABLE(x) 1049 #define EIGEN_ONLY_USED_FOR_DEBUG(x) 1052 #ifndef EIGEN_NO_DEPRECATED_WARNING 1054 #define EIGEN_DEPRECATED __attribute__((deprecated)) 1055 #elif EIGEN_COMP_MSVC 1056 #define EIGEN_DEPRECATED __declspec(deprecated) 1058 #define EIGEN_DEPRECATED 1061 #define EIGEN_DEPRECATED 1065 #define EIGEN_UNUSED __attribute__((unused)) 1067 #define EIGEN_UNUSED 1076 #define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var); 1078 #if !defined(EIGEN_ASM_COMMENT) 1079 #if EIGEN_COMP_GNUC && (EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64) 1080 #define EIGEN_ASM_COMMENT(X) __asm__("#" X) 1082 #define EIGEN_ASM_COMMENT(X) 1092 #if !defined(EIGEN_OPTIMIZATION_BARRIER) 1126 #if EIGEN_ARCH_PPC && EIGEN_COMP_GNUC_STRICT 1131 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+r,v,wa" (X)); 1132 #elif EIGEN_ARCH_ARM_OR_ARM64 1134 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,w" (X)); 1135 #elif EIGEN_ARCH_i386_OR_x86_64 1137 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,x" (X)); 1140 #define EIGEN_OPTIMIZATION_BARRIER(X) 1144 #define EIGEN_OPTIMIZATION_BARRIER(X) 1151 # define EIGEN_CONST_CONDITIONAL(cond) (void)0, cond 1153 # define EIGEN_CONST_CONDITIONAL(cond) cond 1156 #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD 1157 #define EIGEN_RESTRICT 1159 #ifndef EIGEN_RESTRICT 1160 #define EIGEN_RESTRICT __restrict 1164 #ifndef EIGEN_DEFAULT_IO_FORMAT 1165 #ifdef EIGEN_MAKING_DOCS 1168 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat(3, 0, " ", "\n", "", "") 1170 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat() 1182 #if (defined(EIGEN_CUDA_ARCH) && defined(__NVCC__)) || defined(EIGEN_HIP_DEVICE_COMPILE) 1183 #define EIGEN_USING_STD(FUNC) using ::FUNC; 1185 #define EIGEN_USING_STD(FUNC) using std::FUNC; 1188 #if EIGEN_COMP_MSVC_STRICT && (EIGEN_COMP_MSVC < 1900 || (EIGEN_COMP_MSVC == 1900 && EIGEN_COMP_NVCC)) 1194 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1195 using Base::operator =; 1196 #elif EIGEN_COMP_CLANG // workaround clang bug (see http://forum.kde.org/viewtopic.php?f=74&t=102653) 1197 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1198 using Base::operator =; \ 1199 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) { Base::operator=(other); return *this; } \ 1200 template <typename OtherDerived> \ 1201 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const DenseBase<OtherDerived>& other) { Base::operator=(other.derived()); return *this; } 1203 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1204 using Base::operator =; \ 1205 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) \ 1207 Base::operator=(other); \ 1219 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) CLASS(const CLASS&) = default; 1221 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) 1231 #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) \ 1232 EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1233 EIGEN_DEFAULT_COPY_CONSTRUCTOR(Derived) 1243 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \ 1244 Derived() = default; \ 1245 ~Derived() = default; 1247 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \ 1264 #define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ 1265 typedef typename Eigen::internal::traits<Derived>::Scalar Scalar; \ 1266 typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; \ 1267 typedef typename Base::CoeffReturnType CoeffReturnType; \ 1268 typedef typename Eigen::internal::ref_selector<Derived>::type Nested; \ 1269 typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ 1270 typedef typename Eigen::internal::traits<Derived>::StorageIndex StorageIndex; \ 1271 enum CompileTimeTraits \ 1272 { RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ 1273 ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ 1274 Flags = Eigen::internal::traits<Derived>::Flags, \ 1275 SizeAtCompileTime = Base::SizeAtCompileTime, \ 1276 MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ 1277 IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ 1278 using Base::derived; \ 1279 using Base::const_cast_derived; 1283 #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ 1284 EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ 1285 typedef typename Base::PacketScalar PacketScalar; 1288 #define EIGEN_PLAIN_ENUM_MIN(a,b) (((int)a <= (int)b) ? (int)a : (int)b) 1289 #define EIGEN_PLAIN_ENUM_MAX(a,b) (((int)a >= (int)b) ? (int)a : (int)b) 1294 #define EIGEN_SIZE_MIN_PREFER_DYNAMIC(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ 1295 : ((int)a == 1 || (int)b == 1) ? 1 \ 1296 : ((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ 1297 : ((int)a <= (int)b) ? (int)a : (int)b) 1302 #define EIGEN_SIZE_MIN_PREFER_FIXED(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ 1303 : ((int)a == 1 || (int)b == 1) ? 1 \ 1304 : ((int)a == Dynamic && (int)b == Dynamic) ? Dynamic \ 1305 : ((int)a == Dynamic) ? (int)b \ 1306 : ((int)b == Dynamic) ? (int)a \ 1307 : ((int)a <= (int)b) ? (int)a : (int)b) 1310 #define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ 1311 : ((int)a >= (int)b) ? (int)a : (int)b) 1313 #define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b))) 1315 #define EIGEN_IMPLIES(a,b) (!(a) || (b)) 1317 #if EIGEN_HAS_BUILTIN(__builtin_expect) || EIGEN_COMP_GNUC 1318 #define EIGEN_PREDICT_FALSE(x) (__builtin_expect(x, false)) 1319 #define EIGEN_PREDICT_TRUE(x) (__builtin_expect(false || (x), true)) 1321 #define EIGEN_PREDICT_FALSE(x) (x) 1322 #define EIGEN_PREDICT_TRUE(x) (x) 1326 #define EIGEN_CWISE_BINARY_RETURN_TYPE(LHS,RHS,OPNAME) \ 1328 EIGEN_CAT(EIGEN_CAT(internal::scalar_,OPNAME),_op)< \ 1329 typename internal::traits<LHS>::Scalar, \ 1330 typename internal::traits<RHS>::Scalar \ 1336 #define EIGEN_MAKE_CWISE_BINARY_OP(METHOD,OPNAME) \ 1337 template<typename OtherDerived> \ 1338 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,OPNAME) \ 1339 (METHOD)(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \ 1341 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,OPNAME)(derived(), other.derived()); \ 1344 #define EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,TYPEA,TYPEB) \ 1345 (Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits<TYPEA,TYPEB,EIGEN_CAT(EIGEN_CAT(Eigen::internal::scalar_,OPNAME),_op)<TYPEA,TYPEB> > >::value) 1347 #define EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(EXPR,SCALAR,OPNAME) \ 1348 CwiseBinaryOp<EIGEN_CAT(EIGEN_CAT(internal::scalar_,OPNAME),_op)<typename internal::traits<EXPR>::Scalar,SCALAR>, const EXPR, \ 1349 const typename internal::plain_constant_type<EXPR,SCALAR>::type> 1351 #define EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(SCALAR,EXPR,OPNAME) \ 1352 CwiseBinaryOp<EIGEN_CAT(EIGEN_CAT(internal::scalar_,OPNAME),_op)<SCALAR,typename internal::traits<EXPR>::Scalar>, \ 1353 const typename internal::plain_constant_type<EXPR,SCALAR>::type, const EXPR> 1356 #if EIGEN_COMP_MSVC_STRICT && (EIGEN_COMP_MSVC_STRICT<=1600) 1357 #define EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(X) typename internal::enable_if<true,X>::type 1359 #define EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(X) X 1362 #define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD,OPNAME) \ 1363 template <typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \ 1364 EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type,OPNAME))\ 1365 (METHOD)(const T& scalar) const { \ 1366 typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,Scalar,T)>::type PromotedT; \ 1367 return EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,PromotedT,OPNAME)(derived(), \ 1368 typename internal::plain_constant_type<Derived,PromotedT>::type(derived().rows(), derived().cols(), internal::scalar_constant_op<PromotedT>(scalar))); \ 1371 #define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD,OPNAME) \ 1372 template <typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE friend \ 1373 EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type,Derived,OPNAME)) \ 1374 (METHOD)(const T& scalar, const StorageBaseType& matrix) { \ 1375 typedef typename internal::promote_scalar_arg<Scalar,T,EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME,T,Scalar)>::type PromotedT; \ 1376 return EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(PromotedT,Derived,OPNAME)( \ 1377 typename internal::plain_constant_type<Derived,PromotedT>::type(matrix.derived().rows(), matrix.derived().cols(), internal::scalar_constant_op<PromotedT>(scalar)), matrix.derived()); \ 1380 #define EIGEN_MAKE_SCALAR_BINARY_OP(METHOD,OPNAME) \ 1381 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD,OPNAME) \ 1382 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD,OPNAME) 1385 #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_CUDA_ARCH) && !defined(EIGEN_EXCEPTIONS) && !defined(EIGEN_USE_SYCL) && !defined(EIGEN_HIP_DEVICE_COMPILE) 1386 #define EIGEN_EXCEPTIONS 1390 #ifdef EIGEN_EXCEPTIONS 1391 # define EIGEN_THROW_X(X) throw X 1392 # define EIGEN_THROW throw 1393 # define EIGEN_TRY try 1394 # define EIGEN_CATCH(X) catch (X) 1396 # if defined(EIGEN_CUDA_ARCH) 1397 # define EIGEN_THROW_X(X) asm("trap;") 1398 # define EIGEN_THROW asm("trap;") 1399 # elif defined(EIGEN_HIP_DEVICE_COMPILE) 1400 # define EIGEN_THROW_X(X) asm("s_trap 0") 1401 # define EIGEN_THROW asm("s_trap 0") 1403 # define EIGEN_THROW_X(X) std::abort() 1404 # define EIGEN_THROW std::abort() 1406 # define EIGEN_TRY if (true) 1407 # define EIGEN_CATCH(X) else 1411 #if EIGEN_HAS_CXX11_NOEXCEPT 1412 # define EIGEN_INCLUDE_TYPE_TRAITS 1413 # define EIGEN_NOEXCEPT noexcept 1414 # define EIGEN_NOEXCEPT_IF(x) noexcept(x) 1415 # define EIGEN_NO_THROW noexcept(true) 1416 # define EIGEN_EXCEPTION_SPEC(X) noexcept(false) 1418 # define EIGEN_NOEXCEPT 1419 # define EIGEN_NOEXCEPT_IF(x) 1420 # define EIGEN_NO_THROW throw() 1421 # if EIGEN_COMP_MSVC || EIGEN_COMP_CXXVER>=17 1424 # define EIGEN_EXCEPTION_SPEC(X) throw() 1426 # define EIGEN_EXCEPTION_SPEC(X) throw(X) 1430 #if EIGEN_HAS_VARIADIC_TEMPLATES 1435 inline bool all(){
return true; }
1437 template<
typename T,
typename ...Ts>
1438 bool all(
T t, Ts ... ts){
return t &&
all(ts...); }
1444 #if EIGEN_HAS_CXX11_OVERRIDE_FINAL 1446 # define EIGEN_OVERRIDE override 1447 # define EIGEN_FINAL final 1449 # define EIGEN_OVERRIDE 1450 # define EIGEN_FINAL 1454 #if defined(SYCL_DEVICE_ONLY) 1455 #if defined(_MSC_VER) 1456 #define EIGEN_UNROLL_LOOP __pragma(unroll) 1458 #define EIGEN_UNROLL_LOOP _Pragma("unroll") 1461 #define EIGEN_UNROLL_LOOP 1464 #endif // EIGEN_MACROS_H EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ignore_unused_variable(const T &)
#define EIGEN_STRONG_INLINE
static const Eigen::internal::all_t all
Namespace containing all symbols from the Eigen library.
#define EIGEN_DONT_INLINE
Eigen::Triplet< double > T
#define EIGEN_DEVICE_FUNC