forgeo-gmlib 0.6.2__cp310-cp310-musllinux_1_2_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (554) hide show
  1. forgeo/gmlib/GeologicalModel3D.py +758 -0
  2. forgeo/gmlib/__init__.py +9 -0
  3. forgeo/gmlib/_version.py +34 -0
  4. forgeo/gmlib/architecture/__init__.py +1 -0
  5. forgeo/gmlib/architecture/core.py +130 -0
  6. forgeo/gmlib/common.cpython-310-x86_64-linux-gnu.so +0 -0
  7. forgeo/gmlib/fault_network.py +171 -0
  8. forgeo/gmlib/geomodeller_data.py +101 -0
  9. forgeo/gmlib/geomodeller_project.py +396 -0
  10. forgeo/gmlib/myxmltools.py +30 -0
  11. forgeo/gmlib/pypotential2D.cpython-310-x86_64-linux-gnu.so +0 -0
  12. forgeo/gmlib/pypotential3D.cpython-310-x86_64-linux-gnu.so +0 -0
  13. forgeo/gmlib/tesselate.py +236 -0
  14. forgeo/gmlib/tesselate_deprecated.py +249 -0
  15. forgeo/gmlib/topography_reader.py +198 -0
  16. forgeo/gmlib/utils/__init__.py +0 -0
  17. forgeo/gmlib/utils/append_data.py +508 -0
  18. forgeo/gmlib/utils/export.py +45 -0
  19. forgeo/gmlib/utils/normalized_gradient.py +40 -0
  20. forgeo/gmlib/utils/tools.py +35 -0
  21. forgeo_gmlib-0.6.2.dist-info/METADATA +23 -0
  22. forgeo_gmlib-0.6.2.dist-info/RECORD +554 -0
  23. forgeo_gmlib-0.6.2.dist-info/WHEEL +5 -0
  24. forgeo_gmlib-0.6.2.dist-info/licenses/LICENSE +661 -0
  25. include/eigen3/Eigen/Cholesky +45 -0
  26. include/eigen3/Eigen/CholmodSupport +48 -0
  27. include/eigen3/Eigen/Core +385 -0
  28. include/eigen3/Eigen/Dense +7 -0
  29. include/eigen3/Eigen/Eigen +2 -0
  30. include/eigen3/Eigen/Eigenvalues +60 -0
  31. include/eigen3/Eigen/Geometry +59 -0
  32. include/eigen3/Eigen/Householder +29 -0
  33. include/eigen3/Eigen/IterativeLinearSolvers +48 -0
  34. include/eigen3/Eigen/Jacobi +32 -0
  35. include/eigen3/Eigen/KLUSupport +41 -0
  36. include/eigen3/Eigen/LU +47 -0
  37. include/eigen3/Eigen/MetisSupport +35 -0
  38. include/eigen3/Eigen/OrderingMethods +70 -0
  39. include/eigen3/Eigen/PaStiXSupport +49 -0
  40. include/eigen3/Eigen/PardisoSupport +35 -0
  41. include/eigen3/Eigen/QR +50 -0
  42. include/eigen3/Eigen/QtAlignedMalloc +39 -0
  43. include/eigen3/Eigen/SPQRSupport +34 -0
  44. include/eigen3/Eigen/SVD +50 -0
  45. include/eigen3/Eigen/Sparse +34 -0
  46. include/eigen3/Eigen/SparseCholesky +37 -0
  47. include/eigen3/Eigen/SparseCore +69 -0
  48. include/eigen3/Eigen/SparseLU +48 -0
  49. include/eigen3/Eigen/SparseQR +36 -0
  50. include/eigen3/Eigen/StdDeque +27 -0
  51. include/eigen3/Eigen/StdList +26 -0
  52. include/eigen3/Eigen/StdVector +27 -0
  53. include/eigen3/Eigen/SuperLUSupport +64 -0
  54. include/eigen3/Eigen/UmfPackSupport +40 -0
  55. include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
  56. include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
  57. include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  58. include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  59. include/eigen3/Eigen/src/Core/ArithmeticSequence.h +406 -0
  60. include/eigen3/Eigen/src/Core/Array.h +425 -0
  61. include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  62. include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
  63. include/eigen3/Eigen/src/Core/Assign.h +90 -0
  64. include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
  65. include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
  66. include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
  67. include/eigen3/Eigen/src/Core/Block.h +463 -0
  68. include/eigen3/Eigen/src/Core/BooleanRedux.h +164 -0
  69. include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
  70. include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
  71. include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
  72. include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
  73. include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  74. include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  75. include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  76. include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  77. include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
  78. include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
  79. include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  80. include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
  81. include/eigen3/Eigen/src/Core/Diagonal.h +259 -0
  82. include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
  83. include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
  84. include/eigen3/Eigen/src/Core/Dot.h +313 -0
  85. include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
  86. include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  87. include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
  88. include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
  89. include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
  90. include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
  91. include/eigen3/Eigen/src/Core/IO.h +258 -0
  92. include/eigen3/Eigen/src/Core/IndexedView.h +247 -0
  93. include/eigen3/Eigen/src/Core/Inverse.h +117 -0
  94. include/eigen3/Eigen/src/Core/Map.h +171 -0
  95. include/eigen3/Eigen/src/Core/MapBase.h +310 -0
  96. include/eigen3/Eigen/src/Core/MathFunctions.h +2212 -0
  97. include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  98. include/eigen3/Eigen/src/Core/Matrix.h +578 -0
  99. include/eigen3/Eigen/src/Core/MatrixBase.h +541 -0
  100. include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
  101. include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
  102. include/eigen3/Eigen/src/Core/NumTraits.h +351 -0
  103. include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +237 -0
  104. include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
  105. include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
  106. include/eigen3/Eigen/src/Core/Product.h +191 -0
  107. include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
  108. include/eigen3/Eigen/src/Core/Random.h +218 -0
  109. include/eigen3/Eigen/src/Core/Redux.h +515 -0
  110. include/eigen3/Eigen/src/Core/Ref.h +381 -0
  111. include/eigen3/Eigen/src/Core/Replicate.h +142 -0
  112. include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
  113. include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
  114. include/eigen3/Eigen/src/Core/Reverse.h +217 -0
  115. include/eigen3/Eigen/src/Core/Select.h +164 -0
  116. include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
  117. include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  118. include/eigen3/Eigen/src/Core/Solve.h +188 -0
  119. include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
  120. include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
  121. include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
  122. include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
  123. include/eigen3/Eigen/src/Core/Stride.h +120 -0
  124. include/eigen3/Eigen/src/Core/Swap.h +68 -0
  125. include/eigen3/Eigen/src/Core/Transpose.h +464 -0
  126. include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
  127. include/eigen3/Eigen/src/Core/TriangularMatrix.h +994 -0
  128. include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
  129. include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
  130. include/eigen3/Eigen/src/Core/Visitor.h +381 -0
  131. include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +368 -0
  132. include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  133. include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1588 -0
  134. include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  135. include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +384 -0
  136. include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +361 -0
  137. include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2270 -0
  138. include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  139. include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +415 -0
  140. include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +119 -0
  141. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2776 -0
  142. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +159 -0
  143. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +627 -0
  144. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.h +2400 -0
  145. include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2743 -0
  146. include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +269 -0
  147. include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +688 -0
  148. include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  149. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1662 -0
  150. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +116 -0
  151. include/eigen3/Eigen/src/Core/arch/Default/Half.h +950 -0
  152. include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  153. include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  154. include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  155. include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1646 -0
  156. include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +79 -0
  157. include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  158. include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +645 -0
  159. include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  160. include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  161. include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +560 -0
  162. include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  163. include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  164. include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4653 -0
  165. include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1424 -0
  166. include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +338 -0
  167. include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  168. include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  169. include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  170. include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  171. include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  172. include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  173. include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  174. include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  175. include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  176. include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  177. include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  178. include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +428 -0
  179. include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  180. include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  181. include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  182. include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  183. include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  184. include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
  185. include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  186. include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  187. include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  188. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  189. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +322 -0
  190. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  191. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  192. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +523 -0
  193. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  194. include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
  195. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  196. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  197. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  198. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  199. include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  200. include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  201. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  202. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  203. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  204. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  205. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  206. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  207. include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  208. include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
  209. include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +521 -0
  210. include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
  211. include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +138 -0
  212. include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  213. include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  214. include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
  215. include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
  216. include/eigen3/Eigen/src/Core/util/Macros.h +1511 -0
  217. include/eigen3/Eigen/src/Core/util/Memory.h +1202 -0
  218. include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
  219. include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  220. include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  221. include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  222. include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
  223. include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  224. include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
  225. include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +345 -0
  226. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  227. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  228. include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  229. include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +417 -0
  230. include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  231. include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  232. include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  233. include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  234. include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +557 -0
  235. include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  236. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  237. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  238. include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +560 -0
  239. include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
  240. include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
  241. include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
  242. include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
  243. include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
  244. include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
  245. include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  246. include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
  247. include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
  248. include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  249. include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
  250. include/eigen3/Eigen/src/Geometry/Transform.h +1566 -0
  251. include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
  252. include/eigen3/Eigen/src/Geometry/Umeyama.h +168 -0
  253. include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  254. include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
  255. include/eigen3/Eigen/src/Householder/Householder.h +176 -0
  256. include/eigen3/Eigen/src/Householder/HouseholderSequence.h +553 -0
  257. include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  258. include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  259. include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +227 -0
  260. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  261. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  262. include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  263. include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  264. include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  265. include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
  266. include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  267. include/eigen3/Eigen/src/LU/Determinant.h +117 -0
  268. include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
  269. include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
  270. include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
  271. include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  272. include/eigen3/Eigen/src/LU/arch/InverseSize4.h +363 -0
  273. include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  274. include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
  275. include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  276. include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
  277. include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  278. include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  279. include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  280. include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  281. include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  282. include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  283. include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
  284. include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  285. include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  286. include/eigen3/Eigen/src/SVD/BDCSVD.h +1377 -0
  287. include/eigen3/Eigen/src/SVD/JacobiSVD.h +813 -0
  288. include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  289. include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
  290. include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +415 -0
  291. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  292. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  293. include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
  294. include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  295. include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  296. include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  297. include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
  298. include/eigen3/Eigen/src/SparseCore/SparseBlock.h +566 -0
  299. include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  300. include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  301. include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  302. include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  303. include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  304. include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  305. include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
  306. include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  307. include/eigen3/Eigen/src/SparseCore/SparseMap.h +306 -0
  308. include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  309. include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +399 -0
  310. include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  311. include/eigen3/Eigen/src/SparseCore/SparseProduct.h +182 -0
  312. include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
  313. include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
  314. include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  315. include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  316. include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  317. include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  318. include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  319. include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
  320. include/eigen3/Eigen/src/SparseCore/SparseVector.h +480 -0
  321. include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
  322. include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  323. include/eigen3/Eigen/src/SparseLU/SparseLU.h +925 -0
  324. include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  325. include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  326. include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  327. include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +374 -0
  328. include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  329. include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  330. include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  331. include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  332. include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +121 -0
  333. include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +129 -0
  334. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +222 -0
  335. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  336. include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  337. include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  338. include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  339. include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
  340. include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
  341. include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
  342. include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
  343. include/eigen3/Eigen/src/StlSupport/details.h +84 -0
  344. include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  345. include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  346. include/eigen3/Eigen/src/misc/Image.h +82 -0
  347. include/eigen3/Eigen/src/misc/Kernel.h +79 -0
  348. include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
  349. include/eigen3/Eigen/src/misc/blas.h +440 -0
  350. include/eigen3/Eigen/src/misc/lapack.h +152 -0
  351. include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
  352. include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
  353. include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +431 -0
  354. include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  355. include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
  356. include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  357. include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  358. include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  359. include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +184 -0
  360. include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  361. include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
  362. include/eigen3/signature_of_eigen3_matrix_library +1 -0
  363. include/eigen3/unsupported/Eigen/AdolcForward +159 -0
  364. include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
  365. include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
  366. include/eigen3/unsupported/Eigen/AutoDiff +48 -0
  367. include/eigen3/unsupported/Eigen/BVH +95 -0
  368. include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
  369. include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
  370. include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
  371. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
  372. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +327 -0
  373. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +242 -0
  374. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
  375. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
  376. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1083 -0
  377. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +510 -0
  378. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +373 -0
  379. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1019 -0
  380. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
  381. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
  382. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
  383. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
  384. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
  385. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
  386. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +455 -0
  387. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1126 -0
  388. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +536 -0
  389. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +213 -0
  390. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +342 -0
  391. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
  392. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
  393. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
  394. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
  395. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
  396. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
  397. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +234 -0
  398. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +493 -0
  399. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +229 -0
  400. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +980 -0
  401. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +701 -0
  402. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +389 -0
  403. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
  404. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +377 -0
  405. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +232 -0
  406. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
  407. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
  408. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +297 -0
  409. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
  410. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
  411. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
  412. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
  413. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +602 -0
  414. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +735 -0
  415. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +244 -0
  416. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
  417. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +257 -0
  418. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +213 -0
  419. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
  420. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
  421. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
  422. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1098 -0
  423. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +705 -0
  424. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +286 -0
  425. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +317 -0
  426. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +1000 -0
  427. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
  428. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +973 -0
  429. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
  430. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
  431. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +462 -0
  432. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
  433. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
  434. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +466 -0
  435. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +157 -0
  436. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +341 -0
  437. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +299 -0
  438. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
  439. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
  440. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +628 -0
  441. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
  442. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
  443. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
  444. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
  445. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
  446. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
  447. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
  448. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
  449. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
  450. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
  451. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
  452. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
  453. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
  454. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +538 -0
  455. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
  456. include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
  457. include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
  458. include/eigen3/unsupported/Eigen/EulerAngles +43 -0
  459. include/eigen3/unsupported/Eigen/FFT +420 -0
  460. include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
  461. include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
  462. include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
  463. include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
  464. include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
  465. include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
  466. include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
  467. include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
  468. include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
  469. include/eigen3/unsupported/Eigen/Polynomials +137 -0
  470. include/eigen3/unsupported/Eigen/Skyline +39 -0
  471. include/eigen3/unsupported/Eigen/SparseExtra +54 -0
  472. include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
  473. include/eigen3/unsupported/Eigen/Splines +35 -0
  474. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
  475. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
  476. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
  477. include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
  478. include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
  479. include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
  480. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +356 -0
  481. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +306 -0
  482. include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
  483. include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
  484. include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
  485. include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
  486. include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
  487. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
  488. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
  489. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
  490. include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
  491. include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
  492. include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
  493. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
  494. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
  495. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
  496. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
  497. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
  498. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
  499. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
  500. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
  501. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
  502. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
  503. include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
  504. include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
  505. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
  506. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
  507. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
  508. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
  509. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
  510. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
  511. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
  512. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
  513. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
  514. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
  515. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
  516. include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
  517. include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
  518. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +429 -0
  519. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
  520. include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
  521. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
  522. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
  523. include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
  524. include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
  525. include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
  526. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
  527. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
  528. include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
  529. include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
  530. include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
  531. include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
  532. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
  533. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
  534. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
  535. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
  536. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
  537. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
  538. include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
  539. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
  540. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
  541. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
  542. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
  543. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2051 -0
  544. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
  545. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
  546. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
  547. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +51 -0
  548. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
  549. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
  550. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
  551. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
  552. include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
  553. include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
  554. include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
@@ -0,0 +1,950 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // This Source Code Form is subject to the terms of the Mozilla
5
+ // Public License v. 2.0. If a copy of the MPL was not distributed
6
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
+ //
8
+ // The conversion routines are Copyright (c) Fabian Giesen, 2016.
9
+ // The original license follows:
10
+ //
11
+ // Copyright (c) Fabian Giesen, 2016
12
+ // All rights reserved.
13
+ // Redistribution and use in source and binary forms, with or without
14
+ // modification, are permitted.
15
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
+ // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+
28
+ // Standard 16-bit float type, mostly useful for GPUs. Defines a new
29
+ // type Eigen::half (inheriting either from CUDA's or HIP's __half struct) with
30
+ // operator overloads such that it behaves basically as an arithmetic
31
+ // type. It will be quite slow on CPUs (so it is recommended to stay
32
+ // in fp32 for CPUs, except for simple parameter conversions, I/O
33
+ // to disk and the likes), but fast on GPUs.
34
+
35
+
36
+ #ifndef EIGEN_HALF_H
37
+ #define EIGEN_HALF_H
38
+
39
+ #if defined(EIGEN_HAS_GPU_FP16) || defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
40
+ // When compiling with GPU support, the "__half_raw" base class as well as
41
+ // some other routines are defined in the GPU compiler header files
42
+ // (cuda_fp16.h, hip_fp16.h), and they are not tagged constexpr
43
+ // As a consequence, we get compile failures when compiling Eigen with
44
+ // GPU support. Hence the need to disable EIGEN_CONSTEXPR when building
45
+ // Eigen with GPU support
46
+ #pragma push_macro("EIGEN_CONSTEXPR")
47
+ #undef EIGEN_CONSTEXPR
48
+ #define EIGEN_CONSTEXPR
49
+ #endif
50
+
51
+ #define F16_PACKET_FUNCTION(PACKET_F, PACKET_F16, METHOD) \
52
+ template <> \
53
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_UNUSED \
54
+ PACKET_F16 METHOD<PACKET_F16>(const PACKET_F16& _x) { \
55
+ return float2half(METHOD<PACKET_F>(half2float(_x))); \
56
+ }
57
+
58
+ namespace Eigen {
59
+
60
+ struct half;
61
+
62
+ namespace half_impl {
63
+
64
+ // We want to use the __half_raw struct from the HIP header file only during the device compile phase.
65
+ // This is required because of a quirk in the way TensorFlow GPU builds are done.
66
+ // When compiling TensorFlow source code with GPU support, files that
67
+ // * contain GPU kernels (i.e. *.cu.cc files) are compiled via hipcc
68
+ // * do not contain GPU kernels ( i.e. *.cc files) are compiled via gcc (typically)
69
+ //
70
+ // Tensorflow uses the Eigen::half type as its FP16 type, and there are functions that
71
+ // * are defined in a file that gets compiled via hipcc AND
72
+ // * have Eigen::half as a pass-by-value argument AND
73
+ // * are called in a file that gets compiled via gcc
74
+ //
75
+ // In the scenario described above the caller and callee will see different versions
76
+ // of the Eigen::half base class __half_raw, and they will be compiled by different compilers
77
+ //
78
+ // There appears to be an ABI mismatch between gcc and clang (which is called by hipcc) that results in
79
+ // the callee getting corrupted values for the Eigen::half argument.
80
+ //
81
+ // Making the host side compile phase of hipcc use the same Eigen::half impl, as the gcc compile, resolves
82
+ // this error, and hence the following convoluted #if condition
83
+ #if !defined(EIGEN_HAS_GPU_FP16) || !defined(EIGEN_GPU_COMPILE_PHASE)
84
+ // Make our own __half_raw definition that is similar to CUDA's.
85
+ struct __half_raw {
86
+ #if (defined(EIGEN_HAS_GPU_FP16) && !defined(EIGEN_GPU_COMPILE_PHASE))
87
+ // Eigen::half can be used as the datatype for shared memory declarations (in Eigen and TF)
88
+ // The element type for shared memory cannot have non-trivial constructors
89
+ // and hence the following special casing (which skips the zero-initilization).
90
+ // Note that this check gets done even in the host compilation phase, and
91
+ // hence the need for this
92
+ EIGEN_DEVICE_FUNC __half_raw() {}
93
+ #else
94
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw() : x(0) {}
95
+ #endif
96
+ #if defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
97
+ explicit EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw(numext::uint16_t raw) : x(numext::bit_cast<__fp16>(raw)) {
98
+ }
99
+ __fp16 x;
100
+ #else
101
+ explicit EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw(numext::uint16_t raw) : x(raw) {}
102
+ numext::uint16_t x;
103
+ #endif
104
+ };
105
+
106
+ #elif defined(EIGEN_HAS_HIP_FP16)
107
+ // Nothing to do here
108
+ // HIP fp16 header file has a definition for __half_raw
109
+ #elif defined(EIGEN_HAS_CUDA_FP16)
110
+ #if EIGEN_CUDA_SDK_VER < 90000
111
+ // In CUDA < 9.0, __half is the equivalent of CUDA 9's __half_raw
112
+ typedef __half __half_raw;
113
+ #endif // defined(EIGEN_HAS_CUDA_FP16)
114
+ #elif defined(SYCL_DEVICE_ONLY)
115
+ typedef cl::sycl::half __half_raw;
116
+ #endif
117
+
118
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw raw_uint16_to_half(numext::uint16_t x);
119
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC __half_raw float_to_half_rtne(float ff);
120
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC float half_to_float(__half_raw h);
121
+
122
+ struct half_base : public __half_raw {
123
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half_base() {}
124
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half_base(const __half_raw& h) : __half_raw(h) {}
125
+
126
+ #if defined(EIGEN_HAS_GPU_FP16)
127
+ #if defined(EIGEN_HAS_HIP_FP16)
128
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half_base(const __half& h) { x = __half_as_ushort(h); }
129
+ #elif defined(EIGEN_HAS_CUDA_FP16)
130
+ #if EIGEN_CUDA_SDK_VER >= 90000
131
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half_base(const __half& h) : __half_raw(*(__half_raw*)&h) {}
132
+ #endif
133
+ #endif
134
+ #endif
135
+ };
136
+
137
+ } // namespace half_impl
138
+
139
+ // Class definition.
140
+ struct half : public half_impl::half_base {
141
+
142
+ // Writing this out as separate #if-else blocks to make the code easier to follow
143
+ // The same applies to most #if-else blocks in this file
144
+ #if !defined(EIGEN_HAS_GPU_FP16) || !defined(EIGEN_GPU_COMPILE_PHASE)
145
+ // Use the same base class for the following two scenarios
146
+ // * when compiling without GPU support enabled
147
+ // * during host compile phase when compiling with GPU support enabled
148
+ typedef half_impl::__half_raw __half_raw;
149
+ #elif defined(EIGEN_HAS_HIP_FP16)
150
+ // Nothing to do here
151
+ // HIP fp16 header file has a definition for __half_raw
152
+ #elif defined(EIGEN_HAS_CUDA_FP16)
153
+ // Note that EIGEN_CUDA_SDK_VER is set to 0 even when compiling with HIP, so
154
+ // (EIGEN_CUDA_SDK_VER < 90000) is true even for HIP! So keeping this within
155
+ // #if defined(EIGEN_HAS_CUDA_FP16) is needed
156
+ #if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 90000
157
+ typedef half_impl::__half_raw __half_raw;
158
+ #endif
159
+ #endif
160
+
161
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half() {}
162
+
163
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half(const __half_raw& h) : half_impl::half_base(h) {}
164
+
165
+ #if defined(EIGEN_HAS_GPU_FP16)
166
+ #if defined(EIGEN_HAS_HIP_FP16)
167
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half(const __half& h) : half_impl::half_base(h) {}
168
+ #elif defined(EIGEN_HAS_CUDA_FP16)
169
+ #if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER >= 90000
170
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half(const __half& h) : half_impl::half_base(h) {}
171
+ #endif
172
+ #endif
173
+ #endif
174
+
175
+
176
+ explicit EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR half(bool b)
177
+ : half_impl::half_base(half_impl::raw_uint16_to_half(b ? 0x3c00 : 0)) {}
178
+ template<class T>
179
+ explicit EIGEN_DEVICE_FUNC half(T val)
180
+ : half_impl::half_base(half_impl::float_to_half_rtne(static_cast<float>(val))) {}
181
+ explicit EIGEN_DEVICE_FUNC half(float f)
182
+ : half_impl::half_base(half_impl::float_to_half_rtne(f)) {}
183
+
184
+ // Following the convention of numpy, converting between complex and
185
+ // float will lead to loss of imag value.
186
+ template<typename RealScalar>
187
+ explicit EIGEN_DEVICE_FUNC half(std::complex<RealScalar> c)
188
+ : half_impl::half_base(half_impl::float_to_half_rtne(static_cast<float>(c.real()))) {}
189
+
190
+ EIGEN_DEVICE_FUNC operator float() const { // NOLINT: Allow implicit conversion to float, because it is lossless.
191
+ return half_impl::half_to_float(*this);
192
+ }
193
+
194
+ #if defined(EIGEN_HAS_GPU_FP16) && !defined(EIGEN_GPU_COMPILE_PHASE)
195
+ EIGEN_DEVICE_FUNC operator __half() const {
196
+ ::__half_raw hr;
197
+ hr.x = x;
198
+ return __half(hr);
199
+ }
200
+ #endif
201
+ };
202
+
203
+ } // end namespace Eigen
204
+
205
+ namespace std {
206
+ template<>
207
+ struct numeric_limits<Eigen::half> {
208
+ static const bool is_specialized = true;
209
+ static const bool is_signed = true;
210
+ static const bool is_integer = false;
211
+ static const bool is_exact = false;
212
+ static const bool has_infinity = true;
213
+ static const bool has_quiet_NaN = true;
214
+ static const bool has_signaling_NaN = true;
215
+ static const float_denorm_style has_denorm = denorm_present;
216
+ static const bool has_denorm_loss = false;
217
+ static const std::float_round_style round_style = std::round_to_nearest;
218
+ static const bool is_iec559 = false;
219
+ static const bool is_bounded = false;
220
+ static const bool is_modulo = false;
221
+ static const int digits = 11;
222
+ static const int digits10 = 3; // according to http://half.sourceforge.net/structstd_1_1numeric__limits_3_01half__float_1_1half_01_4.html
223
+ static const int max_digits10 = 5; // according to http://half.sourceforge.net/structstd_1_1numeric__limits_3_01half__float_1_1half_01_4.html
224
+ static const int radix = 2;
225
+ static const int min_exponent = -13;
226
+ static const int min_exponent10 = -4;
227
+ static const int max_exponent = 16;
228
+ static const int max_exponent10 = 4;
229
+ static const bool traps = true;
230
+ static const bool tinyness_before = false;
231
+
232
+ static Eigen::half (min)() { return Eigen::half_impl::raw_uint16_to_half(0x400); }
233
+ static Eigen::half lowest() { return Eigen::half_impl::raw_uint16_to_half(0xfbff); }
234
+ static Eigen::half (max)() { return Eigen::half_impl::raw_uint16_to_half(0x7bff); }
235
+ static Eigen::half epsilon() { return Eigen::half_impl::raw_uint16_to_half(0x0800); }
236
+ static Eigen::half round_error() { return Eigen::half(0.5); }
237
+ static Eigen::half infinity() { return Eigen::half_impl::raw_uint16_to_half(0x7c00); }
238
+ static Eigen::half quiet_NaN() { return Eigen::half_impl::raw_uint16_to_half(0x7e00); }
239
+ static Eigen::half signaling_NaN() { return Eigen::half_impl::raw_uint16_to_half(0x7d00); }
240
+ static Eigen::half denorm_min() { return Eigen::half_impl::raw_uint16_to_half(0x1); }
241
+ };
242
+
243
+ // If std::numeric_limits<T> is specialized, should also specialize
244
+ // std::numeric_limits<const T>, std::numeric_limits<volatile T>, and
245
+ // std::numeric_limits<const volatile T>
246
+ // https://stackoverflow.com/a/16519653/
247
+ template<>
248
+ struct numeric_limits<const Eigen::half> : numeric_limits<Eigen::half> {};
249
+ template<>
250
+ struct numeric_limits<volatile Eigen::half> : numeric_limits<Eigen::half> {};
251
+ template<>
252
+ struct numeric_limits<const volatile Eigen::half> : numeric_limits<Eigen::half> {};
253
+ } // end namespace std
254
+
255
+ namespace Eigen {
256
+
257
+ namespace half_impl {
258
+
259
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && \
260
+ EIGEN_CUDA_ARCH >= 530) || \
261
+ (defined(EIGEN_HAS_HIP_FP16) && defined(HIP_DEVICE_COMPILE))
262
+ // Note: We deliberatly do *not* define this to 1 even if we have Arm's native
263
+ // fp16 type since GPU halfs are rather different from native CPU halfs.
264
+ // TODO: Rename to something like EIGEN_HAS_NATIVE_GPU_FP16
265
+ #define EIGEN_HAS_NATIVE_FP16
266
+ #endif
267
+
268
+ // Intrinsics for native fp16 support. Note that on current hardware,
269
+ // these are no faster than fp32 arithmetic (you need to use the half2
270
+ // versions to get the ALU speed increased), but you do save the
271
+ // conversion steps back and forth.
272
+
273
+ #if defined(EIGEN_HAS_NATIVE_FP16)
274
+ EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b) {
275
+ #if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER >= 90000
276
+ return __hadd(::__half(a), ::__half(b));
277
+ #else
278
+ return __hadd(a, b);
279
+ #endif
280
+ }
281
+ EIGEN_STRONG_INLINE __device__ half operator * (const half& a, const half& b) {
282
+ return __hmul(a, b);
283
+ }
284
+ EIGEN_STRONG_INLINE __device__ half operator - (const half& a, const half& b) {
285
+ return __hsub(a, b);
286
+ }
287
+ EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) {
288
+ #if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER >= 90000
289
+ return __hdiv(a, b);
290
+ #else
291
+ float num = __half2float(a);
292
+ float denom = __half2float(b);
293
+ return __float2half(num / denom);
294
+ #endif
295
+ }
296
+ EIGEN_STRONG_INLINE __device__ half operator - (const half& a) {
297
+ return __hneg(a);
298
+ }
299
+ EIGEN_STRONG_INLINE __device__ half& operator += (half& a, const half& b) {
300
+ a = a + b;
301
+ return a;
302
+ }
303
+ EIGEN_STRONG_INLINE __device__ half& operator *= (half& a, const half& b) {
304
+ a = a * b;
305
+ return a;
306
+ }
307
+ EIGEN_STRONG_INLINE __device__ half& operator -= (half& a, const half& b) {
308
+ a = a - b;
309
+ return a;
310
+ }
311
+ EIGEN_STRONG_INLINE __device__ half& operator /= (half& a, const half& b) {
312
+ a = a / b;
313
+ return a;
314
+ }
315
+ EIGEN_STRONG_INLINE __device__ bool operator == (const half& a, const half& b) {
316
+ return __heq(a, b);
317
+ }
318
+ EIGEN_STRONG_INLINE __device__ bool operator != (const half& a, const half& b) {
319
+ return __hne(a, b);
320
+ }
321
+ EIGEN_STRONG_INLINE __device__ bool operator < (const half& a, const half& b) {
322
+ return __hlt(a, b);
323
+ }
324
+ EIGEN_STRONG_INLINE __device__ bool operator <= (const half& a, const half& b) {
325
+ return __hle(a, b);
326
+ }
327
+ EIGEN_STRONG_INLINE __device__ bool operator > (const half& a, const half& b) {
328
+ return __hgt(a, b);
329
+ }
330
+ EIGEN_STRONG_INLINE __device__ bool operator >= (const half& a, const half& b) {
331
+ return __hge(a, b);
332
+ }
333
+ #endif
334
+
335
+ #if defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC) && !defined(EIGEN_GPU_COMPILE_PHASE)
336
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator + (const half& a, const half& b) {
337
+ return half(vaddh_f16(a.x, b.x));
338
+ }
339
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator * (const half& a, const half& b) {
340
+ return half(vmulh_f16(a.x, b.x));
341
+ }
342
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator - (const half& a, const half& b) {
343
+ return half(vsubh_f16(a.x, b.x));
344
+ }
345
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator / (const half& a, const half& b) {
346
+ return half(vdivh_f16(a.x, b.x));
347
+ }
348
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator - (const half& a) {
349
+ return half(vnegh_f16(a.x));
350
+ }
351
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator += (half& a, const half& b) {
352
+ a = half(vaddh_f16(a.x, b.x));
353
+ return a;
354
+ }
355
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator *= (half& a, const half& b) {
356
+ a = half(vmulh_f16(a.x, b.x));
357
+ return a;
358
+ }
359
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator -= (half& a, const half& b) {
360
+ a = half(vsubh_f16(a.x, b.x));
361
+ return a;
362
+ }
363
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator /= (half& a, const half& b) {
364
+ a = half(vdivh_f16(a.x, b.x));
365
+ return a;
366
+ }
367
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator == (const half& a, const half& b) {
368
+ return vceqh_f16(a.x, b.x);
369
+ }
370
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator != (const half& a, const half& b) {
371
+ return !vceqh_f16(a.x, b.x);
372
+ }
373
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator < (const half& a, const half& b) {
374
+ return vclth_f16(a.x, b.x);
375
+ }
376
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator <= (const half& a, const half& b) {
377
+ return vcleh_f16(a.x, b.x);
378
+ }
379
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator > (const half& a, const half& b) {
380
+ return vcgth_f16(a.x, b.x);
381
+ }
382
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator >= (const half& a, const half& b) {
383
+ return vcgeh_f16(a.x, b.x);
384
+ }
385
+ // We need to distinguish ‘clang as the CUDA compiler’ from ‘clang as the host compiler,
386
+ // invoked by NVCC’ (e.g. on MacOS). The former needs to see both host and device implementation
387
+ // of the functions, while the latter can only deal with one of them.
388
+ #elif !defined(EIGEN_HAS_NATIVE_FP16) || (EIGEN_COMP_CLANG && !EIGEN_COMP_NVCC) // Emulate support for half floats
389
+
390
+ #if EIGEN_COMP_CLANG && defined(EIGEN_CUDACC)
391
+ // We need to provide emulated *host-side* FP16 operators for clang.
392
+ #pragma push_macro("EIGEN_DEVICE_FUNC")
393
+ #undef EIGEN_DEVICE_FUNC
394
+ #if defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_HAS_NATIVE_FP16)
395
+ #define EIGEN_DEVICE_FUNC __host__
396
+ #else // both host and device need emulated ops.
397
+ #define EIGEN_DEVICE_FUNC __host__ __device__
398
+ #endif
399
+ #endif
400
+
401
+ // Definitions for CPUs and older HIP+CUDA, mostly working through conversion
402
+ // to/from fp32.
403
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator + (const half& a, const half& b) {
404
+ return half(float(a) + float(b));
405
+ }
406
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator * (const half& a, const half& b) {
407
+ return half(float(a) * float(b));
408
+ }
409
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator - (const half& a, const half& b) {
410
+ return half(float(a) - float(b));
411
+ }
412
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator / (const half& a, const half& b) {
413
+ return half(float(a) / float(b));
414
+ }
415
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator - (const half& a) {
416
+ half result;
417
+ result.x = a.x ^ 0x8000;
418
+ return result;
419
+ }
420
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator += (half& a, const half& b) {
421
+ a = half(float(a) + float(b));
422
+ return a;
423
+ }
424
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator *= (half& a, const half& b) {
425
+ a = half(float(a) * float(b));
426
+ return a;
427
+ }
428
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator -= (half& a, const half& b) {
429
+ a = half(float(a) - float(b));
430
+ return a;
431
+ }
432
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half& operator /= (half& a, const half& b) {
433
+ a = half(float(a) / float(b));
434
+ return a;
435
+ }
436
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator == (const half& a, const half& b) {
437
+ return numext::equal_strict(float(a),float(b));
438
+ }
439
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator != (const half& a, const half& b) {
440
+ return numext::not_equal_strict(float(a), float(b));
441
+ }
442
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator < (const half& a, const half& b) {
443
+ return float(a) < float(b);
444
+ }
445
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator <= (const half& a, const half& b) {
446
+ return float(a) <= float(b);
447
+ }
448
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator > (const half& a, const half& b) {
449
+ return float(a) > float(b);
450
+ }
451
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool operator >= (const half& a, const half& b) {
452
+ return float(a) >= float(b);
453
+ }
454
+
455
+ #if defined(__clang__) && defined(__CUDA__)
456
+ #pragma pop_macro("EIGEN_DEVICE_FUNC")
457
+ #endif
458
+ #endif // Emulate support for half floats
459
+
460
+ // Division by an index. Do it in full float precision to avoid accuracy
461
+ // issues in converting the denominator to half.
462
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator / (const half& a, Index b) {
463
+ return half(static_cast<float>(a) / static_cast<float>(b));
464
+ }
465
+
466
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator++(half& a) {
467
+ a += half(1);
468
+ return a;
469
+ }
470
+
471
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator--(half& a) {
472
+ a -= half(1);
473
+ return a;
474
+ }
475
+
476
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator++(half& a, int) {
477
+ half original_value = a;
478
+ ++a;
479
+ return original_value;
480
+ }
481
+
482
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half operator--(half& a, int) {
483
+ half original_value = a;
484
+ --a;
485
+ return original_value;
486
+ }
487
+
488
+ // Conversion routines, including fallbacks for the host or older CUDA.
489
+ // Note that newer Intel CPUs (Haswell or newer) have vectorized versions of
490
+ // these in hardware. If we need more performance on older/other CPUs, they are
491
+ // also possible to vectorize directly.
492
+
493
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw raw_uint16_to_half(numext::uint16_t x) {
494
+ // We cannot simply do a "return __half_raw(x)" here, because __half_raw is union type
495
+ // in the hip_fp16 header file, and that will trigger a compile error
496
+ // On the other hand, having anything but a return statement also triggers a compile error
497
+ // because this is constexpr function.
498
+ // Fortunately, since we need to disable EIGEN_CONSTEXPR for GPU anyway, we can get out
499
+ // of this catch22 by having separate bodies for GPU / non GPU
500
+ #if defined(EIGEN_HAS_GPU_FP16)
501
+ __half_raw h;
502
+ h.x = x;
503
+ return h;
504
+ #else
505
+ return __half_raw(x);
506
+ #endif
507
+ }
508
+
509
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC numext::uint16_t raw_half_as_uint16(const __half_raw& h) {
510
+ // HIP/CUDA/Default have a member 'x' of type uint16_t.
511
+ // For ARM64 native half, the member 'x' is of type __fp16, so we need to bit-cast.
512
+ // For SYCL, cl::sycl::half is _Float16, so cast directly.
513
+ #if defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
514
+ return numext::bit_cast<numext::uint16_t>(h.x);
515
+ #elif defined(SYCL_DEVICE_ONLY)
516
+ return numext::bit_cast<numext::uint16_t>(h);
517
+ #else
518
+ return h.x;
519
+ #endif
520
+ }
521
+
522
+ union float32_bits {
523
+ unsigned int u;
524
+ float f;
525
+ };
526
+
527
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC __half_raw float_to_half_rtne(float ff) {
528
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 300) || \
529
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
530
+ __half tmp_ff = __float2half(ff);
531
+ return *(__half_raw*)&tmp_ff;
532
+
533
+ #elif defined(EIGEN_HAS_FP16_C)
534
+ __half_raw h;
535
+ #if EIGEN_COMP_MSVC
536
+ // MSVC does not have scalar instructions.
537
+ h.x =_mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(ff), 0), 0);
538
+ #else
539
+ h.x = _cvtss_sh(ff, 0);
540
+ #endif
541
+ return h;
542
+
543
+ #elif defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
544
+ __half_raw h;
545
+ h.x = static_cast<__fp16>(ff);
546
+ return h;
547
+
548
+ #else
549
+ float32_bits f; f.f = ff;
550
+
551
+ const float32_bits f32infty = { 255 << 23 };
552
+ const float32_bits f16max = { (127 + 16) << 23 };
553
+ const float32_bits denorm_magic = { ((127 - 15) + (23 - 10) + 1) << 23 };
554
+ unsigned int sign_mask = 0x80000000u;
555
+ __half_raw o;
556
+ o.x = static_cast<numext::uint16_t>(0x0u);
557
+
558
+ unsigned int sign = f.u & sign_mask;
559
+ f.u ^= sign;
560
+
561
+ // NOTE all the integer compares in this function can be safely
562
+ // compiled into signed compares since all operands are below
563
+ // 0x80000000. Important if you want fast straight SSE2 code
564
+ // (since there's no unsigned PCMPGTD).
565
+
566
+ if (f.u >= f16max.u) { // result is Inf or NaN (all exponent bits set)
567
+ o.x = (f.u > f32infty.u) ? 0x7e00 : 0x7c00; // NaN->qNaN and Inf->Inf
568
+ } else { // (De)normalized number or zero
569
+ if (f.u < (113 << 23)) { // resulting FP16 is subnormal or zero
570
+ // use a magic value to align our 10 mantissa bits at the bottom of
571
+ // the float. as long as FP addition is round-to-nearest-even this
572
+ // just works.
573
+ f.f += denorm_magic.f;
574
+
575
+ // and one integer subtract of the bias later, we have our final float!
576
+ o.x = static_cast<numext::uint16_t>(f.u - denorm_magic.u);
577
+ } else {
578
+ unsigned int mant_odd = (f.u >> 13) & 1; // resulting mantissa is odd
579
+
580
+ // update exponent, rounding bias part 1
581
+ // Equivalent to `f.u += ((unsigned int)(15 - 127) << 23) + 0xfff`, but
582
+ // without arithmetic overflow.
583
+ f.u += 0xc8000fffU;
584
+ // rounding bias part 2
585
+ f.u += mant_odd;
586
+ // take the bits!
587
+ o.x = static_cast<numext::uint16_t>(f.u >> 13);
588
+ }
589
+ }
590
+
591
+ o.x |= static_cast<numext::uint16_t>(sign >> 16);
592
+ return o;
593
+ #endif
594
+ }
595
+
596
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC float half_to_float(__half_raw h) {
597
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 300) || \
598
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
599
+ return __half2float(h);
600
+ #elif defined(EIGEN_HAS_FP16_C)
601
+ #if EIGEN_COMP_MSVC
602
+ // MSVC does not have scalar instructions.
603
+ return _mm_cvtss_f32(_mm_cvtph_ps(_mm_set1_epi16(h.x)));
604
+ #else
605
+ return _cvtsh_ss(h.x);
606
+ #endif
607
+ #elif defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
608
+ return static_cast<float>(h.x);
609
+ #else
610
+ const float32_bits magic = { 113 << 23 };
611
+ const unsigned int shifted_exp = 0x7c00 << 13; // exponent mask after shift
612
+ float32_bits o;
613
+
614
+ o.u = (h.x & 0x7fff) << 13; // exponent/mantissa bits
615
+ unsigned int exp = shifted_exp & o.u; // just the exponent
616
+ o.u += (127 - 15) << 23; // exponent adjust
617
+
618
+ // handle exponent special cases
619
+ if (exp == shifted_exp) { // Inf/NaN?
620
+ o.u += (128 - 16) << 23; // extra exp adjust
621
+ } else if (exp == 0) { // Zero/Denormal?
622
+ o.u += 1 << 23; // extra exp adjust
623
+ o.f -= magic.f; // renormalize
624
+ }
625
+
626
+ o.u |= (h.x & 0x8000) << 16; // sign bit
627
+ return o.f;
628
+ #endif
629
+ }
630
+
631
+ // --- standard functions ---
632
+
633
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isinf)(const half& a) {
634
+ #ifdef EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC
635
+ return (numext::bit_cast<numext::uint16_t>(a.x) & 0x7fff) == 0x7c00;
636
+ #else
637
+ return (a.x & 0x7fff) == 0x7c00;
638
+ #endif
639
+ }
640
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isnan)(const half& a) {
641
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 530) || \
642
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
643
+ return __hisnan(a);
644
+ #elif defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
645
+ return (numext::bit_cast<numext::uint16_t>(a.x) & 0x7fff) > 0x7c00;
646
+ #else
647
+ return (a.x & 0x7fff) > 0x7c00;
648
+ #endif
649
+ }
650
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isfinite)(const half& a) {
651
+ return !(isinf EIGEN_NOT_A_MACRO (a)) && !(isnan EIGEN_NOT_A_MACRO (a));
652
+ }
653
+
654
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half abs(const half& a) {
655
+ #if defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
656
+ return half(vabsh_f16(a.x));
657
+ #else
658
+ half result;
659
+ result.x = a.x & 0x7FFF;
660
+ return result;
661
+ #endif
662
+ }
663
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half exp(const half& a) {
664
+ #if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 530) || \
665
+ defined(EIGEN_HIP_DEVICE_COMPILE)
666
+ return half(hexp(a));
667
+ #else
668
+ return half(::expf(float(a)));
669
+ #endif
670
+ }
671
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half expm1(const half& a) {
672
+ return half(numext::expm1(float(a)));
673
+ }
674
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half log(const half& a) {
675
+ #if (defined(EIGEN_HAS_CUDA_FP16) && EIGEN_CUDA_SDK_VER >= 80000 && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 530) || \
676
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
677
+ return half(::hlog(a));
678
+ #else
679
+ return half(::logf(float(a)));
680
+ #endif
681
+ }
682
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half log1p(const half& a) {
683
+ return half(numext::log1p(float(a)));
684
+ }
685
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half log10(const half& a) {
686
+ return half(::log10f(float(a)));
687
+ }
688
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half log2(const half& a) {
689
+ return half(static_cast<float>(EIGEN_LOG2E) * ::logf(float(a)));
690
+ }
691
+
692
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half sqrt(const half& a) {
693
+ #if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 530) || \
694
+ defined(EIGEN_HIP_DEVICE_COMPILE)
695
+ return half(hsqrt(a));
696
+ #else
697
+ return half(::sqrtf(float(a)));
698
+ #endif
699
+ }
700
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half pow(const half& a, const half& b) {
701
+ return half(::powf(float(a), float(b)));
702
+ }
703
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half sin(const half& a) {
704
+ return half(::sinf(float(a)));
705
+ }
706
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half cos(const half& a) {
707
+ return half(::cosf(float(a)));
708
+ }
709
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half tan(const half& a) {
710
+ return half(::tanf(float(a)));
711
+ }
712
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half tanh(const half& a) {
713
+ return half(::tanhf(float(a)));
714
+ }
715
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half asin(const half& a) {
716
+ return half(::asinf(float(a)));
717
+ }
718
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half acos(const half& a) {
719
+ return half(::acosf(float(a)));
720
+ }
721
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half floor(const half& a) {
722
+ #if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 300) || \
723
+ defined(EIGEN_HIP_DEVICE_COMPILE)
724
+ return half(hfloor(a));
725
+ #else
726
+ return half(::floorf(float(a)));
727
+ #endif
728
+ }
729
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half ceil(const half& a) {
730
+ #if (EIGEN_CUDA_SDK_VER >= 80000 && defined EIGEN_CUDA_ARCH && EIGEN_CUDA_ARCH >= 300) || \
731
+ defined(EIGEN_HIP_DEVICE_COMPILE)
732
+ return half(hceil(a));
733
+ #else
734
+ return half(::ceilf(float(a)));
735
+ #endif
736
+ }
737
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half rint(const half& a) {
738
+ return half(::rintf(float(a)));
739
+ }
740
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half round(const half& a) {
741
+ return half(::roundf(float(a)));
742
+ }
743
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half fmod(const half& a, const half& b) {
744
+ return half(::fmodf(float(a), float(b)));
745
+ }
746
+
747
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half (min)(const half& a, const half& b) {
748
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 530) || \
749
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
750
+ return __hlt(b, a) ? b : a;
751
+ #else
752
+ const float f1 = static_cast<float>(a);
753
+ const float f2 = static_cast<float>(b);
754
+ return f2 < f1 ? b : a;
755
+ #endif
756
+ }
757
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC half (max)(const half& a, const half& b) {
758
+ #if (defined(EIGEN_HAS_CUDA_FP16) && defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 530) || \
759
+ (defined(EIGEN_HAS_HIP_FP16) && defined(EIGEN_HIP_DEVICE_COMPILE))
760
+ return __hlt(a, b) ? b : a;
761
+ #else
762
+ const float f1 = static_cast<float>(a);
763
+ const float f2 = static_cast<float>(b);
764
+ return f1 < f2 ? b : a;
765
+ #endif
766
+ }
767
+
768
+ #ifndef EIGEN_NO_IO
769
+ EIGEN_ALWAYS_INLINE std::ostream& operator << (std::ostream& os, const half& v) {
770
+ os << static_cast<float>(v);
771
+ return os;
772
+ }
773
+ #endif
774
+
775
+ } // end namespace half_impl
776
+
777
+ // import Eigen::half_impl::half into Eigen namespace
778
+ // using half_impl::half;
779
+
780
+ namespace internal {
781
+
782
+ template<>
783
+ struct random_default_impl<half, false, false>
784
+ {
785
+ static inline half run(const half& x, const half& y)
786
+ {
787
+ return x + (y-x) * half(float(std::rand()) / float(RAND_MAX));
788
+ }
789
+ static inline half run()
790
+ {
791
+ return run(half(-1.f), half(1.f));
792
+ }
793
+ };
794
+
795
+ template<> struct is_arithmetic<half> { enum { value = true }; };
796
+
797
+ } // end namespace internal
798
+
799
+ template<> struct NumTraits<Eigen::half>
800
+ : GenericNumTraits<Eigen::half>
801
+ {
802
+ enum {
803
+ IsSigned = true,
804
+ IsInteger = false,
805
+ IsComplex = false,
806
+ RequireInitialization = false
807
+ };
808
+
809
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half epsilon() {
810
+ return half_impl::raw_uint16_to_half(0x0800);
811
+ }
812
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half dummy_precision() {
813
+ return half_impl::raw_uint16_to_half(0x211f); // Eigen::half(1e-2f);
814
+ }
815
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half highest() {
816
+ return half_impl::raw_uint16_to_half(0x7bff);
817
+ }
818
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half lowest() {
819
+ return half_impl::raw_uint16_to_half(0xfbff);
820
+ }
821
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half infinity() {
822
+ return half_impl::raw_uint16_to_half(0x7c00);
823
+ }
824
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR static EIGEN_STRONG_INLINE Eigen::half quiet_NaN() {
825
+ return half_impl::raw_uint16_to_half(0x7e00);
826
+ }
827
+ };
828
+
829
+ } // end namespace Eigen
830
+
831
+ #if defined(EIGEN_HAS_GPU_FP16) || defined(EIGEN_HAS_ARM64_FP16_SCALAR_ARITHMETIC)
832
+ #pragma pop_macro("EIGEN_CONSTEXPR")
833
+ #endif
834
+
835
+ namespace Eigen {
836
+ namespace numext {
837
+
838
+ #if defined(EIGEN_GPU_COMPILE_PHASE)
839
+
840
+ template <>
841
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool(isnan)(const Eigen::half& h) {
842
+ return (half_impl::isnan)(h);
843
+ }
844
+
845
+ template <>
846
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool(isinf)(const Eigen::half& h) {
847
+ return (half_impl::isinf)(h);
848
+ }
849
+
850
+ template <>
851
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool(isfinite)(const Eigen::half& h) {
852
+ return (half_impl::isfinite)(h);
853
+ }
854
+
855
+ #endif
856
+
857
+ template <>
858
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half bit_cast<Eigen::half, uint16_t>(const uint16_t& src) {
859
+ return Eigen::half(Eigen::half_impl::raw_uint16_to_half(src));
860
+ }
861
+
862
+ template <>
863
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC uint16_t bit_cast<uint16_t, Eigen::half>(const Eigen::half& src) {
864
+ return Eigen::half_impl::raw_half_as_uint16(src);
865
+ }
866
+
867
+ } // namespace numext
868
+ } // namespace Eigen
869
+
870
+ // Add the missing shfl* intrinsics.
871
+ // The __shfl* functions are only valid on HIP or _CUDA_ARCH_ >= 300.
872
+ // CUDA defines them for (__CUDA_ARCH__ >= 300 || !defined(__CUDA_ARCH__))
873
+ //
874
+ // HIP and CUDA prior to SDK 9.0 define
875
+ // __shfl, __shfl_up, __shfl_down, __shfl_xor for int and float
876
+ // CUDA since 9.0 deprecates those and instead defines
877
+ // __shfl_sync, __shfl_up_sync, __shfl_down_sync, __shfl_xor_sync,
878
+ // with native support for __half and __nv_bfloat16
879
+ //
880
+ // Note that the following are __device__ - only functions.
881
+ #if (defined(EIGEN_CUDACC) && (!defined(EIGEN_CUDA_ARCH) || EIGEN_CUDA_ARCH >= 300)) \
882
+ || defined(EIGEN_HIPCC)
883
+
884
+ #if defined(EIGEN_HAS_CUDA_FP16) && EIGEN_CUDA_SDK_VER >= 90000
885
+
886
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_sync(unsigned mask, Eigen::half var, int srcLane, int width=warpSize) {
887
+ const __half h = var;
888
+ return static_cast<Eigen::half>(__shfl_sync(mask, h, srcLane, width));
889
+ }
890
+
891
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_up_sync(unsigned mask, Eigen::half var, unsigned int delta, int width=warpSize) {
892
+ const __half h = var;
893
+ return static_cast<Eigen::half>(__shfl_up_sync(mask, h, delta, width));
894
+ }
895
+
896
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_down_sync(unsigned mask, Eigen::half var, unsigned int delta, int width=warpSize) {
897
+ const __half h = var;
898
+ return static_cast<Eigen::half>(__shfl_down_sync(mask, h, delta, width));
899
+ }
900
+
901
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_xor_sync(unsigned mask, Eigen::half var, int laneMask, int width=warpSize) {
902
+ const __half h = var;
903
+ return static_cast<Eigen::half>(__shfl_xor_sync(mask, h, laneMask, width));
904
+ }
905
+
906
+ #else // HIP or CUDA SDK < 9.0
907
+
908
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl(Eigen::half var, int srcLane, int width=warpSize) {
909
+ const int ivar = static_cast<int>(Eigen::numext::bit_cast<Eigen::numext::uint16_t>(var));
910
+ return Eigen::numext::bit_cast<Eigen::half>(static_cast<Eigen::numext::uint16_t>(__shfl(ivar, srcLane, width)));
911
+ }
912
+
913
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_up(Eigen::half var, unsigned int delta, int width=warpSize) {
914
+ const int ivar = static_cast<int>(Eigen::numext::bit_cast<Eigen::numext::uint16_t>(var));
915
+ return Eigen::numext::bit_cast<Eigen::half>(static_cast<Eigen::numext::uint16_t>(__shfl_up(ivar, delta, width)));
916
+ }
917
+
918
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_down(Eigen::half var, unsigned int delta, int width=warpSize) {
919
+ const int ivar = static_cast<int>(Eigen::numext::bit_cast<Eigen::numext::uint16_t>(var));
920
+ return Eigen::numext::bit_cast<Eigen::half>(static_cast<Eigen::numext::uint16_t>(__shfl_down(ivar, delta, width)));
921
+ }
922
+
923
+ __device__ EIGEN_STRONG_INLINE Eigen::half __shfl_xor(Eigen::half var, int laneMask, int width=warpSize) {
924
+ const int ivar = static_cast<int>(Eigen::numext::bit_cast<Eigen::numext::uint16_t>(var));
925
+ return Eigen::numext::bit_cast<Eigen::half>(static_cast<Eigen::numext::uint16_t>(__shfl_xor(ivar, laneMask, width)));
926
+ }
927
+
928
+ #endif // HIP vs CUDA
929
+ #endif // __shfl*
930
+
931
+ // ldg() has an overload for __half_raw, but we also need one for Eigen::half.
932
+ #if (defined(EIGEN_CUDACC) && (!defined(EIGEN_CUDA_ARCH) || EIGEN_CUDA_ARCH >= 350)) \
933
+ || defined(EIGEN_HIPCC)
934
+ EIGEN_STRONG_INLINE __device__ Eigen::half __ldg(const Eigen::half* ptr) {
935
+ return Eigen::half_impl::raw_uint16_to_half(__ldg(reinterpret_cast<const Eigen::numext::uint16_t*>(ptr)));
936
+ }
937
+ #endif // __ldg
938
+
939
+ #if EIGEN_HAS_STD_HASH
940
+ namespace std {
941
+ template <>
942
+ struct hash<Eigen::half> {
943
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t operator()(const Eigen::half& a) const {
944
+ return static_cast<std::size_t>(Eigen::numext::bit_cast<Eigen::numext::uint16_t>(a));
945
+ }
946
+ };
947
+ } // end namespace std
948
+ #endif
949
+
950
+ #endif // EIGEN_HALF_H