Warning, file /include/eigen3/Eigen/src/Core/util/Macros.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef EIGEN_MACROS_H
0012 #define EIGEN_MACROS_H
0013
0014
0015
0016
0017
0018 #define EIGEN_WORLD_VERSION 3
0019 #define EIGEN_MAJOR_VERSION 4
0020 #define EIGEN_MINOR_VERSION 0
0021
0022 #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \
0023 (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \
0024 EIGEN_MINOR_VERSION>=z))))
0025
0026 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR
0027 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::RowMajor
0028 #else
0029 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION Eigen::ColMajor
0030 #endif
0031
0032 #ifndef EIGEN_DEFAULT_DENSE_INDEX_TYPE
0033 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE std::ptrdiff_t
0034 #endif
0035
0036
0037
0038
0039 #ifndef EIGEN_MAX_CPP_VER
0040 #define EIGEN_MAX_CPP_VER 99
0041 #endif
0042
0043
0044
0045
0046
0047
0048 #ifndef EIGEN_FAST_MATH
0049 #define EIGEN_FAST_MATH 1
0050 #endif
0051
0052 #ifndef EIGEN_STACK_ALLOCATION_LIMIT
0053
0054 #define EIGEN_STACK_ALLOCATION_LIMIT 131072
0055 #endif
0056
0057
0058
0059
0060
0061
0062 #ifdef __GNUC__
0063 #define EIGEN_COMP_GNUC (__GNUC__*10+__GNUC_MINOR__)
0064 #else
0065 #define EIGEN_COMP_GNUC 0
0066 #endif
0067
0068
0069 #if defined(__clang__)
0070 #define EIGEN_COMP_CLANG (__clang_major__*100+__clang_minor__)
0071 #else
0072 #define EIGEN_COMP_CLANG 0
0073 #endif
0074
0075
0076 #if defined(__castxml__)
0077 #define EIGEN_COMP_CASTXML 1
0078 #else
0079 #define EIGEN_COMP_CASTXML 0
0080 #endif
0081
0082
0083 #if defined(__llvm__)
0084 #define EIGEN_COMP_LLVM 1
0085 #else
0086 #define EIGEN_COMP_LLVM 0
0087 #endif
0088
0089
0090 #if defined(__INTEL_COMPILER)
0091 #define EIGEN_COMP_ICC __INTEL_COMPILER
0092 #else
0093 #define EIGEN_COMP_ICC 0
0094 #endif
0095
0096
0097 #if defined(__MINGW32__)
0098 #define EIGEN_COMP_MINGW 1
0099 #else
0100 #define EIGEN_COMP_MINGW 0
0101 #endif
0102
0103
0104 #if defined(__SUNPRO_CC)
0105 #define EIGEN_COMP_SUNCC 1
0106 #else
0107 #define EIGEN_COMP_SUNCC 0
0108 #endif
0109
0110
0111 #if defined(_MSC_VER)
0112 #define EIGEN_COMP_MSVC _MSC_VER
0113 #else
0114 #define EIGEN_COMP_MSVC 0
0115 #endif
0116
0117 #if defined(__NVCC__)
0118 #if defined(__CUDACC_VER_MAJOR__) && (__CUDACC_VER_MAJOR__ >= 9)
0119 #define EIGEN_COMP_NVCC ((__CUDACC_VER_MAJOR__ * 10000) + (__CUDACC_VER_MINOR__ * 100))
0120 #elif defined(__CUDACC_VER__)
0121 #define EIGEN_COMP_NVCC __CUDACC_VER__
0122 #else
0123 #error "NVCC did not define compiler version."
0124 #endif
0125 #else
0126 #define EIGEN_COMP_NVCC 0
0127 #endif
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144 #if defined(_MSVC_LANG)
0145 #define EIGEN_COMP_MSVC_LANG _MSVC_LANG
0146 #else
0147 #define EIGEN_COMP_MSVC_LANG 0
0148 #endif
0149
0150
0151
0152
0153
0154
0155
0156
0157 #if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC || EIGEN_COMP_LLVM || EIGEN_COMP_CLANG)
0158 #define EIGEN_COMP_MSVC_STRICT _MSC_VER
0159 #else
0160 #define EIGEN_COMP_MSVC_STRICT 0
0161 #endif
0162
0163
0164
0165
0166
0167
0168
0169 #if defined(__IBMCPP__) || defined(__xlc__) || defined(__ibmxl__)
0170 #define EIGEN_COMP_IBM __xlC__
0171 #else
0172 #define EIGEN_COMP_IBM 0
0173 #endif
0174
0175
0176 #if defined(__PGI)
0177 #define EIGEN_COMP_PGI (__PGIC__*100+__PGIC_MINOR__)
0178 #else
0179 #define EIGEN_COMP_PGI 0
0180 #endif
0181
0182
0183 #if defined(__CC_ARM) || defined(__ARMCC_VERSION)
0184 #define EIGEN_COMP_ARM 1
0185 #else
0186 #define EIGEN_COMP_ARM 0
0187 #endif
0188
0189
0190 #if defined(__EMSCRIPTEN__)
0191 #define EIGEN_COMP_EMSCRIPTEN 1
0192 #else
0193 #define EIGEN_COMP_EMSCRIPTEN 0
0194 #endif
0195
0196
0197
0198 #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)
0199 #define EIGEN_COMP_GNUC_STRICT 1
0200 #else
0201 #define EIGEN_COMP_GNUC_STRICT 0
0202 #endif
0203
0204
0205 #if EIGEN_COMP_GNUC
0206 #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__==x && __GNUC_MINOR__>=y) || __GNUC__>x)
0207 #define EIGEN_GNUC_AT_MOST(x,y) ((__GNUC__==x && __GNUC_MINOR__<=y) || __GNUC__<x)
0208 #define EIGEN_GNUC_AT(x,y) ( __GNUC__==x && __GNUC_MINOR__==y )
0209 #else
0210 #define EIGEN_GNUC_AT_LEAST(x,y) 0
0211 #define EIGEN_GNUC_AT_MOST(x,y) 0
0212 #define EIGEN_GNUC_AT(x,y) 0
0213 #endif
0214
0215
0216 #if EIGEN_COMP_GNUC && (__GNUC__ <= 3)
0217 #define EIGEN_GCC3_OR_OLDER 1
0218 #else
0219 #define EIGEN_GCC3_OR_OLDER 0
0220 #endif
0221
0222
0223
0224
0225
0226
0227
0228
0229 #if defined(__x86_64__) || (defined(_M_X64) && !defined(_M_ARM64EC)) || defined(__amd64)
0230 #define EIGEN_ARCH_x86_64 1
0231 #else
0232 #define EIGEN_ARCH_x86_64 0
0233 #endif
0234
0235 #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__i386)
0236 #define EIGEN_ARCH_i386 1
0237 #else
0238 #define EIGEN_ARCH_i386 0
0239 #endif
0240
0241 #if EIGEN_ARCH_x86_64 || EIGEN_ARCH_i386
0242 #define EIGEN_ARCH_i386_OR_x86_64 1
0243 #else
0244 #define EIGEN_ARCH_i386_OR_x86_64 0
0245 #endif
0246
0247
0248 #if defined(__arm__)
0249 #define EIGEN_ARCH_ARM 1
0250 #else
0251 #define EIGEN_ARCH_ARM 0
0252 #endif
0253
0254
0255 #if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
0256 #define EIGEN_ARCH_ARM64 1
0257 #else
0258 #define EIGEN_ARCH_ARM64 0
0259 #endif
0260
0261
0262 #if EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64
0263 #define EIGEN_ARCH_ARM_OR_ARM64 1
0264 #else
0265 #define EIGEN_ARCH_ARM_OR_ARM64 0
0266 #endif
0267
0268
0269 #if EIGEN_ARCH_ARM_OR_ARM64 && defined(__ARM_ARCH) && __ARM_ARCH >= 8
0270 #define EIGEN_ARCH_ARMV8 1
0271 #else
0272 #define EIGEN_ARCH_ARMV8 0
0273 #endif
0274
0275
0276
0277
0278 #if EIGEN_ARCH_ARM64
0279 #ifndef EIGEN_HAS_ARM64_FP16
0280 #if defined(__ARM_FP16_FORMAT_IEEE)
0281 #define EIGEN_HAS_ARM64_FP16 1
0282 #else
0283 #define EIGEN_HAS_ARM64_FP16 0
0284 #endif
0285 #endif
0286 #endif
0287
0288
0289
0290 #if EIGEN_ARCH_ARM64
0291 #ifndef EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC
0292 #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
0293 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 1
0294 #else
0295 #define EIGEN_HAS_ARM64_FP16_VECTOR_ARITHMETIC 0
0296 #endif
0297 #endif
0298 #endif
0299
0300
0301
0302 #if EIGEN_ARCH_ARM64
0303 #ifndef EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC
0304 #if defined(__ARM_FEATURE_FP16_SCALAR_ARITHMETIC)
0305 #define EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC 1
0306 #endif
0307 #endif
0308 #endif
0309
0310
0311 #if defined(__mips__) || defined(__mips)
0312 #define EIGEN_ARCH_MIPS 1
0313 #else
0314 #define EIGEN_ARCH_MIPS 0
0315 #endif
0316
0317
0318 #if defined(__sparc__) || defined(__sparc)
0319 #define EIGEN_ARCH_SPARC 1
0320 #else
0321 #define EIGEN_ARCH_SPARC 0
0322 #endif
0323
0324
0325 #if defined(__ia64__)
0326 #define EIGEN_ARCH_IA64 1
0327 #else
0328 #define EIGEN_ARCH_IA64 0
0329 #endif
0330
0331
0332 #if defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC)
0333 #define EIGEN_ARCH_PPC 1
0334 #else
0335 #define EIGEN_ARCH_PPC 0
0336 #endif
0337
0338
0339
0340
0341
0342
0343
0344
0345 #if defined(__unix__) || defined(__unix)
0346 #define EIGEN_OS_UNIX 1
0347 #else
0348 #define EIGEN_OS_UNIX 0
0349 #endif
0350
0351
0352 #if defined(__linux__)
0353 #define EIGEN_OS_LINUX 1
0354 #else
0355 #define EIGEN_OS_LINUX 0
0356 #endif
0357
0358
0359
0360 #if defined(__ANDROID__) || defined(ANDROID)
0361 #define EIGEN_OS_ANDROID 1
0362 #else
0363 #define EIGEN_OS_ANDROID 0
0364 #endif
0365
0366
0367 #if defined(__gnu_linux__) && !(EIGEN_OS_ANDROID)
0368 #define EIGEN_OS_GNULINUX 1
0369 #else
0370 #define EIGEN_OS_GNULINUX 0
0371 #endif
0372
0373
0374 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
0375 #define EIGEN_OS_BSD 1
0376 #else
0377 #define EIGEN_OS_BSD 0
0378 #endif
0379
0380
0381 #if defined(__APPLE__)
0382 #define EIGEN_OS_MAC 1
0383 #else
0384 #define EIGEN_OS_MAC 0
0385 #endif
0386
0387
0388 #if defined(__QNX__)
0389 #define EIGEN_OS_QNX 1
0390 #else
0391 #define EIGEN_OS_QNX 0
0392 #endif
0393
0394
0395 #if defined(_WIN32)
0396 #define EIGEN_OS_WIN 1
0397 #else
0398 #define EIGEN_OS_WIN 0
0399 #endif
0400
0401
0402 #if defined(_WIN64)
0403 #define EIGEN_OS_WIN64 1
0404 #else
0405 #define EIGEN_OS_WIN64 0
0406 #endif
0407
0408
0409 #if defined(_WIN32_WCE)
0410 #define EIGEN_OS_WINCE 1
0411 #else
0412 #define EIGEN_OS_WINCE 0
0413 #endif
0414
0415
0416 #if defined(__CYGWIN__)
0417 #define EIGEN_OS_CYGWIN 1
0418 #else
0419 #define EIGEN_OS_CYGWIN 0
0420 #endif
0421
0422
0423 #if EIGEN_OS_WIN && !( EIGEN_OS_WINCE || EIGEN_OS_CYGWIN )
0424 #define EIGEN_OS_WIN_STRICT 1
0425 #else
0426 #define EIGEN_OS_WIN_STRICT 0
0427 #endif
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438 #if (defined(sun) || defined(__sun)) && !(defined(__SVR4) || defined(__svr4__))
0439 #define EIGEN_OS_SUN __SUNPRO_C
0440 #else
0441 #define EIGEN_OS_SUN 0
0442 #endif
0443
0444
0445 #if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__))
0446 #define EIGEN_OS_SOLARIS 1
0447 #else
0448 #define EIGEN_OS_SOLARIS 0
0449 #endif
0450
0451
0452
0453
0454
0455
0456
0457
0458 #if defined(__NVCC__) && defined(__HIPCC__)
0459 #error "NVCC as the target platform for HIPCC is currently not supported."
0460 #endif
0461
0462 #if defined(__CUDACC__) && !defined(EIGEN_NO_CUDA)
0463
0464 #define EIGEN_CUDACC __CUDACC__
0465 #endif
0466
0467 #if defined(__CUDA_ARCH__) && !defined(EIGEN_NO_CUDA)
0468
0469 #define EIGEN_CUDA_ARCH __CUDA_ARCH__
0470 #endif
0471
0472 #if defined(EIGEN_CUDACC)
0473 #include <cuda.h>
0474 #define EIGEN_CUDA_SDK_VER (CUDA_VERSION * 10)
0475 #else
0476 #define EIGEN_CUDA_SDK_VER 0
0477 #endif
0478
0479 #if defined(__HIPCC__) && !defined(EIGEN_NO_HIP)
0480
0481 #define EIGEN_HIPCC __HIPCC__
0482
0483
0484
0485
0486 #include <hip/hip_runtime.h>
0487
0488 #if defined(__HIP_DEVICE_COMPILE__)
0489
0490 #define EIGEN_HIP_DEVICE_COMPILE __HIP_DEVICE_COMPILE__
0491 #endif
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505 #define EIGEN_HIP_LAUNCH_BOUNDS_1024 __launch_bounds__(1024)
0506
0507 #endif
0508
0509 #if !defined(EIGEN_HIP_LAUNCH_BOUNDS_1024)
0510 #define EIGEN_HIP_LAUNCH_BOUNDS_1024
0511 #endif
0512
0513
0514
0515 #if defined(EIGEN_CUDACC) || defined(EIGEN_HIPCC)
0516
0517
0518
0519 #define EIGEN_GPUCC
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536 #endif
0537
0538 #if defined(EIGEN_CUDA_ARCH) || defined(EIGEN_HIP_DEVICE_COMPILE)
0539
0540
0541
0542 #define EIGEN_GPU_COMPILE_PHASE
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566 #endif
0567
0568 #if defined(EIGEN_USE_SYCL) && defined(__SYCL_DEVICE_ONLY__)
0569
0570
0571 #define SYCL_DEVICE_ONLY
0572 #endif
0573
0574
0575
0576
0577
0578 #if EIGEN_GNUC_AT_MOST(4,3) && !EIGEN_COMP_CLANG
0579
0580 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0
0581 #else
0582 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1
0583 #endif
0584
0585
0586 #ifdef __has_builtin
0587 # define EIGEN_HAS_BUILTIN(x) __has_builtin(x)
0588 #else
0589 # define EIGEN_HAS_BUILTIN(x) 0
0590 #endif
0591
0592
0593
0594 #ifndef __has_feature
0595 # define __has_feature(x) 0
0596 #endif
0597
0598
0599
0600 #if !( EIGEN_COMP_CLANG && ( (EIGEN_COMP_CLANG<309) \
0601 || (defined(__apple_build_version__) && (__apple_build_version__ < 9000000))) \
0602 || EIGEN_COMP_GNUC_STRICT && EIGEN_COMP_GNUC<49)
0603 #define EIGEN_HAS_STATIC_ARRAY_TEMPLATE 1
0604 #else
0605 #define EIGEN_HAS_STATIC_ARRAY_TEMPLATE 0
0606 #endif
0607
0608
0609
0610
0611
0612
0613
0614
0615 #if EIGEN_COMP_MSVC_LANG > 0
0616 #define EIGEN_CPLUSPLUS EIGEN_COMP_MSVC_LANG
0617 #elif EIGEN_COMP_MSVC >= 1900
0618 #define EIGEN_CPLUSPLUS 201103L
0619 #elif defined(__cplusplus)
0620 #define EIGEN_CPLUSPLUS __cplusplus
0621 #else
0622 #define EIGEN_CPLUSPLUS 0
0623 #endif
0624
0625
0626
0627
0628 #if EIGEN_CPLUSPLUS > 201703L
0629 #define EIGEN_COMP_CXXVER 20
0630 #elif EIGEN_CPLUSPLUS > 201402L
0631 #define EIGEN_COMP_CXXVER 17
0632 #elif EIGEN_CPLUSPLUS > 201103L
0633 #define EIGEN_COMP_CXXVER 14
0634 #elif EIGEN_CPLUSPLUS >= 201103L
0635 #define EIGEN_COMP_CXXVER 11
0636 #else
0637 #define EIGEN_COMP_CXXVER 03
0638 #endif
0639
0640 #ifndef EIGEN_HAS_CXX14_VARIABLE_TEMPLATES
0641 #if defined(__cpp_variable_templates) && __cpp_variable_templates >= 201304 && EIGEN_MAX_CPP_VER>=14
0642 #define EIGEN_HAS_CXX14_VARIABLE_TEMPLATES 1
0643 #else
0644 #define EIGEN_HAS_CXX14_VARIABLE_TEMPLATES 0
0645 #endif
0646 #endif
0647
0648
0649
0650
0651
0652
0653
0654 #if EIGEN_MAX_CPP_VER>=11 && EIGEN_COMP_CXXVER>=11
0655 #define EIGEN_HAS_CXX11 1
0656 #else
0657 #define EIGEN_HAS_CXX11 0
0658 #endif
0659
0660 #if EIGEN_MAX_CPP_VER>=14 && EIGEN_COMP_CXXVER>=14
0661 #define EIGEN_HAS_CXX14 1
0662 #else
0663 #define EIGEN_HAS_CXX14 0
0664 #endif
0665
0666
0667 #ifndef EIGEN_HAS_RVALUE_REFERENCES
0668 #if EIGEN_MAX_CPP_VER>=11 && \
0669 (__has_feature(cxx_rvalue_references) || \
0670 (EIGEN_COMP_CXXVER >= 11) || (EIGEN_COMP_MSVC >= 1600))
0671 #define EIGEN_HAS_RVALUE_REFERENCES 1
0672 #else
0673 #define EIGEN_HAS_RVALUE_REFERENCES 0
0674 #endif
0675 #endif
0676
0677
0678
0679 #include <cmath>
0680 #ifndef EIGEN_HAS_C99_MATH
0681 #if EIGEN_MAX_CPP_VER>=11 && \
0682 ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) \
0683 || (defined(__GNUC__) && defined(_GLIBCXX_USE_C99)) \
0684 || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) \
0685 || (EIGEN_COMP_MSVC >= 1900) || defined(SYCL_DEVICE_ONLY))
0686 #define EIGEN_HAS_C99_MATH 1
0687 #else
0688 #define EIGEN_HAS_C99_MATH 0
0689 #endif
0690 #endif
0691
0692
0693
0694 #ifndef EIGEN_HAS_STD_RESULT_OF
0695 #if EIGEN_HAS_CXX11 && EIGEN_COMP_CXXVER < 17
0696 #define EIGEN_HAS_STD_RESULT_OF 1
0697 #else
0698 #define EIGEN_HAS_STD_RESULT_OF 0
0699 #endif
0700 #endif
0701
0702
0703 #ifndef EIGEN_HAS_STD_HASH
0704
0705
0706 #if EIGEN_HAS_CXX11 && !defined(EIGEN_GPU_COMPILE_PHASE)
0707 #define EIGEN_HAS_STD_HASH 1
0708 #else
0709 #define EIGEN_HAS_STD_HASH 0
0710 #endif
0711 #endif
0712
0713 #ifndef EIGEN_HAS_STD_INVOKE_RESULT
0714 #if EIGEN_MAX_CPP_VER >= 17 && EIGEN_COMP_CXXVER >= 17
0715 #define EIGEN_HAS_STD_INVOKE_RESULT 1
0716 #else
0717 #define EIGEN_HAS_STD_INVOKE_RESULT 0
0718 #endif
0719 #endif
0720
0721 #ifndef EIGEN_HAS_ALIGNAS
0722 #if EIGEN_MAX_CPP_VER>=11 && EIGEN_HAS_CXX11 && \
0723 ( __has_feature(cxx_alignas) \
0724 || EIGEN_HAS_CXX14 \
0725 || (EIGEN_COMP_MSVC >= 1800) \
0726 || (EIGEN_GNUC_AT_LEAST(4,8)) \
0727 || (EIGEN_COMP_CLANG>=305) \
0728 || (EIGEN_COMP_ICC>=1500) \
0729 || (EIGEN_COMP_PGI>=1500) \
0730 || (EIGEN_COMP_SUNCC>=0x5130))
0731 #define EIGEN_HAS_ALIGNAS 1
0732 #else
0733 #define EIGEN_HAS_ALIGNAS 0
0734 #endif
0735 #endif
0736
0737
0738
0739
0740 #ifndef EIGEN_HAS_TYPE_TRAITS
0741 #if EIGEN_MAX_CPP_VER>=11 && (EIGEN_HAS_CXX11 || EIGEN_COMP_MSVC >= 1700) \
0742 && ((!EIGEN_COMP_GNUC_STRICT) || EIGEN_GNUC_AT_LEAST(5, 1)) \
0743 && ((!defined(__GLIBCXX__)) || __GLIBCXX__ > 20150626)
0744 #define EIGEN_HAS_TYPE_TRAITS 1
0745 #define EIGEN_INCLUDE_TYPE_TRAITS
0746 #else
0747 #define EIGEN_HAS_TYPE_TRAITS 0
0748 #endif
0749 #endif
0750
0751
0752 #ifndef EIGEN_HAS_VARIADIC_TEMPLATES
0753 #if EIGEN_MAX_CPP_VER>=11 && (EIGEN_COMP_CXXVER >= 11) \
0754 && (!defined(__NVCC__) || !EIGEN_ARCH_ARM_OR_ARM64 || (EIGEN_COMP_NVCC >= 80000) )
0755
0756
0757 #define EIGEN_HAS_VARIADIC_TEMPLATES 1
0758 #elif EIGEN_MAX_CPP_VER>=11 && (EIGEN_COMP_CXXVER >= 11) && defined(SYCL_DEVICE_ONLY)
0759 #define EIGEN_HAS_VARIADIC_TEMPLATES 1
0760 #else
0761 #define EIGEN_HAS_VARIADIC_TEMPLATES 0
0762 #endif
0763 #endif
0764
0765
0766 #ifndef EIGEN_HAS_CONSTEXPR
0767 #if defined(EIGEN_CUDACC)
0768
0769 #if EIGEN_MAX_CPP_VER>=14 && (EIGEN_COMP_CXXVER >= 11 && (EIGEN_COMP_CLANG || EIGEN_COMP_NVCC >= 70500))
0770 #define EIGEN_HAS_CONSTEXPR 1
0771 #endif
0772 #elif EIGEN_MAX_CPP_VER>=14 && (__has_feature(cxx_relaxed_constexpr) || (EIGEN_COMP_CXXVER >= 14) || \
0773 (EIGEN_GNUC_AT_LEAST(4,8) && (EIGEN_COMP_CXXVER >= 11)) || \
0774 (EIGEN_COMP_CLANG >= 306 && (EIGEN_COMP_CXXVER >= 11)))
0775 #define EIGEN_HAS_CONSTEXPR 1
0776 #endif
0777
0778 #ifndef EIGEN_HAS_CONSTEXPR
0779 #define EIGEN_HAS_CONSTEXPR 0
0780 #endif
0781
0782 #endif
0783
0784 #if EIGEN_HAS_CONSTEXPR
0785 #define EIGEN_CONSTEXPR constexpr
0786 #else
0787 #define EIGEN_CONSTEXPR
0788 #endif
0789
0790
0791
0792 #ifndef EIGEN_HAS_CXX11_MATH
0793 #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) \
0794 && (EIGEN_ARCH_i386_OR_x86_64) && (EIGEN_OS_GNULINUX || EIGEN_OS_WIN_STRICT || EIGEN_OS_MAC))
0795 #define EIGEN_HAS_CXX11_MATH 1
0796 #else
0797 #define EIGEN_HAS_CXX11_MATH 0
0798 #endif
0799 #endif
0800
0801
0802 #ifndef EIGEN_HAS_CXX11_CONTAINERS
0803 #if EIGEN_MAX_CPP_VER>=11 && \
0804 ((EIGEN_COMP_CXXVER > 11) \
0805 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC || EIGEN_COMP_ICC>=1400)))
0806 #define EIGEN_HAS_CXX11_CONTAINERS 1
0807 #else
0808 #define EIGEN_HAS_CXX11_CONTAINERS 0
0809 #endif
0810 #endif
0811
0812
0813 #ifndef EIGEN_HAS_CXX11_NOEXCEPT
0814 #if EIGEN_MAX_CPP_VER>=11 && \
0815 (__has_feature(cxx_noexcept) \
0816 || (EIGEN_COMP_CXXVER > 11) \
0817 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_CLANG || EIGEN_COMP_MSVC || EIGEN_COMP_ICC>=1400)))
0818 #define EIGEN_HAS_CXX11_NOEXCEPT 1
0819 #else
0820 #define EIGEN_HAS_CXX11_NOEXCEPT 0
0821 #endif
0822 #endif
0823
0824 #ifndef EIGEN_HAS_CXX11_ATOMIC
0825 #if EIGEN_MAX_CPP_VER>=11 && \
0826 (__has_feature(cxx_atomic) \
0827 || (EIGEN_COMP_CXXVER > 11) \
0828 || ((EIGEN_COMP_CXXVER == 11) && (EIGEN_COMP_MSVC==0 || EIGEN_COMP_MSVC >= 1700)))
0829 #define EIGEN_HAS_CXX11_ATOMIC 1
0830 #else
0831 #define EIGEN_HAS_CXX11_ATOMIC 0
0832 #endif
0833 #endif
0834
0835 #ifndef EIGEN_HAS_CXX11_OVERRIDE_FINAL
0836 #if EIGEN_MAX_CPP_VER>=11 && \
0837 (EIGEN_COMP_CXXVER >= 11 || EIGEN_COMP_MSVC >= 1700)
0838 #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 1
0839 #else
0840 #define EIGEN_HAS_CXX11_OVERRIDE_FINAL 0
0841 #endif
0842 #endif
0843
0844
0845
0846
0847
0848 #ifndef EIGEN_HAS_CXX17_OVERALIGN
0849 #if EIGEN_MAX_CPP_VER>=17 && EIGEN_COMP_CXXVER>=17 && ( \
0850 (EIGEN_COMP_MSVC >= 1912) \
0851 || (EIGEN_GNUC_AT_LEAST(7,0)) \
0852 || ((!defined(__apple_build_version__)) && (EIGEN_COMP_CLANG>=500)) \
0853 || (( defined(__apple_build_version__)) && (__apple_build_version__>=10000000)) \
0854 )
0855 #define EIGEN_HAS_CXX17_OVERALIGN 1
0856 #else
0857 #define EIGEN_HAS_CXX17_OVERALIGN 0
0858 #endif
0859 #endif
0860
0861 #if defined(EIGEN_CUDACC) && EIGEN_HAS_CONSTEXPR
0862
0863 #if defined(__NVCC__)
0864
0865 #ifdef __CUDACC_RELAXED_CONSTEXPR__
0866 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC
0867 #endif
0868 #elif defined(__clang__) && defined(__CUDA__) && __has_feature(cxx_relaxed_constexpr)
0869
0870 #define EIGEN_CONSTEXPR_ARE_DEVICE_FUNC
0871 #endif
0872 #endif
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882 #ifndef EIGEN_HAS_BUILTIN_INT128
0883 #if defined(__SIZEOF_INT128__) && !(EIGEN_OS_WIN && EIGEN_COMP_CLANG)
0884 #define EIGEN_HAS_BUILTIN_INT128 1
0885 #else
0886 #define EIGEN_HAS_BUILTIN_INT128 0
0887 #endif
0888 #endif
0889
0890
0891
0892
0893
0894
0895
0896 #define EIGEN_NOT_A_MACRO
0897
0898 #define EIGEN_DEBUG_VAR(x) std::cerr << #x << " = " << x << std::endl;
0899
0900
0901 #define EIGEN_CAT2(a,b) a ## b
0902 #define EIGEN_CAT(a,b) EIGEN_CAT2(a,b)
0903
0904 #define EIGEN_COMMA ,
0905
0906
0907 #define EIGEN_MAKESTRING2(a) #a
0908 #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a)
0909
0910
0911
0912
0913 #ifndef EIGEN_STRONG_INLINE
0914 #if (EIGEN_COMP_MSVC || EIGEN_COMP_ICC) && !defined(EIGEN_GPUCC)
0915 #define EIGEN_STRONG_INLINE __forceinline
0916 #else
0917 #define EIGEN_STRONG_INLINE inline
0918 #endif
0919 #endif
0920
0921
0922
0923
0924
0925
0926
0927
0928
0929 #if EIGEN_GNUC_AT_LEAST(4,2) && !defined(SYCL_DEVICE_ONLY)
0930 #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline
0931 #else
0932 #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE
0933 #endif
0934
0935 #if EIGEN_COMP_GNUC
0936 #define EIGEN_DONT_INLINE __attribute__((noinline))
0937 #elif EIGEN_COMP_MSVC
0938 #define EIGEN_DONT_INLINE __declspec(noinline)
0939 #else
0940 #define EIGEN_DONT_INLINE
0941 #endif
0942
0943 #if EIGEN_COMP_GNUC
0944 #define EIGEN_PERMISSIVE_EXPR __extension__
0945 #else
0946 #define EIGEN_PERMISSIVE_EXPR
0947 #endif
0948
0949
0950
0951
0952 #if defined(EIGEN_CUDACC) || defined(SYCL_DEVICE_ONLY) || defined(EIGEN_HIPCC)
0953
0954 #ifndef EIGEN_NO_DEBUG
0955 #define EIGEN_NO_DEBUG
0956 #endif
0957
0958 #ifdef EIGEN_INTERNAL_DEBUGGING
0959 #undef EIGEN_INTERNAL_DEBUGGING
0960 #endif
0961
0962 #ifdef EIGEN_EXCEPTIONS
0963 #undef EIGEN_EXCEPTIONS
0964 #endif
0965 #endif
0966
0967 #if defined(SYCL_DEVICE_ONLY)
0968 #ifndef EIGEN_DONT_VECTORIZE
0969 #define EIGEN_DONT_VECTORIZE
0970 #endif
0971 #define EIGEN_DEVICE_FUNC __attribute__((flatten)) __attribute__((always_inline))
0972
0973 #elif defined(EIGEN_GPUCC)
0974 #define EIGEN_DEVICE_FUNC __host__ __device__
0975 #else
0976 #define EIGEN_DEVICE_FUNC
0977 #endif
0978
0979
0980
0981
0982
0983
0984 #define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC
0985 #define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC inline
0986
0987 #ifdef NDEBUG
0988 # ifndef EIGEN_NO_DEBUG
0989 # define EIGEN_NO_DEBUG
0990 # endif
0991 #endif
0992
0993
0994 #ifdef EIGEN_NO_DEBUG
0995 #ifdef SYCL_DEVICE_ONLY
0996 #define eigen_plain_assert(x) EIGEN_UNUSED_VARIABLE(x)
0997 #else
0998 #define eigen_plain_assert(x)
0999 #endif
1000 #else
1001 #if EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO
1002 namespace Eigen {
1003 namespace internal {
1004 inline bool copy_bool(bool b) { return b; }
1005 }
1006 }
1007 #define eigen_plain_assert(x) assert(x)
1008 #else
1009
1010 #include <cstdlib> // for abort
1011 #include <iostream> // for std::cerr
1012
1013 namespace Eigen {
1014 namespace internal {
1015
1016
1017 namespace {
1018 EIGEN_DONT_INLINE bool copy_bool(bool b) { return b; }
1019 }
1020 inline void assert_fail(const char *condition, const char *function, const char *file, int line)
1021 {
1022 std::cerr << "assertion failed: " << condition << " in function " << function << " at " << file << ":" << line << std::endl;
1023 abort();
1024 }
1025 }
1026 }
1027 #define eigen_plain_assert(x) \
1028 do { \
1029 if(!Eigen::internal::copy_bool(x)) \
1030 Eigen::internal::assert_fail(EIGEN_MAKESTRING(x), __PRETTY_FUNCTION__, __FILE__, __LINE__); \
1031 } while(false)
1032 #endif
1033 #endif
1034
1035
1036 #ifndef eigen_assert
1037 #define eigen_assert(x) eigen_plain_assert(x)
1038 #endif
1039
1040 #ifdef EIGEN_INTERNAL_DEBUGGING
1041 #define eigen_internal_assert(x) eigen_assert(x)
1042 #else
1043 #define eigen_internal_assert(x)
1044 #endif
1045
1046 #ifdef EIGEN_NO_DEBUG
1047 #define EIGEN_ONLY_USED_FOR_DEBUG(x) EIGEN_UNUSED_VARIABLE(x)
1048 #else
1049 #define EIGEN_ONLY_USED_FOR_DEBUG(x)
1050 #endif
1051
1052 #ifndef EIGEN_NO_DEPRECATED_WARNING
1053 #if EIGEN_COMP_GNUC
1054 #define EIGEN_DEPRECATED __attribute__((deprecated))
1055 #elif EIGEN_COMP_MSVC
1056 #define EIGEN_DEPRECATED __declspec(deprecated)
1057 #else
1058 #define EIGEN_DEPRECATED
1059 #endif
1060 #else
1061 #define EIGEN_DEPRECATED
1062 #endif
1063
1064 #if EIGEN_COMP_GNUC
1065 #define EIGEN_UNUSED __attribute__((unused))
1066 #else
1067 #define EIGEN_UNUSED
1068 #endif
1069
1070
1071 namespace Eigen {
1072 namespace internal {
1073 template<typename T> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ignore_unused_variable(const T&) {}
1074 }
1075 }
1076 #define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var);
1077
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)
1081 #else
1082 #define EIGEN_ASM_COMMENT(X)
1083 #endif
1084 #endif
1085
1086
1087
1088
1089
1090
1091
1092 #if !defined(EIGEN_OPTIMIZATION_BARRIER)
1093 #if EIGEN_COMP_GNUC
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126 #if EIGEN_ARCH_PPC && EIGEN_COMP_GNUC_STRICT
1127
1128
1129
1130
1131 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+r,v,wa" (X));
1132 #elif EIGEN_ARCH_ARM_OR_ARM64
1133
1134 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,w" (X));
1135 #elif EIGEN_ARCH_i386_OR_x86_64
1136
1137 #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,x" (X));
1138 #else
1139
1140 #define EIGEN_OPTIMIZATION_BARRIER(X)
1141 #endif
1142 #else
1143
1144 #define EIGEN_OPTIMIZATION_BARRIER(X)
1145 #endif
1146 #endif
1147
1148 #if EIGEN_COMP_MSVC
1149
1150
1151 # define EIGEN_CONST_CONDITIONAL(cond) (void)0, cond
1152 #else
1153 # define EIGEN_CONST_CONDITIONAL(cond) cond
1154 #endif
1155
1156 #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD
1157 #define EIGEN_RESTRICT
1158 #endif
1159 #ifndef EIGEN_RESTRICT
1160 #define EIGEN_RESTRICT __restrict
1161 #endif
1162
1163
1164 #ifndef EIGEN_DEFAULT_IO_FORMAT
1165 #ifdef EIGEN_MAKING_DOCS
1166
1167
1168 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat(3, 0, " ", "\n", "", "")
1169 #else
1170 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat()
1171 #endif
1172 #endif
1173
1174
1175 #define EIGEN_EMPTY
1176
1177
1178
1179
1180
1181
1182 #if (defined(EIGEN_CUDA_ARCH) && defined(__NVCC__)) || defined(EIGEN_HIP_DEVICE_COMPILE)
1183 #define EIGEN_USING_STD(FUNC) using ::FUNC;
1184 #else
1185 #define EIGEN_USING_STD(FUNC) using std::FUNC;
1186 #endif
1187
1188 #if EIGEN_COMP_MSVC_STRICT && (EIGEN_COMP_MSVC < 1900 || (EIGEN_COMP_MSVC == 1900 && EIGEN_COMP_NVCC))
1189
1190
1191
1192
1193
1194 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \
1195 using Base::operator =;
1196 #elif EIGEN_COMP_CLANG
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; }
1202 #else
1203 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \
1204 using Base::operator =; \
1205 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) \
1206 { \
1207 Base::operator=(other); \
1208 return *this; \
1209 }
1210 #endif
1211
1212
1213
1214
1215
1216
1217
1218 #if EIGEN_HAS_CXX11
1219 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS) CLASS(const CLASS&) = default;
1220 #else
1221 #define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS)
1222 #endif
1223
1224
1225
1226
1227
1228
1229
1230
1231 #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) \
1232 EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \
1233 EIGEN_DEFAULT_COPY_CONSTRUCTOR(Derived)
1234
1235
1236
1237
1238
1239
1240
1241
1242 #if EIGEN_HAS_CXX11
1243 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \
1244 Derived() = default; \
1245 ~Derived() = default;
1246 #else
1247 #define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived) \
1248 Derived() {}; \
1249
1250 #endif
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
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;
1280
1281
1282
1283 #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \
1284 EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \
1285 typedef typename Base::PacketScalar PacketScalar;
1286
1287
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)
1290
1291
1292
1293
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)
1298
1299
1300
1301
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)
1308
1309
1310 #define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \
1311 : ((int)a >= (int)b) ? (int)a : (int)b)
1312
1313 #define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b)))
1314
1315 #define EIGEN_IMPLIES(a,b) (!(a) || (b))
1316
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))
1320 #else
1321 #define EIGEN_PREDICT_FALSE(x) (x)
1322 #define EIGEN_PREDICT_TRUE(x) (x)
1323 #endif
1324
1325
1326 #define EIGEN_CWISE_BINARY_RETURN_TYPE(LHS,RHS,OPNAME) \
1327 CwiseBinaryOp< \
1328 EIGEN_CAT(EIGEN_CAT(internal::scalar_,OPNAME),_op)< \
1329 typename internal::traits<LHS>::Scalar, \
1330 typename internal::traits<RHS>::Scalar \
1331 >, \
1332 const LHS, \
1333 const RHS \
1334 >
1335
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 \
1340 { \
1341 return EIGEN_CWISE_BINARY_RETURN_TYPE(Derived,OtherDerived,OPNAME)(derived(), other.derived()); \
1342 }
1343
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)
1346
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>
1350
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>
1354
1355
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
1358 #else
1359 #define EIGEN_MSVC10_WORKAROUND_BINARYOP_RETURN_TYPE(X) X
1360 #endif
1361
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))); \
1369 }
1370
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()); \
1378 }
1379
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)
1383
1384
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
1387 #endif
1388
1389
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)
1395 #else
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")
1402 # else
1403 # define EIGEN_THROW_X(X) std::abort()
1404 # define EIGEN_THROW std::abort()
1405 # endif
1406 # define EIGEN_TRY if (true)
1407 # define EIGEN_CATCH(X) else
1408 #endif
1409
1410
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)
1417 #else
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
1422
1423
1424 # define EIGEN_EXCEPTION_SPEC(X) throw()
1425 # else
1426 # define EIGEN_EXCEPTION_SPEC(X) throw(X)
1427 # endif
1428 #endif
1429
1430 #if EIGEN_HAS_VARIADIC_TEMPLATES
1431
1432 namespace Eigen {
1433 namespace internal {
1434
1435 inline bool all(){ return true; }
1436
1437 template<typename T, typename ...Ts>
1438 bool all(T t, Ts ... ts){ return t && all(ts...); }
1439
1440 }
1441 }
1442 #endif
1443
1444 #if EIGEN_HAS_CXX11_OVERRIDE_FINAL
1445
1446 # define EIGEN_OVERRIDE override
1447 # define EIGEN_FINAL final
1448 #else
1449 # define EIGEN_OVERRIDE
1450 # define EIGEN_FINAL
1451 #endif
1452
1453
1454 #if defined(SYCL_DEVICE_ONLY)
1455 #if defined(_MSC_VER)
1456 #define EIGEN_UNROLL_LOOP __pragma(unroll)
1457 #else
1458 #define EIGEN_UNROLL_LOOP _Pragma("unroll")
1459 #endif
1460 #else
1461 #define EIGEN_UNROLL_LOOP
1462 #endif
1463
1464 #endif