forgeo-gmlib 0.6.2__cp311-cp311-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-311-x86_64-linux-musl.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-311-x86_64-linux-musl.so +0 -0
  12. forgeo/gmlib/pypotential3D.cpython-311-x86_64-linux-musl.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,980 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H
11
+ #define EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H
12
+
13
+ namespace Eigen {
14
+
15
+ // Generic evaluator
16
+ /**
17
+ * \ingroup CXX11_Tensor_Module
18
+ *
19
+ * \brief The tensor evaluator class.
20
+ *
21
+ * These classes are responsible for the evaluation of the tensor expression.
22
+ *
23
+ * TODO: add support for more types of expressions, in particular expressions
24
+ * leading to lvalues (slicing, reshaping, etc...)
25
+ */
26
+ template <typename Derived, typename Device>
27
+ struct TensorEvaluator {
28
+ typedef typename Derived::Index Index;
29
+ typedef typename Derived::Scalar Scalar;
30
+ typedef typename Derived::Scalar CoeffReturnType;
31
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
32
+ typedef typename Derived::Dimensions Dimensions;
33
+ typedef Derived XprType;
34
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
35
+ typedef typename internal::traits<Derived>::template MakePointer<Scalar>::Type TensorPointerType;
36
+ typedef StorageMemory<Scalar, Device> Storage;
37
+ typedef typename Storage::Type EvaluatorPointerType;
38
+
39
+ // NumDimensions is -1 for variable dim tensors
40
+ static const int NumCoords = internal::traits<Derived>::NumDimensions > 0 ?
41
+ internal::traits<Derived>::NumDimensions : 0;
42
+
43
+ enum {
44
+ IsAligned = Derived::IsAligned,
45
+ PacketAccess = (PacketType<CoeffReturnType, Device>::size > 1),
46
+ BlockAccess = internal::is_arithmetic<typename internal::remove_const<Scalar>::type>::value,
47
+ PreferBlockAccess = false,
48
+ Layout = Derived::Layout,
49
+ CoordAccess = NumCoords > 0,
50
+ RawAccess = true
51
+ };
52
+
53
+ typedef typename internal::remove_const<Scalar>::type ScalarNoConst;
54
+
55
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
56
+ typedef internal::TensorBlockDescriptor<NumCoords, Index> TensorBlockDesc;
57
+ typedef internal::TensorBlockScratchAllocator<Device> TensorBlockScratch;
58
+
59
+ typedef typename internal::TensorMaterializedBlock<ScalarNoConst, NumCoords,
60
+ Layout, Index>
61
+ TensorBlock;
62
+ //===--------------------------------------------------------------------===//
63
+
64
+ EIGEN_STRONG_INLINE TensorEvaluator(const Derived& m, const Device& device)
65
+ : m_data(device.get((const_cast<TensorPointerType>(m.data())))),
66
+ m_dims(m.dimensions()),
67
+ m_device(device)
68
+ { }
69
+
70
+
71
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dims; }
72
+
73
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType dest) {
74
+ if (!NumTraits<typename internal::remove_const<Scalar>::type>::RequireInitialization && dest) {
75
+ m_device.memcpy((void*)(m_device.get(dest)), m_device.get(m_data), m_dims.TotalSize() * sizeof(Scalar));
76
+ return false;
77
+ }
78
+ return true;
79
+ }
80
+
81
+ #ifdef EIGEN_USE_THREADS
82
+ template <typename EvalSubExprsCallback>
83
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
84
+ EvaluatorPointerType dest, EvalSubExprsCallback done) {
85
+ // TODO(ezhulenev): ThreadPoolDevice memcpy is blockign operation.
86
+ done(evalSubExprsIfNeeded(dest));
87
+ }
88
+ #endif // EIGEN_USE_THREADS
89
+
90
+ EIGEN_STRONG_INLINE void cleanup() {}
91
+
92
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const {
93
+ eigen_assert(m_data != NULL);
94
+ return m_data[index];
95
+ }
96
+
97
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType& coeffRef(Index index) {
98
+ eigen_assert(m_data != NULL);
99
+ return m_data[index];
100
+ }
101
+
102
+ template<int LoadMode> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
103
+ PacketReturnType packet(Index index) const
104
+ {
105
+ return internal::ploadt<PacketReturnType, LoadMode>(m_data + index);
106
+ }
107
+
108
+ // Return a packet starting at `index` where `umask` specifies which elements
109
+ // have to be loaded. Type/size of mask depends on PacketReturnType, e.g. for
110
+ // Packet16f, `umask` is of type uint16_t and if a bit is 1, corresponding
111
+ // float element will be loaded, otherwise 0 will be loaded.
112
+ // Function has been templatized to enable Sfinae.
113
+ template <typename PacketReturnTypeT> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
114
+ typename internal::enable_if<internal::unpacket_traits<PacketReturnTypeT>::masked_load_available, PacketReturnTypeT>::type
115
+ partialPacket(Index index, typename internal::unpacket_traits<PacketReturnTypeT>::mask_t umask) const
116
+ {
117
+ return internal::ploadu<PacketReturnTypeT>(m_data + index, umask);
118
+ }
119
+
120
+ template <int StoreMode> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
121
+ void writePacket(Index index, const PacketReturnType& x)
122
+ {
123
+ return internal::pstoret<Scalar, PacketReturnType, StoreMode>(m_data + index, x);
124
+ }
125
+
126
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(const array<DenseIndex, NumCoords>& coords) const {
127
+ eigen_assert(m_data != NULL);
128
+ if (static_cast<int>(Layout) == static_cast<int>(ColMajor)) {
129
+ return m_data[m_dims.IndexOfColMajor(coords)];
130
+ } else {
131
+ return m_data[m_dims.IndexOfRowMajor(coords)];
132
+ }
133
+ }
134
+
135
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType&
136
+ coeffRef(const array<DenseIndex, NumCoords>& coords) {
137
+ eigen_assert(m_data != NULL);
138
+ if (static_cast<int>(Layout) == static_cast<int>(ColMajor)) {
139
+ return m_data[m_dims.IndexOfColMajor(coords)];
140
+ } else {
141
+ return m_data[m_dims.IndexOfRowMajor(coords)];
142
+ }
143
+ }
144
+
145
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const {
146
+ return TensorOpCost(sizeof(CoeffReturnType), 0, 0, vectorized,
147
+ PacketType<CoeffReturnType, Device>::size);
148
+ }
149
+
150
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
151
+ internal::TensorBlockResourceRequirements getResourceRequirements() const {
152
+ return internal::TensorBlockResourceRequirements::any();
153
+ }
154
+
155
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock
156
+ block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
157
+ bool /*root_of_expr_ast*/ = false) const {
158
+ assert(m_data != NULL);
159
+ return TensorBlock::materialize(m_data, m_dims, desc, scratch);
160
+ }
161
+
162
+ template<typename TensorBlock>
163
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void writeBlock(
164
+ const TensorBlockDesc& desc, const TensorBlock& block) {
165
+ assert(m_data != NULL);
166
+
167
+ typedef typename TensorBlock::XprType TensorBlockExpr;
168
+ typedef internal::TensorBlockAssignment<Scalar, NumCoords, TensorBlockExpr,
169
+ Index>
170
+ TensorBlockAssign;
171
+
172
+ TensorBlockAssign::Run(
173
+ TensorBlockAssign::target(desc.dimensions(),
174
+ internal::strides<Layout>(m_dims), m_data,
175
+ desc.offset()),
176
+ block.expr());
177
+ }
178
+
179
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return m_data; }
180
+
181
+ #ifdef EIGEN_USE_SYCL
182
+ // binding placeholder accessors to a command group handler for SYCL
183
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
184
+ m_data.bind(cgh);
185
+ }
186
+ #endif
187
+ protected:
188
+ EvaluatorPointerType m_data;
189
+ Dimensions m_dims;
190
+ const Device EIGEN_DEVICE_REF m_device;
191
+ };
192
+
193
+ namespace internal {
194
+ template <typename T> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
195
+ T loadConstant(const T* address) {
196
+ return *address;
197
+ }
198
+ // Use the texture cache on CUDA devices whenever possible
199
+ #if defined(EIGEN_CUDA_ARCH) && EIGEN_CUDA_ARCH >= 350
200
+ template <> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
201
+ float loadConstant(const float* address) {
202
+ return __ldg(address);
203
+ }
204
+ template <> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
205
+ double loadConstant(const double* address) {
206
+ return __ldg(address);
207
+ }
208
+ template <> EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
209
+ Eigen::half loadConstant(const Eigen::half* address) {
210
+ return Eigen::half(half_impl::raw_uint16_to_half(__ldg(&address->x)));
211
+ }
212
+ #endif
213
+ #ifdef EIGEN_USE_SYCL
214
+ // overload of load constant should be implemented here based on range access
215
+ template <cl::sycl::access::mode AcMd, typename T>
216
+ T &loadConstant(const Eigen::TensorSycl::internal::RangeAccess<AcMd, T> &address) {
217
+ return *address;
218
+ }
219
+ #endif
220
+ } // namespace internal
221
+
222
+ // Default evaluator for rvalues
223
+ template<typename Derived, typename Device>
224
+ struct TensorEvaluator<const Derived, Device>
225
+ {
226
+ typedef typename Derived::Index Index;
227
+ typedef typename Derived::Scalar Scalar;
228
+ typedef typename Derived::Scalar CoeffReturnType;
229
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
230
+ typedef typename Derived::Dimensions Dimensions;
231
+ typedef const Derived XprType;
232
+ typedef typename internal::traits<Derived>::template MakePointer<const Scalar>::Type TensorPointerType;
233
+ typedef StorageMemory<const Scalar, Device> Storage;
234
+ typedef typename Storage::Type EvaluatorPointerType;
235
+
236
+ typedef typename internal::remove_const<Scalar>::type ScalarNoConst;
237
+
238
+ // NumDimensions is -1 for variable dim tensors
239
+ static const int NumCoords = internal::traits<Derived>::NumDimensions > 0 ?
240
+ internal::traits<Derived>::NumDimensions : 0;
241
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
242
+
243
+ enum {
244
+ IsAligned = Derived::IsAligned,
245
+ PacketAccess = (PacketType<CoeffReturnType, Device>::size > 1),
246
+ BlockAccess = internal::is_arithmetic<ScalarNoConst>::value,
247
+ PreferBlockAccess = false,
248
+ Layout = Derived::Layout,
249
+ CoordAccess = NumCoords > 0,
250
+ RawAccess = true
251
+ };
252
+
253
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
254
+ typedef internal::TensorBlockDescriptor<NumCoords, Index> TensorBlockDesc;
255
+ typedef internal::TensorBlockScratchAllocator<Device> TensorBlockScratch;
256
+
257
+ typedef typename internal::TensorMaterializedBlock<ScalarNoConst, NumCoords,
258
+ Layout, Index>
259
+ TensorBlock;
260
+ //===--------------------------------------------------------------------===//
261
+
262
+ EIGEN_STRONG_INLINE TensorEvaluator(const Derived& m, const Device& device)
263
+ : m_data(device.get(m.data())), m_dims(m.dimensions()), m_device(device)
264
+ { }
265
+
266
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Dimensions& dimensions() const { return m_dims; }
267
+
268
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType data) {
269
+ if (!NumTraits<typename internal::remove_const<Scalar>::type>::RequireInitialization && data) {
270
+ m_device.memcpy((void*)(m_device.get(data)),m_device.get(m_data), m_dims.TotalSize() * sizeof(Scalar));
271
+ return false;
272
+ }
273
+ return true;
274
+ }
275
+
276
+ #ifdef EIGEN_USE_THREADS
277
+ template <typename EvalSubExprsCallback>
278
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
279
+ EvaluatorPointerType dest, EvalSubExprsCallback done) {
280
+ // TODO(ezhulenev): ThreadPoolDevice memcpy is a blockign operation.
281
+ done(evalSubExprsIfNeeded(dest));
282
+ }
283
+ #endif // EIGEN_USE_THREADS
284
+
285
+ EIGEN_STRONG_INLINE void cleanup() { }
286
+
287
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const {
288
+ eigen_assert(m_data != NULL);
289
+ return internal::loadConstant(m_data+index);
290
+ }
291
+
292
+ template<int LoadMode> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
293
+ PacketReturnType packet(Index index) const
294
+ {
295
+ return internal::ploadt_ro<PacketReturnType, LoadMode>(m_data + index);
296
+ }
297
+
298
+ // Return a packet starting at `index` where `umask` specifies which elements
299
+ // have to be loaded. Type/size of mask depends on PacketReturnType, e.g. for
300
+ // Packet16f, `umask` is of type uint16_t and if a bit is 1, corresponding
301
+ // float element will be loaded, otherwise 0 will be loaded.
302
+ // Function has been templatized to enable Sfinae.
303
+ template <typename PacketReturnTypeT> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
304
+ typename internal::enable_if<internal::unpacket_traits<PacketReturnTypeT>::masked_load_available, PacketReturnTypeT>::type
305
+ partialPacket(Index index, typename internal::unpacket_traits<PacketReturnTypeT>::mask_t umask) const
306
+ {
307
+ return internal::ploadu<PacketReturnTypeT>(m_data + index, umask);
308
+ }
309
+
310
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(const array<DenseIndex, NumCoords>& coords) const {
311
+ eigen_assert(m_data != NULL);
312
+ const Index index = (static_cast<int>(Layout) == static_cast<int>(ColMajor)) ? m_dims.IndexOfColMajor(coords)
313
+ : m_dims.IndexOfRowMajor(coords);
314
+ return internal::loadConstant(m_data+index);
315
+ }
316
+
317
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const {
318
+ return TensorOpCost(sizeof(CoeffReturnType), 0, 0, vectorized,
319
+ PacketType<CoeffReturnType, Device>::size);
320
+ }
321
+
322
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
323
+ internal::TensorBlockResourceRequirements getResourceRequirements() const {
324
+ return internal::TensorBlockResourceRequirements::any();
325
+ }
326
+
327
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock
328
+ block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
329
+ bool /*root_of_expr_ast*/ = false) const {
330
+ assert(m_data != NULL);
331
+ return TensorBlock::materialize(m_data, m_dims, desc, scratch);
332
+ }
333
+
334
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return m_data; }
335
+ #ifdef EIGEN_USE_SYCL
336
+ // binding placeholder accessors to a command group handler for SYCL
337
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
338
+ m_data.bind(cgh);
339
+ }
340
+ #endif
341
+ protected:
342
+ EvaluatorPointerType m_data;
343
+ Dimensions m_dims;
344
+ const Device EIGEN_DEVICE_REF m_device;
345
+ };
346
+
347
+
348
+
349
+
350
+ // -------------------- CwiseNullaryOp --------------------
351
+
352
+ template<typename NullaryOp, typename ArgType, typename Device>
353
+ struct TensorEvaluator<const TensorCwiseNullaryOp<NullaryOp, ArgType>, Device>
354
+ {
355
+ typedef TensorCwiseNullaryOp<NullaryOp, ArgType> XprType;
356
+
357
+ TensorEvaluator(const XprType& op, const Device& device)
358
+ : m_functor(op.functor()), m_argImpl(op.nestedExpression(), device), m_wrapper()
359
+ { }
360
+
361
+ typedef typename XprType::Index Index;
362
+ typedef typename XprType::Scalar Scalar;
363
+ typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
364
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
365
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
366
+ typedef typename TensorEvaluator<ArgType, Device>::Dimensions Dimensions;
367
+ typedef StorageMemory<CoeffReturnType, Device> Storage;
368
+ typedef typename Storage::Type EvaluatorPointerType;
369
+
370
+ enum {
371
+ IsAligned = true,
372
+ PacketAccess = internal::functor_traits<NullaryOp>::PacketAccess
373
+ #ifdef EIGEN_USE_SYCL
374
+ && (PacketType<CoeffReturnType, Device>::size >1)
375
+ #endif
376
+ ,
377
+ BlockAccess = false,
378
+ PreferBlockAccess = false,
379
+ Layout = TensorEvaluator<ArgType, Device>::Layout,
380
+ CoordAccess = false, // to be implemented
381
+ RawAccess = false
382
+ };
383
+
384
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
385
+ typedef internal::TensorBlockNotImplemented TensorBlock;
386
+ //===--------------------------------------------------------------------===//
387
+
388
+ EIGEN_DEVICE_FUNC const Dimensions& dimensions() const { return m_argImpl.dimensions(); }
389
+
390
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType) { return true; }
391
+
392
+ #ifdef EIGEN_USE_THREADS
393
+ template <typename EvalSubExprsCallback>
394
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
395
+ EvaluatorPointerType, EvalSubExprsCallback done) {
396
+ done(true);
397
+ }
398
+ #endif // EIGEN_USE_THREADS
399
+
400
+ EIGEN_STRONG_INLINE void cleanup() { }
401
+
402
+ EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
403
+ {
404
+ return m_wrapper(m_functor, index);
405
+ }
406
+
407
+ template<int LoadMode>
408
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
409
+ {
410
+ return m_wrapper.template packetOp<PacketReturnType, Index>(m_functor, index);
411
+ }
412
+
413
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost
414
+ costPerCoeff(bool vectorized) const {
415
+ return TensorOpCost(sizeof(CoeffReturnType), 0, 0, vectorized,
416
+ PacketType<CoeffReturnType, Device>::size);
417
+ }
418
+
419
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return NULL; }
420
+
421
+ #ifdef EIGEN_USE_SYCL
422
+ // binding placeholder accessors to a command group handler for SYCL
423
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
424
+ m_argImpl.bind(cgh);
425
+ }
426
+ #endif
427
+
428
+ private:
429
+ const NullaryOp m_functor;
430
+ TensorEvaluator<ArgType, Device> m_argImpl;
431
+ const internal::nullary_wrapper<CoeffReturnType,NullaryOp> m_wrapper;
432
+ };
433
+
434
+
435
+
436
+ // -------------------- CwiseUnaryOp --------------------
437
+
438
+ template<typename UnaryOp, typename ArgType, typename Device>
439
+ struct TensorEvaluator<const TensorCwiseUnaryOp<UnaryOp, ArgType>, Device>
440
+ {
441
+ typedef TensorCwiseUnaryOp<UnaryOp, ArgType> XprType;
442
+
443
+ enum {
444
+ IsAligned = TensorEvaluator<ArgType, Device>::IsAligned,
445
+ PacketAccess = int(TensorEvaluator<ArgType, Device>::PacketAccess) &
446
+ int(internal::functor_traits<UnaryOp>::PacketAccess),
447
+ BlockAccess = TensorEvaluator<ArgType, Device>::BlockAccess,
448
+ PreferBlockAccess = TensorEvaluator<ArgType, Device>::PreferBlockAccess,
449
+ Layout = TensorEvaluator<ArgType, Device>::Layout,
450
+ CoordAccess = false, // to be implemented
451
+ RawAccess = false
452
+ };
453
+
454
+ TensorEvaluator(const XprType& op, const Device& device)
455
+ : m_device(device),
456
+ m_functor(op.functor()),
457
+ m_argImpl(op.nestedExpression(), device)
458
+ { }
459
+
460
+ typedef typename XprType::Index Index;
461
+ typedef typename XprType::Scalar Scalar;
462
+ typedef typename internal::remove_const<Scalar>::type ScalarNoConst;
463
+ typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
464
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
465
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
466
+ typedef typename TensorEvaluator<ArgType, Device>::Dimensions Dimensions;
467
+ typedef StorageMemory<CoeffReturnType, Device> Storage;
468
+ typedef typename Storage::Type EvaluatorPointerType;
469
+ static const int NumDims = internal::array_size<Dimensions>::value;
470
+
471
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
472
+ typedef internal::TensorBlockDescriptor<NumDims, Index> TensorBlockDesc;
473
+ typedef internal::TensorBlockScratchAllocator<Device> TensorBlockScratch;
474
+
475
+ typedef typename TensorEvaluator<const ArgType, Device>::TensorBlock
476
+ ArgTensorBlock;
477
+
478
+ typedef internal::TensorCwiseUnaryBlock<UnaryOp, ArgTensorBlock>
479
+ TensorBlock;
480
+ //===--------------------------------------------------------------------===//
481
+
482
+ EIGEN_DEVICE_FUNC const Dimensions& dimensions() const { return m_argImpl.dimensions(); }
483
+
484
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType) {
485
+ m_argImpl.evalSubExprsIfNeeded(NULL);
486
+ return true;
487
+ }
488
+
489
+ #ifdef EIGEN_USE_THREADS
490
+ template <typename EvalSubExprsCallback>
491
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
492
+ EvaluatorPointerType, EvalSubExprsCallback done) {
493
+ m_argImpl.evalSubExprsIfNeededAsync(nullptr, [done](bool) { done(true); });
494
+ }
495
+ #endif // EIGEN_USE_THREADS
496
+
497
+ EIGEN_STRONG_INLINE void cleanup() {
498
+ m_argImpl.cleanup();
499
+ }
500
+
501
+ EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
502
+ {
503
+ return m_functor(m_argImpl.coeff(index));
504
+ }
505
+
506
+ template<int LoadMode>
507
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
508
+ {
509
+ return m_functor.packetOp(m_argImpl.template packet<LoadMode>(index));
510
+ }
511
+
512
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost costPerCoeff(bool vectorized) const {
513
+ const double functor_cost = internal::functor_traits<UnaryOp>::Cost;
514
+ return m_argImpl.costPerCoeff(vectorized) +
515
+ TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
516
+ }
517
+
518
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
519
+ internal::TensorBlockResourceRequirements getResourceRequirements() const {
520
+ static const double functor_cost = internal::functor_traits<UnaryOp>::Cost;
521
+ return m_argImpl.getResourceRequirements().addCostPerCoeff(
522
+ {0, 0, functor_cost / PacketSize});
523
+ }
524
+
525
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock
526
+ block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
527
+ bool /*root_of_expr_ast*/ = false) const {
528
+ return TensorBlock(m_argImpl.block(desc, scratch), m_functor);
529
+ }
530
+
531
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return NULL; }
532
+
533
+ #ifdef EIGEN_USE_SYCL
534
+ // binding placeholder accessors to a command group handler for SYCL
535
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const{
536
+ m_argImpl.bind(cgh);
537
+ }
538
+ #endif
539
+
540
+
541
+ private:
542
+ const Device EIGEN_DEVICE_REF m_device;
543
+ const UnaryOp m_functor;
544
+ TensorEvaluator<ArgType, Device> m_argImpl;
545
+ };
546
+
547
+
548
+ // -------------------- CwiseBinaryOp --------------------
549
+
550
+ template<typename BinaryOp, typename LeftArgType, typename RightArgType, typename Device>
551
+ struct TensorEvaluator<const TensorCwiseBinaryOp<BinaryOp, LeftArgType, RightArgType>, Device>
552
+ {
553
+ typedef TensorCwiseBinaryOp<BinaryOp, LeftArgType, RightArgType> XprType;
554
+
555
+ enum {
556
+ IsAligned = int(TensorEvaluator<LeftArgType, Device>::IsAligned) &
557
+ int(TensorEvaluator<RightArgType, Device>::IsAligned),
558
+ PacketAccess = int(TensorEvaluator<LeftArgType, Device>::PacketAccess) &
559
+ int(TensorEvaluator<RightArgType, Device>::PacketAccess) &
560
+ int(internal::functor_traits<BinaryOp>::PacketAccess),
561
+ BlockAccess = int(TensorEvaluator<LeftArgType, Device>::BlockAccess) &
562
+ int(TensorEvaluator<RightArgType, Device>::BlockAccess),
563
+ PreferBlockAccess = int(TensorEvaluator<LeftArgType, Device>::PreferBlockAccess) |
564
+ int(TensorEvaluator<RightArgType, Device>::PreferBlockAccess),
565
+ Layout = TensorEvaluator<LeftArgType, Device>::Layout,
566
+ CoordAccess = false, // to be implemented
567
+ RawAccess = false
568
+ };
569
+
570
+ TensorEvaluator(const XprType& op, const Device& device)
571
+ : m_device(device),
572
+ m_functor(op.functor()),
573
+ m_leftImpl(op.lhsExpression(), device),
574
+ m_rightImpl(op.rhsExpression(), device)
575
+ {
576
+ EIGEN_STATIC_ASSERT((static_cast<int>(TensorEvaluator<LeftArgType, Device>::Layout) == static_cast<int>(TensorEvaluator<RightArgType, Device>::Layout) || internal::traits<XprType>::NumDimensions <= 1), YOU_MADE_A_PROGRAMMING_MISTAKE);
577
+ eigen_assert(dimensions_match(m_leftImpl.dimensions(), m_rightImpl.dimensions()));
578
+ }
579
+
580
+ typedef typename XprType::Index Index;
581
+ typedef typename XprType::Scalar Scalar;
582
+ typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
583
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
584
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
585
+ typedef typename TensorEvaluator<LeftArgType, Device>::Dimensions Dimensions;
586
+ typedef StorageMemory<CoeffReturnType, Device> Storage;
587
+ typedef typename Storage::Type EvaluatorPointerType;
588
+
589
+ static const int NumDims = internal::array_size<
590
+ typename TensorEvaluator<LeftArgType, Device>::Dimensions>::value;
591
+
592
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
593
+ typedef internal::TensorBlockDescriptor<NumDims, Index> TensorBlockDesc;
594
+ typedef internal::TensorBlockScratchAllocator<Device> TensorBlockScratch;
595
+
596
+ typedef typename TensorEvaluator<const LeftArgType, Device>::TensorBlock
597
+ LeftTensorBlock;
598
+ typedef typename TensorEvaluator<const RightArgType, Device>::TensorBlock
599
+ RightTensorBlock;
600
+
601
+ typedef internal::TensorCwiseBinaryBlock<BinaryOp, LeftTensorBlock,
602
+ RightTensorBlock>
603
+ TensorBlock;
604
+ //===--------------------------------------------------------------------===//
605
+
606
+ EIGEN_DEVICE_FUNC const Dimensions& dimensions() const
607
+ {
608
+ // TODO: use right impl instead if right impl dimensions are known at compile time.
609
+ return m_leftImpl.dimensions();
610
+ }
611
+
612
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType) {
613
+ m_leftImpl.evalSubExprsIfNeeded(NULL);
614
+ m_rightImpl.evalSubExprsIfNeeded(NULL);
615
+ return true;
616
+ }
617
+
618
+ #ifdef EIGEN_USE_THREADS
619
+ template <typename EvalSubExprsCallback>
620
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
621
+ EvaluatorPointerType, EvalSubExprsCallback done) {
622
+ // TODO(ezhulenev): Evaluate two expression in parallel?
623
+ m_leftImpl.evalSubExprsIfNeededAsync(nullptr, [this, done](bool) {
624
+ m_rightImpl.evalSubExprsIfNeededAsync(nullptr,
625
+ [done](bool) { done(true); });
626
+ });
627
+ }
628
+ #endif // EIGEN_USE_THREADS
629
+
630
+ EIGEN_STRONG_INLINE void cleanup() {
631
+ m_leftImpl.cleanup();
632
+ m_rightImpl.cleanup();
633
+ }
634
+
635
+ EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
636
+ {
637
+ return m_functor(m_leftImpl.coeff(index), m_rightImpl.coeff(index));
638
+ }
639
+ template<int LoadMode>
640
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
641
+ {
642
+ return m_functor.packetOp(m_leftImpl.template packet<LoadMode>(index), m_rightImpl.template packet<LoadMode>(index));
643
+ }
644
+
645
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost
646
+ costPerCoeff(bool vectorized) const {
647
+ const double functor_cost = internal::functor_traits<BinaryOp>::Cost;
648
+ return m_leftImpl.costPerCoeff(vectorized) +
649
+ m_rightImpl.costPerCoeff(vectorized) +
650
+ TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
651
+ }
652
+
653
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
654
+ internal::TensorBlockResourceRequirements getResourceRequirements() const {
655
+ static const double functor_cost = internal::functor_traits<BinaryOp>::Cost;
656
+ return internal::TensorBlockResourceRequirements::merge(
657
+ m_leftImpl.getResourceRequirements(),
658
+ m_rightImpl.getResourceRequirements())
659
+ .addCostPerCoeff({0, 0, functor_cost / PacketSize});
660
+ }
661
+
662
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock
663
+ block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
664
+ bool /*root_of_expr_ast*/ = false) const {
665
+ desc.DropDestinationBuffer();
666
+ return TensorBlock(m_leftImpl.block(desc, scratch),
667
+ m_rightImpl.block(desc, scratch), m_functor);
668
+ }
669
+
670
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return NULL; }
671
+
672
+ #ifdef EIGEN_USE_SYCL
673
+ // binding placeholder accessors to a command group handler for SYCL
674
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
675
+ m_leftImpl.bind(cgh);
676
+ m_rightImpl.bind(cgh);
677
+ }
678
+ #endif
679
+ private:
680
+ const Device EIGEN_DEVICE_REF m_device;
681
+ const BinaryOp m_functor;
682
+ TensorEvaluator<LeftArgType, Device> m_leftImpl;
683
+ TensorEvaluator<RightArgType, Device> m_rightImpl;
684
+ };
685
+
686
+ // -------------------- CwiseTernaryOp --------------------
687
+
688
+ template<typename TernaryOp, typename Arg1Type, typename Arg2Type, typename Arg3Type, typename Device>
689
+ struct TensorEvaluator<const TensorCwiseTernaryOp<TernaryOp, Arg1Type, Arg2Type, Arg3Type>, Device>
690
+ {
691
+ typedef TensorCwiseTernaryOp<TernaryOp, Arg1Type, Arg2Type, Arg3Type> XprType;
692
+
693
+ enum {
694
+ IsAligned = TensorEvaluator<Arg1Type, Device>::IsAligned & TensorEvaluator<Arg2Type, Device>::IsAligned & TensorEvaluator<Arg3Type, Device>::IsAligned,
695
+ PacketAccess = TensorEvaluator<Arg1Type, Device>::PacketAccess &&
696
+ TensorEvaluator<Arg2Type, Device>::PacketAccess &&
697
+ TensorEvaluator<Arg3Type, Device>::PacketAccess &&
698
+ internal::functor_traits<TernaryOp>::PacketAccess,
699
+ BlockAccess = false,
700
+ PreferBlockAccess = TensorEvaluator<Arg1Type, Device>::PreferBlockAccess ||
701
+ TensorEvaluator<Arg2Type, Device>::PreferBlockAccess ||
702
+ TensorEvaluator<Arg3Type, Device>::PreferBlockAccess,
703
+ Layout = TensorEvaluator<Arg1Type, Device>::Layout,
704
+ CoordAccess = false, // to be implemented
705
+ RawAccess = false
706
+ };
707
+
708
+ TensorEvaluator(const XprType& op, const Device& device)
709
+ : m_functor(op.functor()),
710
+ m_arg1Impl(op.arg1Expression(), device),
711
+ m_arg2Impl(op.arg2Expression(), device),
712
+ m_arg3Impl(op.arg3Expression(), device)
713
+ {
714
+ EIGEN_STATIC_ASSERT((static_cast<int>(TensorEvaluator<Arg1Type, Device>::Layout) == static_cast<int>(TensorEvaluator<Arg3Type, Device>::Layout) || internal::traits<XprType>::NumDimensions <= 1), YOU_MADE_A_PROGRAMMING_MISTAKE);
715
+
716
+ EIGEN_STATIC_ASSERT((internal::is_same<typename internal::traits<Arg1Type>::StorageKind,
717
+ typename internal::traits<Arg2Type>::StorageKind>::value),
718
+ STORAGE_KIND_MUST_MATCH)
719
+ EIGEN_STATIC_ASSERT((internal::is_same<typename internal::traits<Arg1Type>::StorageKind,
720
+ typename internal::traits<Arg3Type>::StorageKind>::value),
721
+ STORAGE_KIND_MUST_MATCH)
722
+ EIGEN_STATIC_ASSERT((internal::is_same<typename internal::traits<Arg1Type>::Index,
723
+ typename internal::traits<Arg2Type>::Index>::value),
724
+ STORAGE_INDEX_MUST_MATCH)
725
+ EIGEN_STATIC_ASSERT((internal::is_same<typename internal::traits<Arg1Type>::Index,
726
+ typename internal::traits<Arg3Type>::Index>::value),
727
+ STORAGE_INDEX_MUST_MATCH)
728
+
729
+ eigen_assert(dimensions_match(m_arg1Impl.dimensions(), m_arg2Impl.dimensions()) && dimensions_match(m_arg1Impl.dimensions(), m_arg3Impl.dimensions()));
730
+ }
731
+
732
+ typedef typename XprType::Index Index;
733
+ typedef typename XprType::Scalar Scalar;
734
+ typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
735
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
736
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
737
+ typedef typename TensorEvaluator<Arg1Type, Device>::Dimensions Dimensions;
738
+ typedef StorageMemory<CoeffReturnType, Device> Storage;
739
+ typedef typename Storage::Type EvaluatorPointerType;
740
+
741
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
742
+ typedef internal::TensorBlockNotImplemented TensorBlock;
743
+ //===--------------------------------------------------------------------===//
744
+
745
+ EIGEN_DEVICE_FUNC const Dimensions& dimensions() const
746
+ {
747
+ // TODO: use arg2 or arg3 dimensions if they are known at compile time.
748
+ return m_arg1Impl.dimensions();
749
+ }
750
+
751
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType) {
752
+ m_arg1Impl.evalSubExprsIfNeeded(NULL);
753
+ m_arg2Impl.evalSubExprsIfNeeded(NULL);
754
+ m_arg3Impl.evalSubExprsIfNeeded(NULL);
755
+ return true;
756
+ }
757
+ EIGEN_STRONG_INLINE void cleanup() {
758
+ m_arg1Impl.cleanup();
759
+ m_arg2Impl.cleanup();
760
+ m_arg3Impl.cleanup();
761
+ }
762
+
763
+ EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
764
+ {
765
+ return m_functor(m_arg1Impl.coeff(index), m_arg2Impl.coeff(index), m_arg3Impl.coeff(index));
766
+ }
767
+ template<int LoadMode>
768
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketReturnType packet(Index index) const
769
+ {
770
+ return m_functor.packetOp(m_arg1Impl.template packet<LoadMode>(index),
771
+ m_arg2Impl.template packet<LoadMode>(index),
772
+ m_arg3Impl.template packet<LoadMode>(index));
773
+ }
774
+
775
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost
776
+ costPerCoeff(bool vectorized) const {
777
+ const double functor_cost = internal::functor_traits<TernaryOp>::Cost;
778
+ return m_arg1Impl.costPerCoeff(vectorized) +
779
+ m_arg2Impl.costPerCoeff(vectorized) +
780
+ m_arg3Impl.costPerCoeff(vectorized) +
781
+ TensorOpCost(0, 0, functor_cost, vectorized, PacketSize);
782
+ }
783
+
784
+ EIGEN_DEVICE_FUNC EvaluatorPointerType data() const { return NULL; }
785
+
786
+ #ifdef EIGEN_USE_SYCL
787
+ // binding placeholder accessors to a command group handler for SYCL
788
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
789
+ m_arg1Impl.bind(cgh);
790
+ m_arg2Impl.bind(cgh);
791
+ m_arg3Impl.bind(cgh);
792
+ }
793
+ #endif
794
+
795
+ private:
796
+ const TernaryOp m_functor;
797
+ TensorEvaluator<Arg1Type, Device> m_arg1Impl;
798
+ TensorEvaluator<Arg2Type, Device> m_arg2Impl;
799
+ TensorEvaluator<Arg3Type, Device> m_arg3Impl;
800
+ };
801
+
802
+
803
+ // -------------------- SelectOp --------------------
804
+
805
+ template<typename IfArgType, typename ThenArgType, typename ElseArgType, typename Device>
806
+ struct TensorEvaluator<const TensorSelectOp<IfArgType, ThenArgType, ElseArgType>, Device>
807
+ {
808
+ typedef TensorSelectOp<IfArgType, ThenArgType, ElseArgType> XprType;
809
+ typedef typename XprType::Scalar Scalar;
810
+
811
+ enum {
812
+ IsAligned = TensorEvaluator<ThenArgType, Device>::IsAligned &
813
+ TensorEvaluator<ElseArgType, Device>::IsAligned,
814
+ PacketAccess = TensorEvaluator<ThenArgType, Device>::PacketAccess &
815
+ TensorEvaluator<ElseArgType, Device>::PacketAccess &
816
+ PacketType<Scalar, Device>::HasBlend,
817
+ BlockAccess = TensorEvaluator<IfArgType, Device>::BlockAccess &&
818
+ TensorEvaluator<ThenArgType, Device>::BlockAccess &&
819
+ TensorEvaluator<ElseArgType, Device>::BlockAccess,
820
+ PreferBlockAccess = TensorEvaluator<IfArgType, Device>::PreferBlockAccess ||
821
+ TensorEvaluator<ThenArgType, Device>::PreferBlockAccess ||
822
+ TensorEvaluator<ElseArgType, Device>::PreferBlockAccess,
823
+ Layout = TensorEvaluator<IfArgType, Device>::Layout,
824
+ CoordAccess = false, // to be implemented
825
+ RawAccess = false
826
+ };
827
+
828
+ TensorEvaluator(const XprType& op, const Device& device)
829
+ : m_condImpl(op.ifExpression(), device),
830
+ m_thenImpl(op.thenExpression(), device),
831
+ m_elseImpl(op.elseExpression(), device)
832
+ {
833
+ EIGEN_STATIC_ASSERT((static_cast<int>(TensorEvaluator<IfArgType, Device>::Layout) == static_cast<int>(TensorEvaluator<ThenArgType, Device>::Layout)), YOU_MADE_A_PROGRAMMING_MISTAKE);
834
+ EIGEN_STATIC_ASSERT((static_cast<int>(TensorEvaluator<IfArgType, Device>::Layout) == static_cast<int>(TensorEvaluator<ElseArgType, Device>::Layout)), YOU_MADE_A_PROGRAMMING_MISTAKE);
835
+ eigen_assert(dimensions_match(m_condImpl.dimensions(), m_thenImpl.dimensions()));
836
+ eigen_assert(dimensions_match(m_thenImpl.dimensions(), m_elseImpl.dimensions()));
837
+ }
838
+
839
+ typedef typename XprType::Index Index;
840
+ typedef typename internal::traits<XprType>::Scalar CoeffReturnType;
841
+ typedef typename PacketType<CoeffReturnType, Device>::type PacketReturnType;
842
+ static const int PacketSize = PacketType<CoeffReturnType, Device>::size;
843
+ typedef typename TensorEvaluator<IfArgType, Device>::Dimensions Dimensions;
844
+ typedef StorageMemory<CoeffReturnType, Device> Storage;
845
+ typedef typename Storage::Type EvaluatorPointerType;
846
+
847
+ static const int NumDims = internal::array_size<Dimensions>::value;
848
+
849
+ //===- Tensor block evaluation strategy (see TensorBlock.h) -------------===//
850
+ typedef internal::TensorBlockDescriptor<NumDims, Index> TensorBlockDesc;
851
+ typedef internal::TensorBlockScratchAllocator<Device> TensorBlockScratch;
852
+
853
+ typedef typename TensorEvaluator<const IfArgType, Device>::TensorBlock
854
+ IfArgTensorBlock;
855
+ typedef typename TensorEvaluator<const ThenArgType, Device>::TensorBlock
856
+ ThenArgTensorBlock;
857
+ typedef typename TensorEvaluator<const ElseArgType, Device>::TensorBlock
858
+ ElseArgTensorBlock;
859
+
860
+ struct TensorSelectOpBlockFactory {
861
+ template <typename IfArgXprType, typename ThenArgXprType, typename ElseArgXprType>
862
+ struct XprType {
863
+ typedef TensorSelectOp<const IfArgXprType, const ThenArgXprType, const ElseArgXprType> type;
864
+ };
865
+
866
+ template <typename IfArgXprType, typename ThenArgXprType, typename ElseArgXprType>
867
+ typename XprType<IfArgXprType, ThenArgXprType, ElseArgXprType>::type expr(
868
+ const IfArgXprType& if_expr, const ThenArgXprType& then_expr, const ElseArgXprType& else_expr) const {
869
+ return typename XprType<IfArgXprType, ThenArgXprType, ElseArgXprType>::type(if_expr, then_expr, else_expr);
870
+ }
871
+ };
872
+
873
+ typedef internal::TensorTernaryExprBlock<TensorSelectOpBlockFactory,
874
+ IfArgTensorBlock, ThenArgTensorBlock,
875
+ ElseArgTensorBlock>
876
+ TensorBlock;
877
+ //===--------------------------------------------------------------------===//
878
+
879
+ EIGEN_DEVICE_FUNC const Dimensions& dimensions() const
880
+ {
881
+ // TODO: use then or else impl instead if they happen to be known at compile time.
882
+ return m_condImpl.dimensions();
883
+ }
884
+
885
+ EIGEN_STRONG_INLINE bool evalSubExprsIfNeeded(EvaluatorPointerType) {
886
+ m_condImpl.evalSubExprsIfNeeded(NULL);
887
+ m_thenImpl.evalSubExprsIfNeeded(NULL);
888
+ m_elseImpl.evalSubExprsIfNeeded(NULL);
889
+ return true;
890
+ }
891
+
892
+ #ifdef EIGEN_USE_THREADS
893
+ template <typename EvalSubExprsCallback>
894
+ EIGEN_STRONG_INLINE void evalSubExprsIfNeededAsync(
895
+ EvaluatorPointerType, EvalSubExprsCallback done) {
896
+ m_condImpl.evalSubExprsIfNeeded(nullptr, [this, done](bool) {
897
+ m_thenImpl.evalSubExprsIfNeeded(nullptr, [this, done](bool) {
898
+ m_elseImpl.evalSubExprsIfNeeded(nullptr, [done](bool) { done(true); });
899
+ });
900
+ });
901
+ }
902
+ #endif // EIGEN_USE_THREADS
903
+
904
+ EIGEN_STRONG_INLINE void cleanup() {
905
+ m_condImpl.cleanup();
906
+ m_thenImpl.cleanup();
907
+ m_elseImpl.cleanup();
908
+ }
909
+
910
+ EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index index) const
911
+ {
912
+ return m_condImpl.coeff(index) ? m_thenImpl.coeff(index) : m_elseImpl.coeff(index);
913
+ }
914
+ template<int LoadMode>
915
+ EIGEN_DEVICE_FUNC PacketReturnType packet(Index index) const
916
+ {
917
+ internal::Selector<PacketSize> select;
918
+ EIGEN_UNROLL_LOOP
919
+ for (Index i = 0; i < PacketSize; ++i) {
920
+ select.select[i] = m_condImpl.coeff(index+i);
921
+ }
922
+ return internal::pblend(select,
923
+ m_thenImpl.template packet<LoadMode>(index),
924
+ m_elseImpl.template packet<LoadMode>(index));
925
+
926
+ }
927
+
928
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorOpCost
929
+ costPerCoeff(bool vectorized) const {
930
+ return m_condImpl.costPerCoeff(vectorized) +
931
+ m_thenImpl.costPerCoeff(vectorized)
932
+ .cwiseMax(m_elseImpl.costPerCoeff(vectorized));
933
+ }
934
+
935
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
936
+ internal::TensorBlockResourceRequirements getResourceRequirements() const {
937
+ auto then_req = m_thenImpl.getResourceRequirements();
938
+ auto else_req = m_elseImpl.getResourceRequirements();
939
+
940
+ auto merged_req =
941
+ internal::TensorBlockResourceRequirements::merge(then_req, else_req);
942
+ merged_req.cost_per_coeff =
943
+ then_req.cost_per_coeff.cwiseMax(else_req.cost_per_coeff);
944
+
945
+ return internal::TensorBlockResourceRequirements::merge(
946
+ m_condImpl.getResourceRequirements(), merged_req);
947
+ }
948
+
949
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorBlock
950
+ block(TensorBlockDesc& desc, TensorBlockScratch& scratch,
951
+ bool /*root_of_expr_ast*/ = false) const {
952
+ // It's unsafe to pass destination buffer to underlying expressions, because
953
+ // output might be aliased with one of the inputs.
954
+ desc.DropDestinationBuffer();
955
+
956
+ return TensorBlock(
957
+ m_condImpl.block(desc, scratch), m_thenImpl.block(desc, scratch),
958
+ m_elseImpl.block(desc, scratch), TensorSelectOpBlockFactory());
959
+ }
960
+
961
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvaluatorPointerType data() const { return NULL; }
962
+
963
+ #ifdef EIGEN_USE_SYCL
964
+ // binding placeholder accessors to a command group handler for SYCL
965
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void bind(cl::sycl::handler &cgh) const {
966
+ m_condImpl.bind(cgh);
967
+ m_thenImpl.bind(cgh);
968
+ m_elseImpl.bind(cgh);
969
+ }
970
+ #endif
971
+ private:
972
+ TensorEvaluator<IfArgType, Device> m_condImpl;
973
+ TensorEvaluator<ThenArgType, Device> m_thenImpl;
974
+ TensorEvaluator<ElseArgType, Device> m_elseImpl;
975
+ };
976
+
977
+
978
+ } // end namespace Eigen
979
+
980
+ #endif // EIGEN_CXX11_TENSOR_TENSOR_EVALUATOR_H