@smake/eigen 1.0.1 → 1.1.0

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 (283) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +1 -1
  4. package/eigen/COPYING.MINPACK +51 -52
  5. package/eigen/Eigen/Cholesky +0 -1
  6. package/eigen/Eigen/Core +108 -266
  7. package/eigen/Eigen/Eigenvalues +0 -1
  8. package/eigen/Eigen/Geometry +3 -6
  9. package/eigen/Eigen/Householder +0 -1
  10. package/eigen/Eigen/Jacobi +0 -1
  11. package/eigen/Eigen/KLUSupport +41 -0
  12. package/eigen/Eigen/LU +2 -5
  13. package/eigen/Eigen/OrderingMethods +0 -3
  14. package/eigen/Eigen/PaStiXSupport +1 -0
  15. package/eigen/Eigen/PardisoSupport +0 -0
  16. package/eigen/Eigen/QR +0 -1
  17. package/eigen/Eigen/QtAlignedMalloc +0 -1
  18. package/eigen/Eigen/SVD +0 -1
  19. package/eigen/Eigen/Sparse +0 -2
  20. package/eigen/Eigen/SparseCholesky +0 -8
  21. package/eigen/Eigen/SparseLU +4 -0
  22. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  23. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  24. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  25. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  26. package/eigen/Eigen/src/Core/Array.h +99 -11
  27. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  28. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  29. package/eigen/Eigen/src/Core/Assign.h +1 -1
  30. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  31. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  32. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  33. package/eigen/Eigen/src/Core/Block.h +56 -60
  34. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  35. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  36. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  37. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  38. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  39. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  40. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  41. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  42. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  43. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  44. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  45. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  46. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  47. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  48. package/eigen/Eigen/src/Core/Dot.h +10 -10
  49. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  50. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  51. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  52. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  53. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  54. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  55. package/eigen/Eigen/src/Core/IO.h +40 -7
  56. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  57. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  58. package/eigen/Eigen/src/Core/Map.h +7 -7
  59. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  60. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  61. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  62. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  63. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  64. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  65. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  66. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  67. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  68. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  69. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  70. package/eigen/Eigen/src/Core/Product.h +30 -25
  71. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  72. package/eigen/Eigen/src/Core/Random.h +37 -1
  73. package/eigen/Eigen/src/Core/Redux.h +180 -170
  74. package/eigen/Eigen/src/Core/Ref.h +118 -21
  75. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  76. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  77. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  78. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  79. package/eigen/Eigen/src/Core/Select.h +8 -6
  80. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  81. package/eigen/Eigen/src/Core/Solve.h +14 -14
  82. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  83. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  84. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  85. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  86. package/eigen/Eigen/src/Core/Stride.h +9 -4
  87. package/eigen/Eigen/src/Core/Swap.h +5 -4
  88. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  89. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  90. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  91. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  92. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  93. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  94. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  95. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  96. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  97. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  98. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  99. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  100. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  101. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  102. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  103. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  104. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  105. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  107. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  108. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  109. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  110. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  111. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  112. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  113. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  114. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  115. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  116. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  117. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  118. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  119. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  120. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  121. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  122. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  123. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  124. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  125. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  126. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  127. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  128. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  129. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  130. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  131. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  132. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  133. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  134. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  135. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  136. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  137. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  138. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  140. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  141. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  142. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  143. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  144. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  145. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  146. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  147. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  148. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  149. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  150. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  151. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  152. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  153. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  154. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  155. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  156. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  157. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  158. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  159. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  160. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  161. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  162. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  163. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  164. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  165. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  166. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  167. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  168. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  169. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  170. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  171. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  172. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  173. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  174. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  175. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  176. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  177. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  178. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  179. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  180. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  181. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  182. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  183. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  184. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  185. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  186. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  187. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  188. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  189. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  190. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  191. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  192. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  193. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  194. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  195. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  196. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  197. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  198. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  199. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  200. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  201. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  202. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  203. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  204. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  205. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  206. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  207. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  208. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  209. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  210. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  211. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  212. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  213. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  214. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  215. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  216. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  217. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  218. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  219. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  220. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  221. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  222. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  223. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  224. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  225. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  226. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  227. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  228. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  229. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  230. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  231. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  232. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  233. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  234. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  235. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  236. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  237. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  238. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  239. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  240. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  241. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  242. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  243. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  244. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  245. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  246. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  247. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  248. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  249. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  250. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  251. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  252. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  253. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  254. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  255. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  256. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  257. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  258. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  259. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  260. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  261. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  262. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  263. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  264. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  265. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  266. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  267. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  268. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  269. package/eigen/README.md +2 -0
  270. package/lib/LibEigen.d.ts +4 -0
  271. package/lib/LibEigen.js +14 -0
  272. package/lib/index.d.ts +1 -1
  273. package/lib/index.js +7 -3
  274. package/package.json +2 -10
  275. package/eigen/Eigen/CMakeLists.txt +0 -19
  276. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  277. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  278. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  279. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  280. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  281. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  282. package/lib/eigen.d.ts +0 -2
  283. package/lib/eigen.js +0 -15
@@ -1,338 +0,0 @@
1
- // This file is part of Eigen, a lightweight C++ template library
2
- // for linear algebra.
3
- //
4
- // Copyright (C) 2001 Intel Corporation
5
- // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.fr>
6
- // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
7
- //
8
- // This Source Code Form is subject to the terms of the Mozilla
9
- // Public License v. 2.0. If a copy of the MPL was not distributed
10
- // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
-
12
- // The SSE code for the 4x4 float and double matrix inverse in this file
13
- // comes from the following Intel's library:
14
- // http://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/
15
- //
16
- // Here is the respective copyright and license statement:
17
- //
18
- // Copyright (c) 2001 Intel Corporation.
19
- //
20
- // Permition is granted to use, copy, distribute and prepare derivative works
21
- // of this library for any purpose and without fee, provided, that the above
22
- // copyright notice and this statement appear in all copies.
23
- // Intel makes no representations about the suitability of this software for
24
- // any purpose, and specifically disclaims all warranties.
25
- // See LEGAL.TXT for all the legal information.
26
-
27
- #ifndef EIGEN_INVERSE_SSE_H
28
- #define EIGEN_INVERSE_SSE_H
29
-
30
- namespace Eigen {
31
-
32
- namespace internal {
33
-
34
- template<typename MatrixType, typename ResultType>
35
- struct compute_inverse_size4<Architecture::SSE, float, MatrixType, ResultType>
36
- {
37
- enum {
38
- MatrixAlignment = traits<MatrixType>::Alignment,
39
- ResultAlignment = traits<ResultType>::Alignment,
40
- StorageOrdersMatch = (MatrixType::Flags&RowMajorBit) == (ResultType::Flags&RowMajorBit)
41
- };
42
- typedef typename conditional<(MatrixType::Flags&LinearAccessBit),MatrixType const &,typename MatrixType::PlainObject>::type ActualMatrixType;
43
-
44
- static void run(const MatrixType& mat, ResultType& result)
45
- {
46
- ActualMatrixType matrix(mat);
47
- const Packet4f p4f_sign_PNNP = _mm_castsi128_ps(_mm_set_epi32(0x00000000, 0x80000000, 0x80000000, 0x00000000));
48
-
49
- // Load the full matrix into registers
50
- __m128 _L1 = matrix.template packet<MatrixAlignment>( 0);
51
- __m128 _L2 = matrix.template packet<MatrixAlignment>( 4);
52
- __m128 _L3 = matrix.template packet<MatrixAlignment>( 8);
53
- __m128 _L4 = matrix.template packet<MatrixAlignment>(12);
54
-
55
- // The inverse is calculated using "Divide and Conquer" technique. The
56
- // original matrix is divide into four 2x2 sub-matrices. Since each
57
- // register holds four matrix element, the smaller matrices are
58
- // represented as a registers. Hence we get a better locality of the
59
- // calculations.
60
-
61
- __m128 A, B, C, D; // the four sub-matrices
62
- if(!StorageOrdersMatch)
63
- {
64
- A = _mm_unpacklo_ps(_L1, _L2);
65
- B = _mm_unpacklo_ps(_L3, _L4);
66
- C = _mm_unpackhi_ps(_L1, _L2);
67
- D = _mm_unpackhi_ps(_L3, _L4);
68
- }
69
- else
70
- {
71
- A = _mm_movelh_ps(_L1, _L2);
72
- B = _mm_movehl_ps(_L2, _L1);
73
- C = _mm_movelh_ps(_L3, _L4);
74
- D = _mm_movehl_ps(_L4, _L3);
75
- }
76
-
77
- __m128 iA, iB, iC, iD, // partial inverse of the sub-matrices
78
- DC, AB;
79
- __m128 dA, dB, dC, dD; // determinant of the sub-matrices
80
- __m128 det, d, d1, d2;
81
- __m128 rd; // reciprocal of the determinant
82
-
83
- // AB = A# * B
84
- AB = _mm_mul_ps(_mm_shuffle_ps(A,A,0x0F), B);
85
- AB = _mm_sub_ps(AB,_mm_mul_ps(_mm_shuffle_ps(A,A,0xA5), _mm_shuffle_ps(B,B,0x4E)));
86
- // DC = D# * C
87
- DC = _mm_mul_ps(_mm_shuffle_ps(D,D,0x0F), C);
88
- DC = _mm_sub_ps(DC,_mm_mul_ps(_mm_shuffle_ps(D,D,0xA5), _mm_shuffle_ps(C,C,0x4E)));
89
-
90
- // dA = |A|
91
- dA = _mm_mul_ps(_mm_shuffle_ps(A, A, 0x5F),A);
92
- dA = _mm_sub_ss(dA, _mm_movehl_ps(dA,dA));
93
- // dB = |B|
94
- dB = _mm_mul_ps(_mm_shuffle_ps(B, B, 0x5F),B);
95
- dB = _mm_sub_ss(dB, _mm_movehl_ps(dB,dB));
96
-
97
- // dC = |C|
98
- dC = _mm_mul_ps(_mm_shuffle_ps(C, C, 0x5F),C);
99
- dC = _mm_sub_ss(dC, _mm_movehl_ps(dC,dC));
100
- // dD = |D|
101
- dD = _mm_mul_ps(_mm_shuffle_ps(D, D, 0x5F),D);
102
- dD = _mm_sub_ss(dD, _mm_movehl_ps(dD,dD));
103
-
104
- // d = trace(AB*DC) = trace(A#*B*D#*C)
105
- d = _mm_mul_ps(_mm_shuffle_ps(DC,DC,0xD8),AB);
106
-
107
- // iD = C*A#*B
108
- iD = _mm_mul_ps(_mm_shuffle_ps(C,C,0xA0), _mm_movelh_ps(AB,AB));
109
- iD = _mm_add_ps(iD,_mm_mul_ps(_mm_shuffle_ps(C,C,0xF5), _mm_movehl_ps(AB,AB)));
110
- // iA = B*D#*C
111
- iA = _mm_mul_ps(_mm_shuffle_ps(B,B,0xA0), _mm_movelh_ps(DC,DC));
112
- iA = _mm_add_ps(iA,_mm_mul_ps(_mm_shuffle_ps(B,B,0xF5), _mm_movehl_ps(DC,DC)));
113
-
114
- // d = trace(AB*DC) = trace(A#*B*D#*C) [continue]
115
- d = _mm_add_ps(d, _mm_movehl_ps(d, d));
116
- d = _mm_add_ss(d, _mm_shuffle_ps(d, d, 1));
117
- d1 = _mm_mul_ss(dA,dD);
118
- d2 = _mm_mul_ss(dB,dC);
119
-
120
- // iD = D*|A| - C*A#*B
121
- iD = _mm_sub_ps(_mm_mul_ps(D,_mm_shuffle_ps(dA,dA,0)), iD);
122
-
123
- // iA = A*|D| - B*D#*C;
124
- iA = _mm_sub_ps(_mm_mul_ps(A,_mm_shuffle_ps(dD,dD,0)), iA);
125
-
126
- // det = |A|*|D| + |B|*|C| - trace(A#*B*D#*C)
127
- det = _mm_sub_ss(_mm_add_ss(d1,d2),d);
128
- rd = _mm_div_ss(_mm_set_ss(1.0f), det);
129
-
130
- // #ifdef ZERO_SINGULAR
131
- // rd = _mm_and_ps(_mm_cmpneq_ss(det,_mm_setzero_ps()), rd);
132
- // #endif
133
-
134
- // iB = D * (A#B)# = D*B#*A
135
- iB = _mm_mul_ps(D, _mm_shuffle_ps(AB,AB,0x33));
136
- iB = _mm_sub_ps(iB, _mm_mul_ps(_mm_shuffle_ps(D,D,0xB1), _mm_shuffle_ps(AB,AB,0x66)));
137
- // iC = A * (D#C)# = A*C#*D
138
- iC = _mm_mul_ps(A, _mm_shuffle_ps(DC,DC,0x33));
139
- iC = _mm_sub_ps(iC, _mm_mul_ps(_mm_shuffle_ps(A,A,0xB1), _mm_shuffle_ps(DC,DC,0x66)));
140
-
141
- rd = _mm_shuffle_ps(rd,rd,0);
142
- rd = _mm_xor_ps(rd, p4f_sign_PNNP);
143
-
144
- // iB = C*|B| - D*B#*A
145
- iB = _mm_sub_ps(_mm_mul_ps(C,_mm_shuffle_ps(dB,dB,0)), iB);
146
-
147
- // iC = B*|C| - A*C#*D;
148
- iC = _mm_sub_ps(_mm_mul_ps(B,_mm_shuffle_ps(dC,dC,0)), iC);
149
-
150
- // iX = iX / det
151
- iA = _mm_mul_ps(rd,iA);
152
- iB = _mm_mul_ps(rd,iB);
153
- iC = _mm_mul_ps(rd,iC);
154
- iD = _mm_mul_ps(rd,iD);
155
-
156
- Index res_stride = result.outerStride();
157
- float* res = result.data();
158
- pstoret<float, Packet4f, ResultAlignment>(res+0, _mm_shuffle_ps(iA,iB,0x77));
159
- pstoret<float, Packet4f, ResultAlignment>(res+res_stride, _mm_shuffle_ps(iA,iB,0x22));
160
- pstoret<float, Packet4f, ResultAlignment>(res+2*res_stride, _mm_shuffle_ps(iC,iD,0x77));
161
- pstoret<float, Packet4f, ResultAlignment>(res+3*res_stride, _mm_shuffle_ps(iC,iD,0x22));
162
- }
163
-
164
- };
165
-
166
- template<typename MatrixType, typename ResultType>
167
- struct compute_inverse_size4<Architecture::SSE, double, MatrixType, ResultType>
168
- {
169
- enum {
170
- MatrixAlignment = traits<MatrixType>::Alignment,
171
- ResultAlignment = traits<ResultType>::Alignment,
172
- StorageOrdersMatch = (MatrixType::Flags&RowMajorBit) == (ResultType::Flags&RowMajorBit)
173
- };
174
- typedef typename conditional<(MatrixType::Flags&LinearAccessBit),MatrixType const &,typename MatrixType::PlainObject>::type ActualMatrixType;
175
-
176
- static void run(const MatrixType& mat, ResultType& result)
177
- {
178
- ActualMatrixType matrix(mat);
179
- const __m128d _Sign_NP = _mm_castsi128_pd(_mm_set_epi32(0x0,0x0,0x80000000,0x0));
180
- const __m128d _Sign_PN = _mm_castsi128_pd(_mm_set_epi32(0x80000000,0x0,0x0,0x0));
181
-
182
- // The inverse is calculated using "Divide and Conquer" technique. The
183
- // original matrix is divide into four 2x2 sub-matrices. Since each
184
- // register of the matrix holds two elements, the smaller matrices are
185
- // consisted of two registers. Hence we get a better locality of the
186
- // calculations.
187
-
188
- // the four sub-matrices
189
- __m128d A1, A2, B1, B2, C1, C2, D1, D2;
190
-
191
- if(StorageOrdersMatch)
192
- {
193
- A1 = matrix.template packet<MatrixAlignment>( 0); B1 = matrix.template packet<MatrixAlignment>( 2);
194
- A2 = matrix.template packet<MatrixAlignment>( 4); B2 = matrix.template packet<MatrixAlignment>( 6);
195
- C1 = matrix.template packet<MatrixAlignment>( 8); D1 = matrix.template packet<MatrixAlignment>(10);
196
- C2 = matrix.template packet<MatrixAlignment>(12); D2 = matrix.template packet<MatrixAlignment>(14);
197
- }
198
- else
199
- {
200
- __m128d tmp;
201
- A1 = matrix.template packet<MatrixAlignment>( 0); C1 = matrix.template packet<MatrixAlignment>( 2);
202
- A2 = matrix.template packet<MatrixAlignment>( 4); C2 = matrix.template packet<MatrixAlignment>( 6);
203
- tmp = A1;
204
- A1 = _mm_unpacklo_pd(A1,A2);
205
- A2 = _mm_unpackhi_pd(tmp,A2);
206
- tmp = C1;
207
- C1 = _mm_unpacklo_pd(C1,C2);
208
- C2 = _mm_unpackhi_pd(tmp,C2);
209
-
210
- B1 = matrix.template packet<MatrixAlignment>( 8); D1 = matrix.template packet<MatrixAlignment>(10);
211
- B2 = matrix.template packet<MatrixAlignment>(12); D2 = matrix.template packet<MatrixAlignment>(14);
212
- tmp = B1;
213
- B1 = _mm_unpacklo_pd(B1,B2);
214
- B2 = _mm_unpackhi_pd(tmp,B2);
215
- tmp = D1;
216
- D1 = _mm_unpacklo_pd(D1,D2);
217
- D2 = _mm_unpackhi_pd(tmp,D2);
218
- }
219
-
220
- __m128d iA1, iA2, iB1, iB2, iC1, iC2, iD1, iD2, // partial invese of the sub-matrices
221
- DC1, DC2, AB1, AB2;
222
- __m128d dA, dB, dC, dD; // determinant of the sub-matrices
223
- __m128d det, d1, d2, rd;
224
-
225
- // dA = |A|
226
- dA = _mm_shuffle_pd(A2, A2, 1);
227
- dA = _mm_mul_pd(A1, dA);
228
- dA = _mm_sub_sd(dA, _mm_shuffle_pd(dA,dA,3));
229
- // dB = |B|
230
- dB = _mm_shuffle_pd(B2, B2, 1);
231
- dB = _mm_mul_pd(B1, dB);
232
- dB = _mm_sub_sd(dB, _mm_shuffle_pd(dB,dB,3));
233
-
234
- // AB = A# * B
235
- AB1 = _mm_mul_pd(B1, _mm_shuffle_pd(A2,A2,3));
236
- AB2 = _mm_mul_pd(B2, _mm_shuffle_pd(A1,A1,0));
237
- AB1 = _mm_sub_pd(AB1, _mm_mul_pd(B2, _mm_shuffle_pd(A1,A1,3)));
238
- AB2 = _mm_sub_pd(AB2, _mm_mul_pd(B1, _mm_shuffle_pd(A2,A2,0)));
239
-
240
- // dC = |C|
241
- dC = _mm_shuffle_pd(C2, C2, 1);
242
- dC = _mm_mul_pd(C1, dC);
243
- dC = _mm_sub_sd(dC, _mm_shuffle_pd(dC,dC,3));
244
- // dD = |D|
245
- dD = _mm_shuffle_pd(D2, D2, 1);
246
- dD = _mm_mul_pd(D1, dD);
247
- dD = _mm_sub_sd(dD, _mm_shuffle_pd(dD,dD,3));
248
-
249
- // DC = D# * C
250
- DC1 = _mm_mul_pd(C1, _mm_shuffle_pd(D2,D2,3));
251
- DC2 = _mm_mul_pd(C2, _mm_shuffle_pd(D1,D1,0));
252
- DC1 = _mm_sub_pd(DC1, _mm_mul_pd(C2, _mm_shuffle_pd(D1,D1,3)));
253
- DC2 = _mm_sub_pd(DC2, _mm_mul_pd(C1, _mm_shuffle_pd(D2,D2,0)));
254
-
255
- // rd = trace(AB*DC) = trace(A#*B*D#*C)
256
- d1 = _mm_mul_pd(AB1, _mm_shuffle_pd(DC1, DC2, 0));
257
- d2 = _mm_mul_pd(AB2, _mm_shuffle_pd(DC1, DC2, 3));
258
- rd = _mm_add_pd(d1, d2);
259
- rd = _mm_add_sd(rd, _mm_shuffle_pd(rd, rd,3));
260
-
261
- // iD = C*A#*B
262
- iD1 = _mm_mul_pd(AB1, _mm_shuffle_pd(C1,C1,0));
263
- iD2 = _mm_mul_pd(AB1, _mm_shuffle_pd(C2,C2,0));
264
- iD1 = _mm_add_pd(iD1, _mm_mul_pd(AB2, _mm_shuffle_pd(C1,C1,3)));
265
- iD2 = _mm_add_pd(iD2, _mm_mul_pd(AB2, _mm_shuffle_pd(C2,C2,3)));
266
-
267
- // iA = B*D#*C
268
- iA1 = _mm_mul_pd(DC1, _mm_shuffle_pd(B1,B1,0));
269
- iA2 = _mm_mul_pd(DC1, _mm_shuffle_pd(B2,B2,0));
270
- iA1 = _mm_add_pd(iA1, _mm_mul_pd(DC2, _mm_shuffle_pd(B1,B1,3)));
271
- iA2 = _mm_add_pd(iA2, _mm_mul_pd(DC2, _mm_shuffle_pd(B2,B2,3)));
272
-
273
- // iD = D*|A| - C*A#*B
274
- dA = _mm_shuffle_pd(dA,dA,0);
275
- iD1 = _mm_sub_pd(_mm_mul_pd(D1, dA), iD1);
276
- iD2 = _mm_sub_pd(_mm_mul_pd(D2, dA), iD2);
277
-
278
- // iA = A*|D| - B*D#*C;
279
- dD = _mm_shuffle_pd(dD,dD,0);
280
- iA1 = _mm_sub_pd(_mm_mul_pd(A1, dD), iA1);
281
- iA2 = _mm_sub_pd(_mm_mul_pd(A2, dD), iA2);
282
-
283
- d1 = _mm_mul_sd(dA, dD);
284
- d2 = _mm_mul_sd(dB, dC);
285
-
286
- // iB = D * (A#B)# = D*B#*A
287
- iB1 = _mm_mul_pd(D1, _mm_shuffle_pd(AB2,AB1,1));
288
- iB2 = _mm_mul_pd(D2, _mm_shuffle_pd(AB2,AB1,1));
289
- iB1 = _mm_sub_pd(iB1, _mm_mul_pd(_mm_shuffle_pd(D1,D1,1), _mm_shuffle_pd(AB2,AB1,2)));
290
- iB2 = _mm_sub_pd(iB2, _mm_mul_pd(_mm_shuffle_pd(D2,D2,1), _mm_shuffle_pd(AB2,AB1,2)));
291
-
292
- // det = |A|*|D| + |B|*|C| - trace(A#*B*D#*C)
293
- det = _mm_add_sd(d1, d2);
294
- det = _mm_sub_sd(det, rd);
295
-
296
- // iC = A * (D#C)# = A*C#*D
297
- iC1 = _mm_mul_pd(A1, _mm_shuffle_pd(DC2,DC1,1));
298
- iC2 = _mm_mul_pd(A2, _mm_shuffle_pd(DC2,DC1,1));
299
- iC1 = _mm_sub_pd(iC1, _mm_mul_pd(_mm_shuffle_pd(A1,A1,1), _mm_shuffle_pd(DC2,DC1,2)));
300
- iC2 = _mm_sub_pd(iC2, _mm_mul_pd(_mm_shuffle_pd(A2,A2,1), _mm_shuffle_pd(DC2,DC1,2)));
301
-
302
- rd = _mm_div_sd(_mm_set_sd(1.0), det);
303
- // #ifdef ZERO_SINGULAR
304
- // rd = _mm_and_pd(_mm_cmpneq_sd(det,_mm_setzero_pd()), rd);
305
- // #endif
306
- rd = _mm_shuffle_pd(rd,rd,0);
307
-
308
- // iB = C*|B| - D*B#*A
309
- dB = _mm_shuffle_pd(dB,dB,0);
310
- iB1 = _mm_sub_pd(_mm_mul_pd(C1, dB), iB1);
311
- iB2 = _mm_sub_pd(_mm_mul_pd(C2, dB), iB2);
312
-
313
- d1 = _mm_xor_pd(rd, _Sign_PN);
314
- d2 = _mm_xor_pd(rd, _Sign_NP);
315
-
316
- // iC = B*|C| - A*C#*D;
317
- dC = _mm_shuffle_pd(dC,dC,0);
318
- iC1 = _mm_sub_pd(_mm_mul_pd(B1, dC), iC1);
319
- iC2 = _mm_sub_pd(_mm_mul_pd(B2, dC), iC2);
320
-
321
- Index res_stride = result.outerStride();
322
- double* res = result.data();
323
- pstoret<double, Packet2d, ResultAlignment>(res+0, _mm_mul_pd(_mm_shuffle_pd(iA2, iA1, 3), d1));
324
- pstoret<double, Packet2d, ResultAlignment>(res+res_stride, _mm_mul_pd(_mm_shuffle_pd(iA2, iA1, 0), d2));
325
- pstoret<double, Packet2d, ResultAlignment>(res+2, _mm_mul_pd(_mm_shuffle_pd(iB2, iB1, 3), d1));
326
- pstoret<double, Packet2d, ResultAlignment>(res+res_stride+2, _mm_mul_pd(_mm_shuffle_pd(iB2, iB1, 0), d2));
327
- pstoret<double, Packet2d, ResultAlignment>(res+2*res_stride, _mm_mul_pd(_mm_shuffle_pd(iC2, iC1, 3), d1));
328
- pstoret<double, Packet2d, ResultAlignment>(res+3*res_stride, _mm_mul_pd(_mm_shuffle_pd(iC2, iC1, 0), d2));
329
- pstoret<double, Packet2d, ResultAlignment>(res+2*res_stride+2,_mm_mul_pd(_mm_shuffle_pd(iD2, iD1, 3), d1));
330
- pstoret<double, Packet2d, ResultAlignment>(res+3*res_stride+2,_mm_mul_pd(_mm_shuffle_pd(iD2, iD1, 0), d2));
331
- }
332
- };
333
-
334
- } // end namespace internal
335
-
336
- } // end namespace Eigen
337
-
338
- #endif // EIGEN_INVERSE_SSE_H
package/lib/eigen.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { LLVM } from 'smake';
2
- export declare function eigen(t: LLVM): void;
package/lib/eigen.js DELETED
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.eigen = void 0;
4
- const path_1 = require("path");
5
- function eigen(t) {
6
- Object.defineProperty(t, 'sysIncludedirs', {
7
- value: [
8
- ...t.sysIncludedirs,
9
- path_1.resolve(__dirname, '..', 'eigen').replace(new RegExp(path_1.sep, 'g'), '/'),
10
- ],
11
- configurable: true,
12
- });
13
- }
14
- exports.eigen = eigen;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlnZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZWlnZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQW9DO0FBR3BDLFNBQWdCLEtBQUssQ0FBQyxDQUFPO0lBQzNCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFO1FBQ3pDLEtBQUssRUFBRTtZQUNMLEdBQUcsQ0FBQyxDQUFDLGNBQWM7WUFDbkIsY0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUM7U0FDckU7UUFDRCxZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBUkQsc0JBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXAsIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IExMVk0gfSBmcm9tICdzbWFrZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlaWdlbih0OiBMTFZNKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCAnc3lzSW5jbHVkZWRpcnMnLCB7XG4gICAgdmFsdWU6IFtcbiAgICAgIC4uLnQuc3lzSW5jbHVkZWRpcnMsXG4gICAgICByZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ2VpZ2VuJykucmVwbGFjZShuZXcgUmVnRXhwKHNlcCwgJ2cnKSwgJy8nKSxcbiAgICBdLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG59XG4iXX0=