11 #ifndef EIGEN_MACROS_H 12 #define EIGEN_MACROS_H 14 #include "../InternalHeaderCheck.h" 20 #define EIGEN_VERSION_AT_LEAST(x, y, z) \ 21 (EIGEN_MAJOR_VERSION > x || \ 22 (EIGEN_MAJOR_VERSION >= x && (EIGEN_MINOR_VERSION > y || (EIGEN_MINOR_VERSION >= y && EIGEN_PATCH_VERSION >= z)))) 24 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR 25 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::RowMajor 27 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::ColMajor 30 #ifndef EIGEN_DEFAULT_DENSE_INDEX_TYPE 31 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE std::ptrdiff_t 37 #ifndef EIGEN_MAX_CPP_VER 38 #define EIGEN_MAX_CPP_VER 99 46 #ifndef EIGEN_FAST_MATH 47 #define EIGEN_FAST_MATH 1 50 #ifndef EIGEN_STACK_ALLOCATION_LIMIT 52 #define EIGEN_STACK_ALLOCATION_LIMIT 131072 67 #ifndef EIGEN_SCALAR_MADD_USE_FMA 68 #ifdef EIGEN_VECTORIZE_FMA 69 #define EIGEN_SCALAR_MADD_USE_FMA 1 71 #define EIGEN_SCALAR_MADD_USE_FMA 0 81 #define EIGEN_COMP_GNUC (__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__) 83 #define EIGEN_COMP_GNUC 0 87 #if defined(__clang__) 88 #define EIGEN_COMP_CLANG (__clang_major__ * 100 + __clang_minor__ * 10 + __clang_patchlevel__) 90 #define EIGEN_COMP_CLANG 0 95 #if defined(__clang__) && defined(__apple_build_version__) 96 #define EIGEN_COMP_CLANGAPPLE __apple_build_version__ 98 #define EIGEN_COMP_CLANGAPPLE 0 102 #if defined(__castxml__) 103 #define EIGEN_COMP_CASTXML 1 105 #define EIGEN_COMP_CASTXML 0 109 #if defined(__llvm__) 110 #define EIGEN_COMP_LLVM 1 112 #define EIGEN_COMP_LLVM 0 116 #if defined(__INTEL_COMPILER) 117 #define EIGEN_COMP_ICC __INTEL_COMPILER 119 #define EIGEN_COMP_ICC 0 123 #if defined(__INTEL_CLANG_COMPILER) 124 #define EIGEN_COMP_CLANGICC __INTEL_CLANG_COMPILER 126 #define EIGEN_COMP_CLANGICC 0 130 #if defined(__MINGW32__) 131 #define EIGEN_COMP_MINGW 1 133 #define EIGEN_COMP_MINGW 0 137 #if defined(__SUNPRO_CC) 138 #define EIGEN_COMP_SUNCC 1 140 #define EIGEN_COMP_SUNCC 0 144 #if defined(_MSC_VER) 145 #define EIGEN_COMP_MSVC _MSC_VER 147 #define EIGEN_COMP_MSVC 0 150 #if defined(__NVCC__) 151 #if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9) 152 #define EIGEN_COMP_NVCC ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100)) 153 #elif defined(__CUDACC_VER__) 154 #define EIGEN_COMP_NVCC __CUDACC_VER__ 156 #error "NVCC did not define compiler version." 159 #define EIGEN_COMP_NVCC 0 176 #if defined(_MSVC_LANG) 177 #define EIGEN_COMP_MSVC_LANG _MSVC_LANG 179 #define EIGEN_COMP_MSVC_LANG 0 190 #if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC || EIGEN_COMP_LLVM || EIGEN_COMP_CLANG) 191 #define EIGEN_COMP_MSVC_STRICT _MSC_VER 193 #define EIGEN_COMP_MSVC_STRICT 0 202 #if defined(__IBMCPP__) || defined(__xlc__) || defined(__ibmxl__) 203 #define EIGEN_COMP_IBM __xlC__ 205 #define EIGEN_COMP_IBM 0 210 #define EIGEN_COMP_PGI (__PGIC__ * 100 + __PGIC_MINOR__) 212 #define EIGEN_COMP_PGI 0 216 #if defined(__NVCOMPILER) 217 #define EIGEN_COMP_NVHPC (__NVCOMPILER_MAJOR__ * 100 + __NVCOMPILER_MINOR__) 219 #define EIGEN_COMP_NVHPC 0 223 #if defined(__CC_ARM) || defined(__ARMCC_VERSION) 224 #define EIGEN_COMP_ARM 1 226 #define EIGEN_COMP_ARM 0 230 #if defined(__EMSCRIPTEN__) 231 #define EIGEN_COMP_EMSCRIPTEN 1 233 #define EIGEN_COMP_EMSCRIPTEN 0 239 #if defined(__FUJITSU) 240 #define EIGEN_COMP_FCC (__FCC_major__ * 100 + __FCC_minor__ * 10 + __FCC_patchlevel__) 242 #define EIGEN_COMP_FCC 0 248 #if defined(__CLANG_FUJITSU) 249 #define EIGEN_COMP_CLANGFCC (__FCC_major__ * 100 + __FCC_minor__ * 10 + __FCC_patchlevel__) 251 #define EIGEN_COMP_CLANGFCC 0 257 #if defined(_CRAYC) && !defined(__clang__) 258 #define EIGEN_COMP_CPE (_RELEASE_MAJOR * 100 + _RELEASE_MINOR * 10 + _RELEASE_PATCHLEVEL) 260 #define EIGEN_COMP_CPE 0 266 #if defined(_CRAYC) && defined(__clang__) 267 #define EIGEN_COMP_CLANGCPE (_RELEASE_MAJOR * 100 + _RELEASE_MINOR * 10 + _RELEASE_PATCHLEVEL) 269 #define EIGEN_COMP_CLANGCPE 0 273 #if defined(__LCC__) && defined(__MCST__) 274 #define EIGEN_COMP_LCC (__LCC__ * 100 + __LCC_MINOR__) 276 #define EIGEN_COMP_LCC 0 281 #if EIGEN_COMP_GNUC && \ 282 !(EIGEN_COMP_CLANG || EIGEN_COMP_ICC || EIGEN_COMP_CLANGICC || EIGEN_COMP_MINGW || EIGEN_COMP_PGI || \ 283 EIGEN_COMP_IBM || EIGEN_COMP_ARM || EIGEN_COMP_EMSCRIPTEN || EIGEN_COMP_FCC || EIGEN_COMP_CLANGFCC || \ 284 EIGEN_COMP_CPE || EIGEN_COMP_CLANGCPE || EIGEN_COMP_LCC) 285 #define EIGEN_COMP_GNUC_STRICT 1 287 #define EIGEN_COMP_GNUC_STRICT 0 292 #if EIGEN_COMP_GNUC_STRICT 293 #define EIGEN_GNUC_STRICT_AT_LEAST(x, y, z) \ 294 ((__GNUC__ > x) || (__GNUC__ == x && __GNUC_MINOR__ > y) || \ 295 (__GNUC__ == x && __GNUC_MINOR__ == y && __GNUC_PATCHLEVEL__ >= z)) 296 #define EIGEN_GNUC_STRICT_LESS_THAN(x, y, z) \ 297 ((__GNUC__ < x) || (__GNUC__ == x && __GNUC_MINOR__ < y) || \ 298 (__GNUC__ == x && __GNUC_MINOR__ == y && __GNUC_PATCHLEVEL__ < z)) 300 #define EIGEN_GNUC_STRICT_AT_LEAST(x, y, z) 0 301 #define EIGEN_GNUC_STRICT_LESS_THAN(x, y, z) 0 306 #if EIGEN_COMP_CLANG && !(EIGEN_COMP_CLANGAPPLE || EIGEN_COMP_CLANGICC || EIGEN_COMP_CLANGFCC || EIGEN_COMP_CLANGCPE) 307 #define EIGEN_COMP_CLANG_STRICT 1 309 #define EIGEN_COMP_CLANG_STRICT 0 314 #if EIGEN_COMP_CLANG_STRICT 315 #define EIGEN_CLANG_STRICT_AT_LEAST(x, y, z) \ 316 ((__clang_major__ > x) || (__clang_major__ == x && __clang_minor__ > y) || \ 317 (__clang_major__ == x && __clang_minor__ == y && __clang_patchlevel__ >= z)) 318 #define EIGEN_CLANG_STRICT_LESS_THAN(x, y, z) \ 319 ((__clang_major__ < x) || (__clang_major__ == x && __clang_minor__ < y) || \ 320 (__clang_major__ == x && __clang_minor__ == y && __clang_patchlevel__ < z)) 322 #define EIGEN_CLANG_STRICT_AT_LEAST(x, y, z) 0 323 #define EIGEN_CLANG_STRICT_LESS_THAN(x, y, z) 0 330 #if defined(__x86_64__) || (defined(_M_X64) && !defined(_M_ARM64EC)) || defined(__amd64) 331 #define EIGEN_ARCH_x86_64 1 333 #define EIGEN_ARCH_x86_64 0 336 #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__i386) 337 #define EIGEN_ARCH_i386 1 339 #define EIGEN_ARCH_i386 0 342 #if EIGEN_ARCH_x86_64 || EIGEN_ARCH_i386 343 #define EIGEN_ARCH_i386_OR_x86_64 1 345 #define EIGEN_ARCH_i386_OR_x86_64 0 350 #define EIGEN_ARCH_ARM 1 352 #define EIGEN_ARCH_ARM 0 356 #if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) 357 #define EIGEN_ARCH_ARM64 1 359 #define EIGEN_ARCH_ARM64 0 363 #if EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64 364 #define EIGEN_ARCH_ARM_OR_ARM64 1 366 #define EIGEN_ARCH_ARM_OR_ARM64 0 370 #if EIGEN_ARCH_ARM_OR_ARM64 && defined(__ARM_ARCH) && __ARM_ARCH >= 8 371 #define EIGEN_ARCH_ARMV8 1 373 #define EIGEN_ARCH_ARMV8 0 378 #if EIGEN_ARCH_ARM_OR_ARM64 379 #ifndef EIGEN_HAS_ARM64_FP16 380 #if defined(__ARM_FP16_FORMAT_IEEE) 381 #define EIGEN_HAS_ARM64_FP16 1 383 #define EIGEN_HAS_ARM64_FP16 0 389 #if defined(__mips__) || defined(__mips) 390 #define EIGEN_ARCH_MIPS 1 392 #define EIGEN_ARCH_MIPS 0 396 #if defined(__loongarch64) 397 #define EIGEN_ARCH_LOONGARCH64 1 399 #define EIGEN_ARCH_LOONGARCH64 0 403 #if defined(__sparc__) || defined(__sparc) 404 #define EIGEN_ARCH_SPARC 1 406 #define EIGEN_ARCH_SPARC 0 410 #if defined(__ia64__) 411 #define EIGEN_ARCH_IA64 1 413 #define EIGEN_ARCH_IA64 0 417 #if defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC) || defined(__POWERPC__) 418 #define EIGEN_ARCH_PPC 1 420 #define EIGEN_ARCH_PPC 0 428 #if defined(__unix__) || defined(__unix) 429 #define EIGEN_OS_UNIX 1 431 #define EIGEN_OS_UNIX 0 435 #if defined(__linux__) 436 #define EIGEN_OS_LINUX 1 438 #define EIGEN_OS_LINUX 0 443 #if defined(__ANDROID__) || defined(ANDROID) 444 #define EIGEN_OS_ANDROID 1 449 #if defined __has_include 450 #if __has_include(<android/ndk-version.h>) 451 #include <android/ndk-version.h> 456 #define EIGEN_OS_ANDROID 0 460 #if defined(__gnu_linux__) && !(EIGEN_OS_ANDROID) 461 #define EIGEN_OS_GNULINUX 1 463 #define EIGEN_OS_GNULINUX 0 467 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) 468 #define EIGEN_OS_BSD 1 470 #define EIGEN_OS_BSD 0 474 #if defined(__APPLE__) 475 #define EIGEN_OS_MAC 1 477 #define EIGEN_OS_MAC 0 482 #define EIGEN_OS_QNX 1 484 #define EIGEN_OS_QNX 0 489 #define EIGEN_OS_WIN 1 491 #define EIGEN_OS_WIN 0 496 #define EIGEN_OS_WIN64 1 498 #define EIGEN_OS_WIN64 0 502 #if defined(_WIN32_WCE) 503 #define EIGEN_OS_WINCE 1 505 #define EIGEN_OS_WINCE 0 509 #if defined(__CYGWIN__) 510 #define EIGEN_OS_CYGWIN 1 512 #define EIGEN_OS_CYGWIN 0 516 #if EIGEN_OS_WIN && !(EIGEN_OS_WINCE || EIGEN_OS_CYGWIN) 517 #define EIGEN_OS_WIN_STRICT 1 519 #define EIGEN_OS_WIN_STRICT 0 531 #if (defined(sun) || defined(__sun)) && !(defined(__SVR4) || defined(__svr4__)) 532 #define EIGEN_OS_SUN __SUNPRO_C 534 #define EIGEN_OS_SUN 0 538 #if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__)) 539 #define EIGEN_OS_SOLARIS 1 541 #define EIGEN_OS_SOLARIS 0 550 #if defined(__NVCC__) && defined(__HIPCC__) 551 #error "NVCC as the target platform for HIPCC is currently not supported." 554 #if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA) && !defined(__SYCL_DEVICE_ONLY__) 556 #define EIGEN_CUDACC __CUDACC__ 559 #if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA) && !defined(__SYCL_DEVICE_ONLY__) 561 #define EIGEN_CUDA_ARCH __CUDA_ARCH__ 564 #if defined(EIGEN_CUDACC) 566 #define EIGEN_CUDA_SDK_VER (CUDA_VERSION * 10) 568 #define EIGEN_CUDA_SDK_VER 0 571 #if defined(__HIPCC__) && !defined(EIGEN_NO_HIP) && !defined(__SYCL_DEVICE_ONLY__) 573 #define EIGEN_HIPCC __HIPCC__ 578 #include <hip/hip_runtime.h> 580 #if defined(__HIP_DEVICE_COMPILE__) && !defined(__SYCL_DEVICE_ONLY__) 582 #define EIGEN_HIP_DEVICE_COMPILE __HIP_DEVICE_COMPILE__ 597 #define EIGEN_HIP_LAUNCH_BOUNDS_1024 __launch_bounds__(1024) 601 #if !defined(EIGEN_HIP_LAUNCH_BOUNDS_1024) 602 #define EIGEN_HIP_LAUNCH_BOUNDS_1024 603 #endif // !defined(EIGEN_HIP_LAUNCH_BOUNDS_1024) 607 #if defined(EIGEN_CUDACC) || defined(EIGEN_HIPCC) 630 #if defined(EIGEN_CUDA_ARCH) || defined(EIGEN_HIP_DEVICE_COMPILE) 634 #define EIGEN_GPU_COMPILE_PHASE 662 #if EIGEN_ARCH_ARM_OR_ARM64 663 #ifndef EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 666 #if EIGEN_ARCH_ARM64 && defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(EIGEN_GPU_COMPILE_PHASE) 667 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 1 669 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 0 676 #if EIGEN_ARCH_ARM_OR_ARM64 677 #ifndef EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC 680 #if EIGEN_ARCH_ARM64 && defined(__ARM_FEATURE_FP16_SCALAR_ARITHMETIC) && !defined(EIGEN_GPU_COMPILE_PHASE) 681 #define EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC 1 686 #if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__) 689 #define SYCL_DEVICE_ONLY 698 #define EIGEN_HAS_BUILTIN(x) __has_builtin(x) 700 #define EIGEN_HAS_BUILTIN(x) 0 705 #ifndef __has_feature 706 #define __has_feature(x) 0 716 #if EIGEN_COMP_MSVC_LANG > 0 717 #define EIGEN_CPLUSPLUS EIGEN_COMP_MSVC_LANG 718 #elif EIGEN_COMP_MSVC >= 1900 719 #define EIGEN_CPLUSPLUS 201103L 720 #elif defined(__cplusplus) 721 #define EIGEN_CPLUSPLUS __cplusplus 723 #define EIGEN_CPLUSPLUS 0 729 #if EIGEN_CPLUSPLUS >= 202002L 730 #define EIGEN_COMP_CXXVER 20 731 #elif EIGEN_CPLUSPLUS >= 201703L 732 #define EIGEN_COMP_CXXVER 17 733 #elif EIGEN_CPLUSPLUS >= 201402L 734 #define EIGEN_COMP_CXXVER 14 735 #elif EIGEN_CPLUSPLUS >= 201103L 736 #define EIGEN_COMP_CXXVER 11 738 #define EIGEN_COMP_CXXVER 03 745 #if EIGEN_MAX_CPP_VER < 14 || EIGEN_COMP_CXXVER < 14 || (EIGEN_COMP_MSVC && EIGEN_COMP_MSVC < 1900) || \ 746 (EIGEN_COMP_ICC && EIGEN_COMP_ICC < 1500) || (EIGEN_COMP_NVCC && EIGEN_COMP_NVCC < 80000) || \ 747 (EIGEN_COMP_CLANG_STRICT && EIGEN_COMP_CLANG < 390) || \ 748 (EIGEN_COMP_CLANGAPPLE && EIGEN_COMP_CLANGAPPLE < 9000000) || (EIGEN_COMP_GNUC_STRICT && EIGEN_COMP_GNUC < 510) 749 #error Eigen requires at least c++14 support. 755 #ifndef EIGEN_HAS_C99_MATH 756 #if ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) || \ 757 (defined(__GNUC__) && defined(_GLIBCXX_USE_C99)) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) || \ 758 (EIGEN_COMP_MSVC) || defined(SYCL_DEVICE_ONLY)) 759 #define EIGEN_HAS_C99_MATH 1 761 #define EIGEN_HAS_C99_MATH 0 766 #ifndef EIGEN_HAS_STD_HASH 769 #if !defined(EIGEN_GPU_COMPILE_PHASE) 770 #define EIGEN_HAS_STD_HASH 1 772 #define EIGEN_HAS_STD_HASH 0 774 #endif // EIGEN_HAS_STD_HASH 776 #ifndef EIGEN_HAS_STD_INVOKE_RESULT 777 #if EIGEN_MAX_CPP_VER >= 17 && EIGEN_COMP_CXXVER >= 17 778 #define EIGEN_HAS_STD_INVOKE_RESULT 1 780 #define EIGEN_HAS_STD_INVOKE_RESULT 0 784 #define EIGEN_CONSTEXPR constexpr 793 #ifndef EIGEN_HAS_CXX17_OVERALIGN 794 #if EIGEN_MAX_CPP_VER >= 17 && EIGEN_COMP_CXXVER >= 17 && \ 795 ((EIGEN_COMP_MSVC >= 1912) || (EIGEN_GNUC_STRICT_AT_LEAST(7, 0, 0)) || (EIGEN_CLANG_STRICT_AT_LEAST(5, 0, 0)) || \ 796 (EIGEN_COMP_CLANGAPPLE && EIGEN_COMP_CLANGAPPLE >= 10000000)) && \ 798 #define EIGEN_HAS_CXX17_OVERALIGN 1 800 #define EIGEN_HAS_CXX17_OVERALIGN 0 804 #if defined(EIGEN_CUDACC) 806 #if defined(__NVCC__) 808 #ifdef __CUDACC_RELAXED_CONSTEXPR__ 809 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC 811 #elif defined(__clang__) && defined(__CUDA__) && __has_feature(cxx_relaxed_constexpr) 813 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC 825 #ifndef EIGEN_HAS_BUILTIN_INT128 826 #if defined(__SIZEOF_INT128__) && !(EIGEN_OS_WIN && EIGEN_COMP_CLANG) 827 #define EIGEN_HAS_BUILTIN_INT128 1 829 #define EIGEN_HAS_BUILTIN_INT128 0 839 #define EIGEN_NOT_A_MACRO 841 #define EIGEN_DEBUG_VAR(x) std::cerr << #x << " = " << x << std::endl; 844 #define EIGEN_CAT2(a, b) a##b 845 #define EIGEN_CAT(a, b) EIGEN_CAT2(a, b) 847 #define EIGEN_COMMA , 850 #define EIGEN_MAKESTRING2(a) #a 851 #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a) 856 #ifndef EIGEN_STRONG_INLINE 857 #if (EIGEN_COMP_MSVC || EIGEN_COMP_ICC) && !defined(EIGEN_GPUCC) 858 #define EIGEN_STRONG_INLINE __forceinline 860 #define EIGEN_STRONG_INLINE inline 868 #if EIGEN_COMP_GNUC && !defined(SYCL_DEVICE_ONLY) 869 #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline 871 #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE 875 #define EIGEN_DONT_INLINE __attribute__((noinline)) 876 #elif EIGEN_COMP_MSVC 877 #define EIGEN_DONT_INLINE __declspec(noinline) 879 #define EIGEN_DONT_INLINE 883 #define EIGEN_PERMISSIVE_EXPR __extension__ 885 #define EIGEN_PERMISSIVE_EXPR 891 #if defined(SYCL_DEVICE_ONLY) || defined(EIGEN_HIP_DEVICE_COMPILE) 893 #ifndef EIGEN_NO_DEBUG 894 #define EIGEN_NO_DEBUG 897 #ifdef EIGEN_INTERNAL_DEBUGGING 898 #undef EIGEN_INTERNAL_DEBUGGING 903 #if defined(SYCL_DEVICE_ONLY) || defined(EIGEN_GPU_COMPILE_PHASE) 904 #ifdef EIGEN_EXCEPTIONS 905 #undef EIGEN_EXCEPTIONS 909 #if defined(SYCL_DEVICE_ONLY) 910 #ifndef EIGEN_DONT_VECTORIZE 911 #define EIGEN_DONT_VECTORIZE 913 #define EIGEN_DEVICE_FUNC __attribute__((flatten)) __attribute__((always_inline)) 915 #elif defined(EIGEN_GPUCC) 916 #define EIGEN_DEVICE_FUNC __host__ __device__ 918 #define EIGEN_DEVICE_FUNC 925 #define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC 926 #define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC inline 929 #ifndef EIGEN_NO_DEBUG 930 #define EIGEN_NO_DEBUG 936 #define eigen_assert(x) eigen_plain_assert(x) 939 #ifdef EIGEN_INTERNAL_DEBUGGING 940 #define eigen_internal_assert(x) eigen_assert(x) 942 #define eigen_internal_assert(x) ((void)0) 945 #if defined(EIGEN_NO_DEBUG) || (defined(EIGEN_GPU_COMPILE_PHASE) && defined(EIGEN_NO_DEBUG_GPU)) 946 #define EIGEN_ONLY_USED_FOR_DEBUG(x) EIGEN_UNUSED_VARIABLE(x) 948 #define EIGEN_ONLY_USED_FOR_DEBUG(x) 951 #ifndef EIGEN_NO_DEPRECATED_WARNING 953 #define EIGEN_DEPRECATED __attribute__((deprecated)) 954 #elif EIGEN_COMP_MSVC 955 #define EIGEN_DEPRECATED __declspec(deprecated) 957 #define EIGEN_DEPRECATED 960 #define EIGEN_DEPRECATED 963 #ifndef EIGEN_NO_DEPRECATED_WARNING 965 #define EIGEN_DEPRECATED_WITH_REASON(message) __attribute__((deprecated(message))) 966 #elif EIGEN_COMP_MSVC 967 #define EIGEN_DEPRECATED_WITH_REASON(message) __declspec(deprecated(message)) 969 #define EIGEN_DEPRECATED_WITH_REASON(message) 972 #define EIGEN_DEPRECATED_WITH_REASON(message) 976 #define EIGEN_UNUSED __attribute__((unused)) 982 #define EIGEN_PRAGMA(tokens) _Pragma(#tokens) 983 #define EIGEN_DIAGNOSTICS(tokens) EIGEN_PRAGMA(GCC diagnostic tokens) 984 #define EIGEN_DIAGNOSTICS_OFF(msc, gcc) EIGEN_DIAGNOSTICS(gcc) 985 #elif EIGEN_COMP_MSVC 986 #define EIGEN_PRAGMA(tokens) __pragma(tokens) 987 #define EIGEN_DIAGNOSTICS(tokens) EIGEN_PRAGMA(warning(tokens)) 988 #define EIGEN_DIAGNOSTICS_OFF(msc, gcc) EIGEN_DIAGNOSTICS(msc) 990 #define EIGEN_PRAGMA(tokens) 991 #define EIGEN_DIAGNOSTICS(tokens) 992 #define EIGEN_DIAGNOSTICS_OFF(msc, gcc) 995 #define EIGEN_DISABLE_DEPRECATED_WARNING EIGEN_DIAGNOSTICS_OFF(disable : 4996, ignored "-Wdeprecated-declarations") 1000 template <
typename T>
1001 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr
void ignore_unused_variable(
const T&) {}
1004 #define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var); 1006 #if !defined(EIGEN_ASM_COMMENT) 1007 #if EIGEN_COMP_GNUC && (EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64) 1008 #define EIGEN_ASM_COMMENT(X) __asm__("#" X) 1010 #define EIGEN_ASM_COMMENT(X) 1019 #if defined(EIGEN_GPU_COMPILE_PHASE) 1020 #define EIGEN_OPTIMIZATION_BARRIER(X) 1023 #if !defined(EIGEN_OPTIMIZATION_BARRIER) 1025 #if EIGEN_COMP_GNUC || (defined(__clang__) && defined(_MSC_VER)) 1058 #if EIGEN_ARCH_PPC && EIGEN_COMP_GNUC_STRICT 1064 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__("" : "+r,v"(X)); 1067 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__("" : "+r,v,wa"(X)); 1069 #elif EIGEN_ARCH_ARM_OR_ARM64 1075 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__("" : "+g,w"(X)); 1079 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__("" : "+g"(X)); 1081 #elif EIGEN_ARCH_i386_OR_x86_64 1083 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__("" : "+g,x"(X)); 1086 #define EIGEN_OPTIMIZATION_BARRIER(X) 1090 #define EIGEN_OPTIMIZATION_BARRIER(X) 1097 #define EIGEN_CONST_CONDITIONAL(cond) (void)0, cond 1099 #define EIGEN_CONST_CONDITIONAL(cond) cond 1102 #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD 1103 #define EIGEN_RESTRICT 1105 #ifndef EIGEN_RESTRICT 1106 #define EIGEN_RESTRICT __restrict 1109 #ifndef EIGEN_DEFAULT_IO_FORMAT 1110 #ifdef EIGEN_MAKING_DOCS 1113 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat(3, 0, " ", "\n", "", "") 1115 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat() 1126 #if (defined(EIGEN_CUDA_ARCH) && defined(__NVCC__)) || defined(EIGEN_HIP_DEVICE_COMPILE) 1127 #define EIGEN_USING_STD(FUNC) using ::FUNC; 1129 #define EIGEN_USING_STD(FUNC) using std::FUNC; 1132 #if EIGEN_COMP_CLANG // workaround clang bug (see http://forum.kde.org/viewtopic.php?f=74&t=102653) 1133 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1134 using Base::operator=; \ 1135 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) { \ 1136 Base::operator=(other); \ 1139 template <typename OtherDerived> \ 1140 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const DenseBase<OtherDerived>& other) { \ 1141 Base::operator=(other.derived()); \ 1145 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1146 using Base::operator=; \ 1147 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) { \ 1148 Base::operator=(other); \ 1158 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) EIGEN_DEVICE_FUNC CLASS(const CLASS&) = default; 1165 #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) \ 1166 EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 1167 EIGEN_DEFAULT_COPY_CONSTRUCTOR(Derived) 1176 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \ 1177 EIGEN_DEVICE_FUNC Derived() = default; \ 1178 EIGEN_DEVICE_FUNC ~Derived() = default; 1188 #define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ 1189 typedef typename Eigen::internal::traits<Derived>::Scalar \ 1191 typedef typename Eigen::NumTraits<Scalar>::Real \ 1194 typedef typename Base::CoeffReturnType \ 1198 typedef typename Eigen::internal::ref_selector<Derived>::type Nested; \ 1199 typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ 1200 typedef typename Eigen::internal::traits<Derived>::StorageIndex StorageIndex; \ 1201 enum CompileTimeTraits { \ 1202 RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ 1203 ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ 1204 Flags = Eigen::internal::traits<Derived>::Flags, \ 1205 SizeAtCompileTime = Base::SizeAtCompileTime, \ 1206 MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ 1207 IsVectorAtCompileTime = Base::IsVectorAtCompileTime \ 1209 using Base::derived; \ 1210 using Base::const_cast_derived; 1213 #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ 1214 EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ 1215 typedef typename Base::PacketScalar PacketScalar; 1217 #if EIGEN_HAS_BUILTIN(__builtin_expect) || EIGEN_COMP_GNUC 1218 #define EIGEN_PREDICT_FALSE(x) (__builtin_expect(x, false)) 1219 #define EIGEN_PREDICT_TRUE(x) (__builtin_expect(false || (x), true)) 1221 #define EIGEN_PREDICT_FALSE(x) (x) 1222 #define EIGEN_PREDICT_TRUE(x) (x) 1226 #define EIGEN_CWISE_BINARY_RETURN_TYPE(LHS, RHS, OPNAME) \ 1227 CwiseBinaryOp<EIGEN_CAT(EIGEN_CAT(internal::scalar_, OPNAME), _op) < typename internal::traits<LHS>::Scalar, \ 1228 typename internal::traits<RHS>::Scalar>, \ 1229 const LHS, const RHS > 1231 #define EIGEN_MAKE_CWISE_BINARY_OP(METHOD, OPNAME) \ 1232 template <typename OtherDerived> \ 1233 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const EIGEN_CWISE_BINARY_RETURN_TYPE( \ 1234 Derived, OtherDerived, OPNAME)(METHOD)(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived>& other) const { \ 1235 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived, OtherDerived, OPNAME)(derived(), other.derived()); \ 1238 #define EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME, TYPEA, TYPEB) \ 1239 (Eigen::internal::has_ReturnType<Eigen::ScalarBinaryOpTraits< \ 1240 TYPEA, TYPEB, EIGEN_CAT(EIGEN_CAT(Eigen::internal::scalar_, OPNAME), _op) < TYPEA, TYPEB> > > ::value) 1242 #define EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(EXPR, SCALAR, OPNAME) \ 1243 CwiseBinaryOp<EIGEN_CAT(EIGEN_CAT(internal::scalar_, OPNAME), _op) < typename internal::traits<EXPR>::Scalar, \ 1245 const EXPR, const typename internal::plain_constant_type<EXPR, SCALAR>::type > 1247 #define EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(SCALAR, EXPR, OPNAME) \ 1248 CwiseBinaryOp<EIGEN_CAT(EIGEN_CAT(internal::scalar_, OPNAME), _op) < SCALAR, \ 1249 typename internal::traits<EXPR>::Scalar>, \ 1250 const typename internal::plain_constant_type<EXPR, SCALAR>::type, const EXPR > 1252 #define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD, OPNAME) \ 1253 template <typename T> \ 1254 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE( \ 1256 typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED( \ 1257 OPNAME, Scalar, T)>::type, \ 1258 OPNAME)(METHOD)(const T& scalar) const { \ 1259 typedef typename internal::promote_scalar_arg<Scalar, T, EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME, Scalar, T)>::type \ 1261 return EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived, PromotedT, OPNAME)( \ 1262 derived(), typename internal::plain_constant_type<Derived, PromotedT>::type( \ 1263 derived().rows(), derived().cols(), internal::scalar_constant_op<PromotedT>(scalar))); \ 1266 #define EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD, OPNAME) \ 1267 template <typename T> \ 1268 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE friend const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE( \ 1269 typename internal::promote_scalar_arg<Scalar EIGEN_COMMA T EIGEN_COMMA EIGEN_SCALAR_BINARY_SUPPORTED( \ 1270 OPNAME, T, Scalar)>::type, \ 1271 Derived, OPNAME)(METHOD)(const T& scalar, const StorageBaseType& matrix) { \ 1272 typedef typename internal::promote_scalar_arg<Scalar, T, EIGEN_SCALAR_BINARY_SUPPORTED(OPNAME, T, Scalar)>::type \ 1274 return EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(PromotedT, Derived, OPNAME)( \ 1275 typename internal::plain_constant_type<Derived, PromotedT>::type( \ 1276 matrix.derived().rows(), matrix.derived().cols(), internal::scalar_constant_op<PromotedT>(scalar)), \ 1277 matrix.derived()); \ 1280 #define EIGEN_MAKE_SCALAR_BINARY_OP(METHOD, OPNAME) \ 1281 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHELEFT(METHOD, OPNAME) \ 1282 EIGEN_MAKE_SCALAR_BINARY_OP_ONTHERIGHT(METHOD, OPNAME) 1284 #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_CUDA_ARCH) && !defined(EIGEN_EXCEPTIONS) && \ 1285 !defined(EIGEN_USE_SYCL) && !defined(EIGEN_HIP_DEVICE_COMPILE) 1286 #define EIGEN_EXCEPTIONS 1289 #ifdef EIGEN_EXCEPTIONS 1290 #define EIGEN_THROW_X(X) throw X 1291 #define EIGEN_THROW throw 1292 #define EIGEN_TRY try 1293 #define EIGEN_CATCH(X) catch (X) 1295 #if defined(EIGEN_CUDA_ARCH) 1296 #define EIGEN_THROW_X(X) asm("trap;") 1297 #define EIGEN_THROW asm("trap;") 1298 #elif defined(EIGEN_HIP_DEVICE_COMPILE) 1299 #define EIGEN_THROW_X(X) asm("s_trap 0") 1300 #define EIGEN_THROW asm("s_trap 0") 1302 #define EIGEN_THROW_X(X) std::abort() 1303 #define EIGEN_THROW std::abort() 1305 #define EIGEN_TRY if (true) 1306 #define EIGEN_CATCH(X) else 1311 namespace internal {
1313 EIGEN_DEVICE_FUNC
inline bool all() {
return true; }
1315 template <
typename T,
typename... Ts>
1316 EIGEN_DEVICE_FUNC
bool all(T t, Ts... ts) {
1317 return t &&
all(ts...);
1324 #define EIGEN_OVERRIDE override 1325 #define EIGEN_FINAL final 1328 #if defined(SYCL_DEVICE_ONLY) 1329 #if defined(_MSC_VER) 1330 #define EIGEN_UNROLL_LOOP __pragma(unroll) 1332 #define EIGEN_UNROLL_LOOP _Pragma("unroll") 1335 #define EIGEN_UNROLL_LOOP 1340 #if defined(EIGEN_HAS_CXX17_IFCONSTEXPR) 1341 #define EIGEN_IF_CONSTEXPR(X) if constexpr (X) 1343 #define EIGEN_IF_CONSTEXPR(X) if (X) 1346 #endif // EIGEN_MACROS_H static constexpr Eigen::internal::all_t all
Definition: IndexedViewHelper.h:86
Namespace containing all symbols from the Eigen library.
Definition: B01_Experimental.dox:1