pyvale 2026.1.1__cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.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 (860) hide show
  1. include/eigen3/Eigen/Cholesky +45 -0
  2. include/eigen3/Eigen/CholmodSupport +48 -0
  3. include/eigen3/Eigen/Core +384 -0
  4. include/eigen3/Eigen/Dense +7 -0
  5. include/eigen3/Eigen/Eigen +2 -0
  6. include/eigen3/Eigen/Eigenvalues +60 -0
  7. include/eigen3/Eigen/Geometry +59 -0
  8. include/eigen3/Eigen/Householder +29 -0
  9. include/eigen3/Eigen/IterativeLinearSolvers +48 -0
  10. include/eigen3/Eigen/Jacobi +32 -0
  11. include/eigen3/Eigen/KLUSupport +41 -0
  12. include/eigen3/Eigen/LU +47 -0
  13. include/eigen3/Eigen/MetisSupport +35 -0
  14. include/eigen3/Eigen/OrderingMethods +70 -0
  15. include/eigen3/Eigen/PaStiXSupport +49 -0
  16. include/eigen3/Eigen/PardisoSupport +35 -0
  17. include/eigen3/Eigen/QR +50 -0
  18. include/eigen3/Eigen/QtAlignedMalloc +39 -0
  19. include/eigen3/Eigen/SPQRSupport +34 -0
  20. include/eigen3/Eigen/SVD +50 -0
  21. include/eigen3/Eigen/Sparse +34 -0
  22. include/eigen3/Eigen/SparseCholesky +37 -0
  23. include/eigen3/Eigen/SparseCore +69 -0
  24. include/eigen3/Eigen/SparseLU +50 -0
  25. include/eigen3/Eigen/SparseQR +36 -0
  26. include/eigen3/Eigen/StdDeque +27 -0
  27. include/eigen3/Eigen/StdList +26 -0
  28. include/eigen3/Eigen/StdVector +27 -0
  29. include/eigen3/Eigen/SuperLUSupport +64 -0
  30. include/eigen3/Eigen/UmfPackSupport +40 -0
  31. include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
  32. include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
  33. include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  34. include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  35. include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
  36. include/eigen3/Eigen/src/Core/Array.h +417 -0
  37. include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  38. include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
  39. include/eigen3/Eigen/src/Core/Assign.h +90 -0
  40. include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
  41. include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
  42. include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
  43. include/eigen3/Eigen/src/Core/Block.h +448 -0
  44. include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
  45. include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
  46. include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
  47. include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
  48. include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
  49. include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  50. include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  51. include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  52. include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  53. include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
  54. include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
  55. include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  56. include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
  57. include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
  58. include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
  59. include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
  60. include/eigen3/Eigen/src/Core/Dot.h +318 -0
  61. include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
  62. include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  63. include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
  64. include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
  65. include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
  66. include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
  67. include/eigen3/Eigen/src/Core/IO.h +258 -0
  68. include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
  69. include/eigen3/Eigen/src/Core/Inverse.h +117 -0
  70. include/eigen3/Eigen/src/Core/Map.h +171 -0
  71. include/eigen3/Eigen/src/Core/MapBase.h +310 -0
  72. include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
  73. include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  74. include/eigen3/Eigen/src/Core/Matrix.h +565 -0
  75. include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
  76. include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
  77. include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
  78. include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
  79. include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  80. include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
  81. include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
  82. include/eigen3/Eigen/src/Core/Product.h +191 -0
  83. include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
  84. include/eigen3/Eigen/src/Core/Random.h +218 -0
  85. include/eigen3/Eigen/src/Core/Redux.h +515 -0
  86. include/eigen3/Eigen/src/Core/Ref.h +381 -0
  87. include/eigen3/Eigen/src/Core/Replicate.h +142 -0
  88. include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
  89. include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
  90. include/eigen3/Eigen/src/Core/Reverse.h +217 -0
  91. include/eigen3/Eigen/src/Core/Select.h +164 -0
  92. include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
  93. include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  94. include/eigen3/Eigen/src/Core/Solve.h +188 -0
  95. include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
  96. include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
  97. include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
  98. include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
  99. include/eigen3/Eigen/src/Core/Stride.h +116 -0
  100. include/eigen3/Eigen/src/Core/Swap.h +68 -0
  101. include/eigen3/Eigen/src/Core/Transpose.h +464 -0
  102. include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
  103. include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
  104. include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
  105. include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
  106. include/eigen3/Eigen/src/Core/Visitor.h +381 -0
  107. include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  108. include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  109. include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  110. include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  111. include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  112. include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  113. include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  114. include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  115. include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  116. include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  117. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  118. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  119. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  120. include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  121. include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  122. include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  123. include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  124. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  125. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  126. include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
  127. include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  128. include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  129. include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  130. include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  131. include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  132. include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  133. include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  134. include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  135. include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  136. include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  137. include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  138. include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  139. include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  140. include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  141. include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  142. include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  143. include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  144. include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  145. include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  146. include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  147. include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  148. include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  149. include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  150. include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  151. include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  152. include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  153. include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  154. include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  155. include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  156. include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  157. include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  158. include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  159. include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
  160. include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  161. include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  162. include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  163. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  164. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  165. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  166. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  167. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  168. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  169. include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
  170. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  171. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  172. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  173. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  174. include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  175. include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  176. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  177. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  178. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  179. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  180. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  181. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  182. include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  183. include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
  184. include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  185. include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
  186. include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  187. include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  188. include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  189. include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
  190. include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
  191. include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
  192. include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
  193. include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
  194. include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  195. include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  196. include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  197. include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
  198. include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  199. include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
  200. include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  201. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  202. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  203. include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  204. include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  205. include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  206. include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  207. include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  208. include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  209. include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  210. include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  211. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  212. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  213. include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  214. include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
  215. include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
  216. include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
  217. include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
  218. include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
  219. include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
  220. include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  221. include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
  222. include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
  223. include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  224. include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
  225. include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
  226. include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
  227. include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
  228. include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  229. include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
  230. include/eigen3/Eigen/src/Householder/Householder.h +176 -0
  231. include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
  232. include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  233. include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  234. include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  235. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  236. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  237. include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  238. include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  239. include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  240. include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
  241. include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  242. include/eigen3/Eigen/src/LU/Determinant.h +117 -0
  243. include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
  244. include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
  245. include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
  246. include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  247. include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
  248. include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  249. include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
  250. include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  251. include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
  252. include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  253. include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  254. include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  255. include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  256. include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  257. include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  258. include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
  259. include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  260. include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  261. include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
  262. include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
  263. include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  264. include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
  265. include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  266. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  267. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  268. include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
  269. include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  270. include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  271. include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  272. include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
  273. include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
  274. include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  275. include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  276. include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  277. include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  278. include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  279. include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  280. include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
  281. include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  282. include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
  283. include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  284. include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  285. include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  286. include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
  287. include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
  288. include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
  289. include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  290. include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  291. include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  292. include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  293. include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  294. include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
  295. include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
  296. include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
  297. include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  298. include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
  299. include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  300. include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  301. include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  302. include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  303. include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  304. include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  305. include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  306. include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  307. include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  308. include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  309. include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  310. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  311. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  312. include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  313. include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  314. include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  315. include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
  316. include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
  317. include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
  318. include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
  319. include/eigen3/Eigen/src/StlSupport/details.h +84 -0
  320. include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  321. include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  322. include/eigen3/Eigen/src/misc/Image.h +82 -0
  323. include/eigen3/Eigen/src/misc/Kernel.h +79 -0
  324. include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
  325. include/eigen3/Eigen/src/misc/blas.h +440 -0
  326. include/eigen3/Eigen/src/misc/lapack.h +152 -0
  327. include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
  328. include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
  329. include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  330. include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  331. include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
  332. include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  333. include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  334. include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  335. include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  336. include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  337. include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
  338. include/eigen3/signature_of_eigen3_matrix_library +1 -0
  339. include/eigen3/unsupported/Eigen/AdolcForward +159 -0
  340. include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
  341. include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
  342. include/eigen3/unsupported/Eigen/AutoDiff +46 -0
  343. include/eigen3/unsupported/Eigen/BVH +95 -0
  344. include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
  345. include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
  346. include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
  347. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
  348. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
  349. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
  350. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
  351. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
  352. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
  353. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
  354. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
  355. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
  356. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
  357. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
  358. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
  359. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
  360. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
  361. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
  362. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
  363. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
  364. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
  365. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
  366. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
  367. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
  368. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
  369. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
  370. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
  371. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
  372. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
  373. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
  374. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
  375. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
  376. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
  377. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
  378. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
  379. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
  380. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
  381. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
  382. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
  383. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
  384. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
  385. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
  386. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
  387. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
  388. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
  389. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
  390. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
  391. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
  392. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
  393. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
  394. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
  395. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
  396. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
  397. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
  398. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
  399. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
  400. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
  401. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
  402. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
  403. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
  404. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
  405. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
  406. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
  407. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
  408. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
  409. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
  410. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
  411. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
  412. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
  413. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
  414. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
  415. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
  416. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
  417. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
  418. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
  419. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
  420. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
  421. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
  422. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
  423. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
  424. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
  425. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
  426. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
  427. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
  428. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
  429. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
  430. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
  431. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
  432. include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
  433. include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
  434. include/eigen3/unsupported/Eigen/EulerAngles +43 -0
  435. include/eigen3/unsupported/Eigen/FFT +419 -0
  436. include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
  437. include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
  438. include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
  439. include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
  440. include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
  441. include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
  442. include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
  443. include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
  444. include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
  445. include/eigen3/unsupported/Eigen/Polynomials +137 -0
  446. include/eigen3/unsupported/Eigen/Skyline +39 -0
  447. include/eigen3/unsupported/Eigen/SparseExtra +54 -0
  448. include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
  449. include/eigen3/unsupported/Eigen/Splines +35 -0
  450. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
  451. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
  452. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
  453. include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
  454. include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
  455. include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
  456. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
  457. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
  458. include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
  459. include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
  460. include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
  461. include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
  462. include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
  463. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
  464. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
  465. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
  466. include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
  467. include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
  468. include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
  469. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
  470. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
  471. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
  472. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
  473. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
  474. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
  475. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
  476. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
  477. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
  478. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
  479. include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
  480. include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
  481. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
  482. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
  483. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
  484. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
  485. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
  486. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
  487. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
  488. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
  489. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
  490. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
  491. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
  492. include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
  493. include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
  494. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
  495. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
  496. include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
  497. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
  498. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
  499. include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
  500. include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
  501. include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
  502. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
  503. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
  504. include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
  505. include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
  506. include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
  507. include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
  508. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
  509. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
  510. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
  511. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
  512. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
  513. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
  514. include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
  515. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
  516. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
  517. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
  518. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
  519. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
  520. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
  521. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
  522. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
  523. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
  524. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
  525. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
  526. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
  527. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
  528. include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
  529. include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
  530. include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
  531. pyvale/__init__.py +23 -0
  532. pyvale/blender/__init__.py +23 -0
  533. pyvale/blender/blendercalibrationdata.py +17 -0
  534. pyvale/blender/blenderexceptions.py +8 -0
  535. pyvale/blender/blenderlightdata.py +26 -0
  536. pyvale/blender/blendermaterialdata.py +15 -0
  537. pyvale/blender/blenderrenderdata.py +35 -0
  538. pyvale/blender/blenderscene.py +493 -0
  539. pyvale/blender/blendertools.py +449 -0
  540. pyvale/calib/__init__.py +11 -0
  541. pyvale/calib/calibcpp.cpython-311-i386-linux-gnu.so +0 -0
  542. pyvale/calib/calibdotdetect.py +510 -0
  543. pyvale/calib/calibparams.py +47 -0
  544. pyvale/calib/calibstereo.py +441 -0
  545. pyvale/calib/cpp/bindings.cpp +22 -0
  546. pyvale/calib/cpp/calibdotdetect.cpp +16 -0
  547. pyvale/calib/cpp/calibdotdetect.hpp +20 -0
  548. pyvale/calib/cpp/calibopt.cpp +347 -0
  549. pyvale/calib/cpp/calibopt.hpp +84 -0
  550. pyvale/calib/cpp/calibstereo.cpp +95 -0
  551. pyvale/calib/cpp/calibstereo.hpp +27 -0
  552. pyvale/common_cpp/__init__.py +5 -0
  553. pyvale/common_cpp/bindings.cpp +33 -0
  554. pyvale/common_cpp/common_cpp.cpython-311-i386-linux-gnu.so +0 -0
  555. pyvale/common_cpp/defines.hpp +39 -0
  556. pyvale/common_cpp/dicsignalhandler.cpp +16 -0
  557. pyvale/common_cpp/dicsignalhandler.hpp +11 -0
  558. pyvale/common_cpp/pocketfft_hdronly.h +3744 -0
  559. pyvale/common_cpp/progressbar.hpp +107 -0
  560. pyvale/common_cpp/util.cpp +19 -0
  561. pyvale/common_cpp/util.hpp +72 -0
  562. pyvale/common_py/util.py +63 -0
  563. pyvale/data/DIC_Challenge_Star_Noise_Def.tiff +0 -0
  564. pyvale/data/DIC_Challenge_Star_Noise_Ref.tiff +0 -0
  565. pyvale/data/__init__.py +5 -0
  566. pyvale/data/cal_target.tiff +0 -0
  567. pyvale/data/calib.caldat +26 -0
  568. pyvale/data/case00_HEX20_out.e +0 -0
  569. pyvale/data/case00_HEX27_out.e +0 -0
  570. pyvale/data/case00_HEX8_out.e +0 -0
  571. pyvale/data/case00_TET10_out.e +0 -0
  572. pyvale/data/case00_TET14_out.e +0 -0
  573. pyvale/data/case00_TET4_out.e +0 -0
  574. pyvale/data/case16_d_out.e +0 -0
  575. pyvale/data/case16_out.e +0 -0
  576. pyvale/data/case17_out.e +0 -0
  577. pyvale/data/case18_d_out.e +0 -0
  578. pyvale/data/case18_out.e +0 -0
  579. pyvale/data/case26_out.e +0 -0
  580. pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff +0 -0
  581. pyvale/data/plate_hole_def0000.tiff +0 -0
  582. pyvale/data/plate_hole_def0001.tiff +0 -0
  583. pyvale/data/plate_hole_ref0000.tiff +0 -0
  584. pyvale/data/plate_rigid_def0000.tiff +0 -0
  585. pyvale/data/plate_rigid_def0001.tiff +0 -0
  586. pyvale/data/plate_rigid_def_25px.tiff +0 -0
  587. pyvale/data/plate_rigid_def_50px.tiff +0 -0
  588. pyvale/data/plate_rigid_ref0000.tiff +0 -0
  589. pyvale/dataset/__init__.py +7 -0
  590. pyvale/dataset/dataset.py +483 -0
  591. pyvale/dic/__init__.py +15 -0
  592. pyvale/dic/cpp/bindings.cpp +52 -0
  593. pyvale/dic/cpp/dicfourier.cpp +705 -0
  594. pyvale/dic/cpp/dicfourier.hpp +410 -0
  595. pyvale/dic/cpp/dicinterpolator.cpp +633 -0
  596. pyvale/dic/cpp/dicinterpolator.hpp +162 -0
  597. pyvale/dic/cpp/dicmain.cpp +214 -0
  598. pyvale/dic/cpp/dicmain.hpp +61 -0
  599. pyvale/dic/cpp/dicoptimizer.cpp +564 -0
  600. pyvale/dic/cpp/dicoptimizer.hpp +279 -0
  601. pyvale/dic/cpp/dicresults.cpp +239 -0
  602. pyvale/dic/cpp/dicresults.hpp +64 -0
  603. pyvale/dic/cpp/dicrg.cpp +55 -0
  604. pyvale/dic/cpp/dicrg.hpp +52 -0
  605. pyvale/dic/cpp/dicscanmethod.cpp +819 -0
  606. pyvale/dic/cpp/dicscanmethod.hpp +119 -0
  607. pyvale/dic/cpp/dicshapefunc.cpp +117 -0
  608. pyvale/dic/cpp/dicshapefunc.hpp +40 -0
  609. pyvale/dic/cpp/dicsubset.cpp +325 -0
  610. pyvale/dic/cpp/dicsubset.hpp +122 -0
  611. pyvale/dic/cpp/dicutil.cpp +108 -0
  612. pyvale/dic/cpp/dicutil.hpp +96 -0
  613. pyvale/dic/cuda/malloc.cu +99 -0
  614. pyvale/dic/cuda/malloc.hpp +17 -0
  615. pyvale/dic/dic2d.py +190 -0
  616. pyvale/dic/dic2dconv.py +6 -0
  617. pyvale/dic/dic2dcpp.cpython-311-i386-linux-gnu.so +0 -0
  618. pyvale/dic/dicchecks.py +455 -0
  619. pyvale/dic/dicdataimport.py +402 -0
  620. pyvale/dic/dicregionofinterest.py +1163 -0
  621. pyvale/dic/dicresults.py +58 -0
  622. pyvale/examples/__init__.py +5 -0
  623. pyvale/examples/basicsensorsim/README.md +2 -0
  624. pyvale/examples/basicsensorsim/ex0_quickstart.py +139 -0
  625. pyvale/examples/basicsensorsim/ex1_scalar_sensors.py +240 -0
  626. pyvale/examples/basicsensorsim/ex2_vector_tensor_sensors.py +280 -0
  627. pyvale/examples/basicsensorsim/ex3_experiment_simulator.py +397 -0
  628. pyvale/examples/blenderimagedef/README.md +2 -0
  629. pyvale/examples/blenderimagedef/ex1_blender_scene2d.py +176 -0
  630. pyvale/examples/blenderimagedef/ex2_blender_imagedef2d.py +177 -0
  631. pyvale/examples/blenderimagedef/ex3_blender_scenestereo.py +205 -0
  632. pyvale/examples/blenderimagedef/ex4_blender_imagedefstereo.py +213 -0
  633. pyvale/examples/blenderimagedef/ex5_blender_calibstereo.py +190 -0
  634. pyvale/examples/dic/README.md +2 -0
  635. pyvale/examples/dic/ex1_region_of_interest.py +101 -0
  636. pyvale/examples/dic/ex2_plate_with_hole.py +155 -0
  637. pyvale/examples/dic/ex3_plate_with_hole_strain.py +99 -0
  638. pyvale/examples/dic/ex4_dic_blender.py +97 -0
  639. pyvale/examples/dic/ex5_dic_challenge.py +107 -0
  640. pyvale/examples/extsensorsim/README.md +2 -0
  641. pyvale/examples/extsensorsim/ex1_byosimdata.py +211 -0
  642. pyvale/examples/extsensorsim/ex2_meshfreesensors.py +174 -0
  643. pyvale/examples/extsensorsim/ex3a_scal2d.py +151 -0
  644. pyvale/examples/extsensorsim/ex3b_scal3d.py +150 -0
  645. pyvale/examples/extsensorsim/ex3c_vec2d.py +163 -0
  646. pyvale/examples/extsensorsim/ex3d_vec3d.py +169 -0
  647. pyvale/examples/extsensorsim/ex3e_tens2d.py +170 -0
  648. pyvale/examples/extsensorsim/ex3f_tens3d.py +198 -0
  649. pyvale/examples/extsensorsim/ex4a_basicerrs_scal2d.py +201 -0
  650. pyvale/examples/extsensorsim/ex4b_fielderrs_scal3d.py +197 -0
  651. pyvale/examples/extsensorsim/ex4c_angleerrs_vec2d.py +215 -0
  652. pyvale/examples/extsensorsim/ex4d_fieldlockerrs_vec3d.py +184 -0
  653. pyvale/examples/extsensorsim/ex4e_chainfielderrs_vec2d.py +233 -0
  654. pyvale/examples/extsensorsim/ex4f_caliberrs_scal2d.py +167 -0
  655. pyvale/examples/extsensorsim/ex4g_spatavgerrs_scal2d.py +146 -0
  656. pyvale/examples/extsensorsim/ex5a_expsim_thermmech2d.py +350 -0
  657. pyvale/examples/extsensorsim/ex5b_expsim_thermmech3d.py +358 -0
  658. pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py +41 -0
  659. pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py +43 -0
  660. pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py +86 -0
  661. pyvale/examples/genanalyticdata/ex2_2_analyticsensors_nomesh.py +89 -0
  662. pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +84 -0
  663. pyvale/examples/mooseherder/README.md +2 -0
  664. pyvale/examples/mooseherder/ex0_create_moose_config.py +65 -0
  665. pyvale/examples/mooseherder/ex1a_modify_moose_input.py +71 -0
  666. pyvale/examples/mooseherder/ex1b_modify_gmsh_input.py +69 -0
  667. pyvale/examples/mooseherder/ex2a_run_moose_once.py +80 -0
  668. pyvale/examples/mooseherder/ex2b_run_gmsh_once.py +64 -0
  669. pyvale/examples/mooseherder/ex2c_run_both_once.py +114 -0
  670. pyvale/examples/mooseherder/ex3_run_moose_seq_para.py +157 -0
  671. pyvale/examples/mooseherder/ex4_run_gmsh-moose_seq_para.py +176 -0
  672. pyvale/examples/mooseherder/ex5_run_moose_paramulti.py +136 -0
  673. pyvale/examples/mooseherder/ex6_read_moose_exodus.py +163 -0
  674. pyvale/examples/mooseherder/ex7a_read_moose_herd_results.py +153 -0
  675. pyvale/examples/mooseherder/ex7b_read_multi_herd_results.py +116 -0
  676. pyvale/examples/mooseherder/ex7c_read_multi_gmshmoose_results.py +127 -0
  677. pyvale/examples/mooseherder/ex7d_readconfig_multi_gmshmoose_results.py +143 -0
  678. pyvale/examples/mooseherder/ex8_read_existing_sweep_output.py +72 -0
  679. pyvale/examples/rasterimagedef/ex_rastenp.py +194 -0
  680. pyvale/examples/rasterimagedef/ex_rastercyth_oneframe.py +206 -0
  681. pyvale/examples/rasterimagedef/ex_rastercyth_static_cypara.py +189 -0
  682. pyvale/examples/rasterimagedef/ex_rastercyth_static_pypara.py +219 -0
  683. pyvale/examples/visualisation/ex1_visualisation_options.py +111 -0
  684. pyvale/mooseherder/__init__.py +55 -0
  685. pyvale/mooseherder/directorymanager.py +408 -0
  686. pyvale/mooseherder/exceptions.py +10 -0
  687. pyvale/mooseherder/exodusloader.py +762 -0
  688. pyvale/mooseherder/gmshrunner.py +158 -0
  689. pyvale/mooseherder/inputmodifier.py +240 -0
  690. pyvale/mooseherder/mooseconfig.py +212 -0
  691. pyvale/mooseherder/mooseherd.py +539 -0
  692. pyvale/mooseherder/mooserunner.py +307 -0
  693. pyvale/mooseherder/outputloader.py +17 -0
  694. pyvale/mooseherder/simdata.py +93 -0
  695. pyvale/mooseherder/simloaderbyfield.py +211 -0
  696. pyvale/mooseherder/simloaderbytime.py +193 -0
  697. pyvale/mooseherder/simloadopts.py +55 -0
  698. pyvale/mooseherder/simloadtools.py +465 -0
  699. pyvale/mooseherder/simrunner.py +31 -0
  700. pyvale/mooseherder/simsaver.py +401 -0
  701. pyvale/mooseherder/sweeploader.py +358 -0
  702. pyvale/mooseherder/sweeptools.py +76 -0
  703. pyvale/sensorsim/__init__.py +86 -0
  704. pyvale/sensorsim/camera.py +147 -0
  705. pyvale/sensorsim/cameradata.py +72 -0
  706. pyvale/sensorsim/cameradata2d.py +84 -0
  707. pyvale/sensorsim/camerasensor.py +147 -0
  708. pyvale/sensorsim/camerastereo.py +217 -0
  709. pyvale/sensorsim/cameratools.py +484 -0
  710. pyvale/sensorsim/cython/rastercyth.c +32404 -0
  711. pyvale/sensorsim/cython/rastercyth.html +3392 -0
  712. pyvale/sensorsim/cython/rastercyth.py +684 -0
  713. pyvale/sensorsim/enums.py +16 -0
  714. pyvale/sensorsim/errordriftcalc.py +104 -0
  715. pyvale/sensorsim/errorintegrator.py +359 -0
  716. pyvale/sensorsim/errorrand.py +105 -0
  717. pyvale/sensorsim/errorsimulator.py +137 -0
  718. pyvale/sensorsim/errorsyscalib.py +93 -0
  719. pyvale/sensorsim/errorsysdep.py +197 -0
  720. pyvale/sensorsim/errorsysfield.py +383 -0
  721. pyvale/sensorsim/errorsysindep.py +209 -0
  722. pyvale/sensorsim/exceptions.py +14 -0
  723. pyvale/sensorsim/experimentsimio.py +94 -0
  724. pyvale/sensorsim/experimentsimulator.py +615 -0
  725. pyvale/sensorsim/experimentstats.py +115 -0
  726. pyvale/sensorsim/field.py +127 -0
  727. pyvale/sensorsim/fieldconverter.py +378 -0
  728. pyvale/sensorsim/fieldinterp.py +89 -0
  729. pyvale/sensorsim/fieldinterpmesh.py +119 -0
  730. pyvale/sensorsim/fieldinterppoints.py +93 -0
  731. pyvale/sensorsim/fieldsampler.py +110 -0
  732. pyvale/sensorsim/fieldscalar.py +94 -0
  733. pyvale/sensorsim/fieldtensor.py +150 -0
  734. pyvale/sensorsim/fieldtransform.py +388 -0
  735. pyvale/sensorsim/fieldvector.py +136 -0
  736. pyvale/sensorsim/generatorsrandom.py +420 -0
  737. pyvale/sensorsim/imagedef2d.py +577 -0
  738. pyvale/sensorsim/imagetools.py +137 -0
  739. pyvale/sensorsim/integratorfactory.py +240 -0
  740. pyvale/sensorsim/integratorquadrature.py +217 -0
  741. pyvale/sensorsim/integratorrectangle.py +165 -0
  742. pyvale/sensorsim/integratorspatial.py +89 -0
  743. pyvale/sensorsim/integratortype.py +43 -0
  744. pyvale/sensorsim/logger.py +23 -0
  745. pyvale/sensorsim/plotting_logs.py +22 -0
  746. pyvale/sensorsim/raster.py +31 -0
  747. pyvale/sensorsim/rastercy.py +107 -0
  748. pyvale/sensorsim/rasternp.py +627 -0
  749. pyvale/sensorsim/rasteropts.py +58 -0
  750. pyvale/sensorsim/renderer.py +47 -0
  751. pyvale/sensorsim/rendermesh.py +137 -0
  752. pyvale/sensorsim/renderscene.py +51 -0
  753. pyvale/sensorsim/sensorarray.py +178 -0
  754. pyvale/sensorsim/sensordata.py +74 -0
  755. pyvale/sensorsim/sensordescriptor.py +275 -0
  756. pyvale/sensorsim/sensorfactory.py +179 -0
  757. pyvale/sensorsim/sensorspoint.py +308 -0
  758. pyvale/sensorsim/sensortools.py +113 -0
  759. pyvale/sensorsim/simtools.py +300 -0
  760. pyvale/sensorsim/visualexpplotter.py +201 -0
  761. pyvale/sensorsim/visualimagedef.py +74 -0
  762. pyvale/sensorsim/visualimages.py +76 -0
  763. pyvale/sensorsim/visualopts.py +507 -0
  764. pyvale/sensorsim/visualsimanimator.py +111 -0
  765. pyvale/sensorsim/visualsimplotter.py +180 -0
  766. pyvale/sensorsim/visualsimsensors.py +343 -0
  767. pyvale/sensorsim/visualtools.py +136 -0
  768. pyvale/sensorsim/visualtraceanimator.py +77 -0
  769. pyvale/sensorsim/visualtraceplotter.py +296 -0
  770. pyvale/simcases/case00_HEX20.i +242 -0
  771. pyvale/simcases/case00_HEX27.i +242 -0
  772. pyvale/simcases/case00_HEX8.i +242 -0
  773. pyvale/simcases/case00_TET10.i +242 -0
  774. pyvale/simcases/case00_TET14.i +242 -0
  775. pyvale/simcases/case00_TET4.i +242 -0
  776. pyvale/simcases/case01.i +101 -0
  777. pyvale/simcases/case02.i +156 -0
  778. pyvale/simcases/case03.i +136 -0
  779. pyvale/simcases/case04.i +181 -0
  780. pyvale/simcases/case05.i +234 -0
  781. pyvale/simcases/case06.i +305 -0
  782. pyvale/simcases/case07.geo +135 -0
  783. pyvale/simcases/case07.i +87 -0
  784. pyvale/simcases/case08.geo +144 -0
  785. pyvale/simcases/case08.i +153 -0
  786. pyvale/simcases/case09.geo +204 -0
  787. pyvale/simcases/case09.i +87 -0
  788. pyvale/simcases/case10.geo +204 -0
  789. pyvale/simcases/case10.i +257 -0
  790. pyvale/simcases/case11.geo +337 -0
  791. pyvale/simcases/case11.i +147 -0
  792. pyvale/simcases/case12.geo +388 -0
  793. pyvale/simcases/case12.i +329 -0
  794. pyvale/simcases/case13.i +140 -0
  795. pyvale/simcases/case14.i +159 -0
  796. pyvale/simcases/case15.geo +337 -0
  797. pyvale/simcases/case15.i +150 -0
  798. pyvale/simcases/case16.geo +391 -0
  799. pyvale/simcases/case16.i +357 -0
  800. pyvale/simcases/case16_d.i +360 -0
  801. pyvale/simcases/case16_u.i +360 -0
  802. pyvale/simcases/case17.geo +138 -0
  803. pyvale/simcases/case17.i +144 -0
  804. pyvale/simcases/case18.i +271 -0
  805. pyvale/simcases/case18_d.i +271 -0
  806. pyvale/simcases/case18_u.i +271 -0
  807. pyvale/simcases/case19.geo +252 -0
  808. pyvale/simcases/case19.i +99 -0
  809. pyvale/simcases/case20.geo +252 -0
  810. pyvale/simcases/case20.i +250 -0
  811. pyvale/simcases/case21.geo +74 -0
  812. pyvale/simcases/case21.i +155 -0
  813. pyvale/simcases/case22.geo +82 -0
  814. pyvale/simcases/case22.i +140 -0
  815. pyvale/simcases/case23.geo +164 -0
  816. pyvale/simcases/case23.i +140 -0
  817. pyvale/simcases/case24.geo +79 -0
  818. pyvale/simcases/case24.i +123 -0
  819. pyvale/simcases/case25.geo +82 -0
  820. pyvale/simcases/case25.i +140 -0
  821. pyvale/simcases/case26.geo +166 -0
  822. pyvale/simcases/case26.i +140 -0
  823. pyvale/simcases/cases_dictionary.yaml +336 -0
  824. pyvale/simcases/run_1case.py +60 -0
  825. pyvale/simcases/run_all_cases.py +69 -0
  826. pyvale/simcases/run_build_case.py +64 -0
  827. pyvale/simcases/run_example_cases.py +69 -0
  828. pyvale/strain/__init__.py +13 -0
  829. pyvale/strain/cpp/bindings.cpp +25 -0
  830. pyvale/strain/cpp/smooth.cpp +140 -0
  831. pyvale/strain/cpp/smooth.hpp +53 -0
  832. pyvale/strain/cpp/strain.cpp +390 -0
  833. pyvale/strain/cpp/strain.hpp +177 -0
  834. pyvale/strain/strain.py +117 -0
  835. pyvale/strain/strain_cpp.cpython-311-i386-linux-gnu.so +0 -0
  836. pyvale/strain/strainchecks.py +47 -0
  837. pyvale/strain/strainimport.py +303 -0
  838. pyvale/strain/strainresults.py +55 -0
  839. pyvale/verif/__init__.py +15 -0
  840. pyvale/verif/analyticmeshgen.py +102 -0
  841. pyvale/verif/analyticsimdatafactory.py +125 -0
  842. pyvale/verif/analyticsimdatagenerator.py +368 -0
  843. pyvale/verif/matchsimdata.py +113 -0
  844. pyvale/verif/pointsens.py +120 -0
  845. pyvale/verif/pointsensconst.py +19 -0
  846. pyvale/verif/pointsensmech.py +270 -0
  847. pyvale/verif/pointsensmultiphys.py +184 -0
  848. pyvale/verif/pointsensscalar.py +383 -0
  849. pyvale/verif/pointsenstensor.py +159 -0
  850. pyvale/verif/pointsensvector.py +157 -0
  851. pyvale-2026.1.1.dist-info/METADATA +98 -0
  852. pyvale-2026.1.1.dist-info/RECORD +860 -0
  853. pyvale-2026.1.1.dist-info/WHEEL +6 -0
  854. pyvale-2026.1.1.dist-info/licenses/LICENSE +21 -0
  855. pyvale.libs/libgomp-65f46eca.so.1.0.0 +0 -0
  856. share/eigen3/cmake/Eigen3Config.cmake +37 -0
  857. share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
  858. share/eigen3/cmake/Eigen3Targets.cmake +106 -0
  859. share/eigen3/cmake/UseEigen3.cmake +6 -0
  860. share/pkgconfig/eigen3.pc +9 -0
@@ -0,0 +1,1163 @@
1
+ # ================================================================================
2
+ # pyvale: the python validation engine
3
+ # License: MIT
4
+ # Copyright (C) 2025 The Computer Aided Validation Team
5
+ # ================================================================================
6
+
7
+ from pyqtgraph.Qt import QtWidgets, QtCore, QtGui
8
+ import pyqtgraph as pg
9
+ import cv2
10
+ import numpy as np
11
+ import matplotlib.pyplot as plt
12
+ from matplotlib.path import Path as mplPath
13
+ import math
14
+ import yaml
15
+ import os
16
+ from pathlib import Path
17
+ from functools import partial
18
+
19
+ class RegionOfInterest:
20
+ """
21
+ A class for interactively selecting and manipulating ROI of an image before passing to the DIC engine.
22
+
23
+ Users can:
24
+ - Interactively select rectangular, circular, or polygonal regions on the image.
25
+ - Add or subtract selected regions from the mask.
26
+ - Undo and reset the mask changes.
27
+ - read in previously created ROIs
28
+ - save created ROI as text or binary file.
29
+ - Display/save the ROI overlayed over the reference.
30
+ - Programatically select a rectangular ROI for consistency.
31
+
32
+ Public attributes:
33
+ image (np.ndarray): The image on which regions of interest are selected.
34
+ mask (np.ndarray): A binary mask representing the selected regions of interest.
35
+ """
36
+
37
+ def __init__(self, ref_image: str | np.ndarray | Path):
38
+ """
39
+ Parameters
40
+ ----------
41
+ ref_image : str, numpy.ndarray, pathlib.Path
42
+ location of the reference image.
43
+
44
+ Raises
45
+ ------
46
+ ValueError: If the image cannot be loaded or is invalid.
47
+ """
48
+ if isinstance(ref_image, str):
49
+ self.ref_image = cv2.imread(ref_image)
50
+ elif isinstance(ref_image, Path):
51
+ self.ref_image = cv2.imread(str(ref_image))
52
+ else:
53
+ self.ref_image = ref_image.copy()
54
+
55
+ if self.ref_image is None:
56
+ raise ValueError("Invalid image input")
57
+
58
+ self.mask = np.zeros(self.ref_image.shape[:2], dtype=bool)
59
+ self.seed = []
60
+ self.__roi_selected = False
61
+ self.roi_list = []
62
+ self.add_list = []
63
+ self.undo_list = []
64
+
65
+ # Drawing states
66
+ self.drawing_modes = {
67
+ 'seed': False,
68
+ 'rect': False,
69
+ 'circle': False,
70
+ 'poly': False
71
+ }
72
+ self.removing_modes = {
73
+ 'rect': False,
74
+ 'circle': False,
75
+ 'poly': False
76
+ }
77
+
78
+ # GUI elements (initialized in interactive_selection)
79
+ self.main_view = None
80
+ self.fill_layer = None
81
+ self.buttons = {}
82
+ self.poly_points = []
83
+
84
+ self.height = None
85
+ self.width = None
86
+ self.subset_size = None
87
+ self.coord_label = None
88
+
89
+ def interactive_selection(self, subset_size):
90
+ """
91
+ Interactive GUI to select a region of interest (ROI) in the image using openCV.
92
+ """
93
+ self.subset_size = subset_size
94
+ self.__roi_selected = True
95
+
96
+ # Initialize GUI
97
+ fill_array, temp_mask = self._setup_gui()
98
+ print(fill_array.shape, temp_mask.shape)
99
+ self._connect_signals(fill_array, temp_mask)
100
+
101
+ # Show and run
102
+ self.main_window.show()
103
+ pg.exec()
104
+
105
+ # Process seed
106
+ self._finalize_seed_selection()
107
+
108
+ # finalize mask
109
+ self.mask = temp_mask
110
+
111
+ def _setup_gui(self) -> tuple[np.ndarray, np.ndarray]:
112
+ """Setup the main GUI window and sidebar."""
113
+ app = pg.mkQApp("ROI GUI")
114
+ self.main_window = CustomMainWindow(dic_obj=self)
115
+ main_layout = QtWidgets.QHBoxLayout()
116
+ self.main_window.setLayout(main_layout)
117
+ self.main_window.resize(1000, 1000)
118
+
119
+ """Setup the graphics view and image display."""
120
+ self.graphics_widget = pg.GraphicsLayoutWidget()
121
+ self.main_view = self.graphics_widget.addViewBox(lockAspect=True)
122
+
123
+ # Setup image
124
+ rotated = np.rot90(self.ref_image, k=1)
125
+ rotated = np.flip(rotated,axis=0)
126
+ img = pg.ImageItem(rotated)
127
+ self.main_view.addItem(img)
128
+ self.main_view.disableAutoRange('xy')
129
+ self.main_view.autoRange()
130
+ self.main_view.invertY(True)
131
+
132
+ # Setup fill layer
133
+ self.fill_layer = pg.ImageItem()
134
+ self.fill_layer.setZValue(1)
135
+ self.main_view.addItem(self.fill_layer)
136
+ self.height, self.width = self.ref_image.shape[:2]
137
+
138
+ # these are flipped because of the way pyqtgraph works
139
+ fill_array = np.zeros((self.height, self.width, 4), dtype=np.uint8)
140
+ temp_mask = np.zeros((self.height, self.width), dtype=bool)
141
+
142
+ # Setup drawing overlays
143
+ self._setup_drawing_overlays()
144
+
145
+
146
+ # Create sidebar
147
+ sidebar = self._create_sidebar(fill_array, temp_mask)
148
+
149
+ # Create graphics widget
150
+ main_layout.addLayout(sidebar)
151
+ main_layout.addWidget(self.graphics_widget)
152
+
153
+ return fill_array, temp_mask
154
+
155
+ def _create_sidebar(self, fill_array, temp_mask):
156
+ """Create the sidebar with all buttons."""
157
+ sidebar = QtWidgets.QVBoxLayout()
158
+
159
+ # Helper function for styled titles
160
+ def make_title(text):
161
+ label = QtWidgets.QLabel(text)
162
+ label.setStyleSheet("font-weight: bold; font-size: 14px; margin-top: 10px; margin-bottom: 5px;")
163
+ return label
164
+
165
+ # Create all buttons
166
+ button_configs = [
167
+ ("FILE ACTIONS", [("open_roi", "Open ROI..."),
168
+ ("save_roi", "Save Current ROI...")]),
169
+
170
+ ("ADD SHAPES TO ROI", [("add_rect", "Add Rectangle"),
171
+ ("add_circle", "Add Circle"),
172
+ ("add_poly", "Add Polygon")]),
173
+
174
+ ("REMOVE SHAPES FROM ROI", [("sub_rect", "Remove Rectangle"),
175
+ ("sub_circle", "Remove Circle"),
176
+ ("sub_poly", "Remove Polygon")]),
177
+
178
+ ("SEED LOCATION", "SEED_SECTION"),
179
+
180
+ ("UNDO / REDO SHAPES", [("undo_prev", "Undo Shape"),
181
+ ("redo_prev", "Redo Shape")]),
182
+
183
+ ("COMPLETION", [("finished", "ROI Completed")])
184
+ ]
185
+
186
+ self.buttons = {}
187
+ for section_title, button_list in button_configs:
188
+ sidebar.addWidget(make_title(section_title))
189
+
190
+ if button_list == "SEED_SECTION":
191
+
192
+ # Seed size input layout
193
+ seed_layout = QtWidgets.QHBoxLayout()
194
+
195
+ seed_label = QtWidgets.QLabel("Seed Size (odd):")
196
+ seed_input = QtWidgets.QLineEdit()
197
+ seed_input.setFixedWidth(60)
198
+ seed_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
199
+
200
+ # Default subset size
201
+ seed_input.setText("21")
202
+
203
+ # Restrict to integer input
204
+ validator = QtGui.QIntValidator(1, 999)
205
+ seed_input.setValidator(validator)
206
+
207
+ # Enforce odd values
208
+ def enforce_odd():
209
+ text = seed_input.text()
210
+ if text.isdigit():
211
+ val = int(text)
212
+ if val % 2 == 0: # Convert even → odd
213
+ seed_input.setText(str(val + 1))
214
+
215
+ self.subset_size = val
216
+ if hasattr(self, 'seed_roi') and self.seed_roi is not None:
217
+ # Compute current center of existing ROI
218
+ old_rect = self.seed_roi.pos()
219
+ center = QtCore.QPointF(old_rect.x() + self.subset_size / 2,
220
+ old_rect.y() + self.subset_size / 2)
221
+ self._draw_seed_roi(center, fill_array, temp_mask)
222
+
223
+ seed_input.editingFinished.connect(enforce_odd)
224
+
225
+ seed_layout.addWidget(seed_label)
226
+ seed_layout.addWidget(seed_input)
227
+ sidebar.addLayout(seed_layout)
228
+
229
+ self.seed_input = seed_input
230
+
231
+ # Add Seed Button
232
+ btn = QtWidgets.QPushButton("Add Reliability Guided Seed Location")
233
+ self.buttons["add_seed"] = btn
234
+ sidebar.addWidget(btn)
235
+
236
+ sidebar.addSpacing(20)
237
+ continue
238
+
239
+ for btn_id, btn_text in button_list:
240
+ btn = QtWidgets.QPushButton(btn_text)
241
+ self.buttons[btn_id] = btn
242
+ sidebar.addWidget(btn)
243
+
244
+ sidebar.addSpacing(20)
245
+
246
+ # Initial button states
247
+ self.buttons['undo_prev'].setEnabled(False)
248
+ self.buttons['redo_prev'].setEnabled(False)
249
+
250
+ # Coordinate display label
251
+ self.coord_label = QtWidgets.QLabel("(-, -)")
252
+ self.coord_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
253
+
254
+ self.coord_label.setMinimumWidth(350)
255
+ self.coord_label.setMaximumWidth(350)
256
+
257
+ self.coord_label.setStyleSheet("""
258
+ QLabel {
259
+ background-color: rgba(0, 0, 0, 150);
260
+ color: white;
261
+ padding: 5px;
262
+ border-radius: 3px;
263
+ font-family: monospace;
264
+ font-size: 12px;
265
+ }
266
+ """)
267
+
268
+ sidebar.addStretch()
269
+ sidebar.addWidget(self.coord_label)
270
+
271
+ return sidebar
272
+
273
+
274
+ def _setup_drawing_overlays(self):
275
+ """Setup scatter plots and lines for polygon drawing."""
276
+ self.add_scatter = pg.ScatterPlotItem(size=10, pen=pg.mkPen(None), brush=pg.mkBrush('b'))
277
+ self.sub_scatter = pg.ScatterPlotItem(size=10, pen=pg.mkPen(None), brush=pg.mkBrush('r'))
278
+ self.add_line = pg.PlotDataItem(pen=pg.mkPen('b', width=3))
279
+ self.sub_line = pg.PlotDataItem(pen=pg.mkPen('r', width=3))
280
+
281
+ for item in [self.add_scatter, self.sub_scatter, self.add_line, self.sub_line]:
282
+ self.main_view.addItem(item)
283
+
284
+ def _connect_signals(self, fill_array: np.ndarray, temp_mask: np.ndarray):
285
+ """Connect all button signals to their handlers."""
286
+ signal_map = {
287
+ 'add_seed': lambda: self._start_drawing_mode('seed'),
288
+ 'add_rect': lambda: self._start_drawing_mode('rect'),
289
+ 'add_circle': lambda: self._start_drawing_mode('circle'),
290
+ 'add_poly': lambda: self._start_drawing_mode('poly'),
291
+ 'sub_rect': lambda: self._start_removing_mode('rect'),
292
+ 'sub_circle': lambda: self._start_removing_mode('circle'),
293
+ 'sub_poly': lambda: self._start_removing_mode('poly'),
294
+ 'undo_prev': lambda: self._undo_last(fill_array, temp_mask),
295
+ 'redo_prev': lambda: self._redo_last(fill_array, temp_mask),
296
+ 'save_roi': lambda: self._save_interactive_roi(),
297
+ 'open_roi': lambda: self._open_interactive_roi(fill_array, temp_mask),
298
+ 'finished': self._finish
299
+ }
300
+
301
+ for btn_id, handler in signal_map.items():
302
+ self.buttons[btn_id].clicked.connect(handler)
303
+
304
+ self.main_view.scene().sigMouseClicked.connect(partial(self._mouse_clicked, fill_array=fill_array, temp_mask=temp_mask))
305
+ self.main_view.scene().sigMouseMoved.connect(self._mouse_moved)
306
+
307
+
308
+ def _mouse_moved(self, pos):
309
+ """Handle mouse movement to update coordinate display."""
310
+ if self.main_view.sceneBoundingRect().contains(pos):
311
+ mouse_point = self.main_view.mapSceneToView(pos)
312
+ # Convert from graphics coordinates to image coordinates
313
+ img_x = int(math.floor(mouse_point.x()))
314
+ img_y = int(math.floor(self.height - mouse_point.y()))
315
+
316
+ # Clamp coordinates to image bounds
317
+ img_x = max(0, min(img_x, self.width - 1))
318
+ img_y = max(0, min(img_y, self.height - 1))
319
+
320
+ self.coord_label.setText(f"({img_x}, {self.height-img_y-1})")
321
+ else:
322
+ self.coord_label.setText("(-, -)")
323
+
324
+ def _start_drawing_mode(self, mode):
325
+ """Start drawing mode for specified shape type."""
326
+ self._reset_all_modes()
327
+ self.drawing_modes[mode] = True
328
+ self.main_view.setCursor(QtCore.Qt.CursorShape.CrossCursor)
329
+
330
+ if mode == 'poly':
331
+ self.poly_points = []
332
+ self.add_scatter.setData([], [])
333
+ self.add_line.setData([], [])
334
+ print("Click to add polygon points. Right-click to finish.")
335
+ elif mode == 'seed':
336
+ self.buttons['add_seed'].setEnabled(False)
337
+ print("Click to add seed location...")
338
+ else:
339
+ print(f"Click to add {mode}.")
340
+
341
+ def _start_removing_mode(self, mode):
342
+ """Start removing mode for specified shape type."""
343
+ self._reset_all_modes()
344
+ self.removing_modes[mode] = True
345
+ self.main_view.setCursor(QtCore.Qt.CursorShape.CrossCursor)
346
+
347
+ if mode == 'poly':
348
+ self.poly_points = []
349
+ self.sub_scatter.setData([], [])
350
+ self.sub_line.setData([], [])
351
+ print("Click to add polygon points. Right-click to finish.")
352
+ else:
353
+ print(f"Click to remove {mode}.")
354
+
355
+ def _reset_all_modes(self):
356
+ """Reset all drawing and removing modes."""
357
+ for mode in self.drawing_modes:
358
+ self.drawing_modes[mode] = False
359
+ for mode in self.removing_modes:
360
+ self.removing_modes[mode] = False
361
+
362
+ def _finish_mode(self):
363
+ """Finish current drawing/removing mode."""
364
+ self._reset_all_modes()
365
+ self.main_view.setCursor(QtCore.Qt.CursorShape.PointingHandCursor)
366
+ self._clear_redo_stack()
367
+
368
+ def _mouse_clicked(self, event, fill_array: np.ndarray, temp_mask: np.ndarray) -> None:
369
+ """Handle mouse clicks for drawing shapes."""
370
+ if self.drawing_modes['poly'] or self.removing_modes['poly']:
371
+ self._handle_polygon_click(event, fill_array, temp_mask)
372
+ elif self.drawing_modes['seed']:
373
+ self._handle_seed_click(event, fill_array, temp_mask)
374
+ elif any(self.drawing_modes.values()) or any(self.removing_modes.values()):
375
+ self._handle_shape_click(event, fill_array, temp_mask)
376
+
377
+ def _handle_polygon_click(self, event, fill_array: np.ndarray, temp_mask: np.ndarray):
378
+ """Handle polygon drawing clicks."""
379
+ is_adding = self.drawing_modes['poly']
380
+ scatter = self.add_scatter if is_adding else self.sub_scatter
381
+ line = self.add_line if is_adding else self.sub_line
382
+
383
+ if event.button() == QtCore.Qt.MouseButton.LeftButton:
384
+ pos = event.scenePos()
385
+ if self.main_view.sceneBoundingRect().contains(pos):
386
+ mouse_point = self.main_view.mapSceneToView(pos)
387
+ self.poly_points.append([mouse_point.x(), mouse_point.y()])
388
+ scatter.setData([p[0] for p in self.poly_points], [p[1] for p in self.poly_points])
389
+ if len(self.poly_points) > 1:
390
+ line.setData([p[0] for p in self.poly_points], [p[1] for p in self.poly_points])
391
+
392
+ elif event.button() == QtCore.Qt.MouseButton.RightButton:
393
+ self._finish_polygon_drawing(is_adding, fill_array, temp_mask)
394
+
395
+
396
+ def _draw_seed_roi(self, center_pos, fill_array, temp_mask):
397
+ """
398
+ Draw or redraw the seed ROI with current subset_size.
399
+ center_pos: QPointF in scene coordinates. If None, uses previous ROI center.
400
+ """
401
+ if hasattr(self, 'seed_roi') and self.seed_roi is not None:
402
+ # Save old center
403
+ old_rect = self.seed_roi.pos()
404
+ self.main_view.removeItem(self.seed_roi)
405
+ if center_pos is None:
406
+ center_pos = QtCore.QPointF(old_rect.x() + self.subset_size / 2,
407
+ old_rect.y() + self.subset_size / 2)
408
+
409
+ if center_pos is None:
410
+ # No previous position; nothing to draw
411
+ return
412
+
413
+ x = math.floor(center_pos.x() - self.subset_size / 2)
414
+ y = math.floor(center_pos.y() - self.subset_size / 2)
415
+
416
+ seed_roi = pg.RectROI(
417
+ [x, y], [self.subset_size, self.subset_size],
418
+ pen=pg.mkPen('y', width=3),
419
+ hoverPen=pg.mkPen('b', width=3),
420
+ handlePen='#0000',
421
+ handleHoverPen='#0000'
422
+ )
423
+
424
+ # Remove all handles to make it non-interactive
425
+ for handle in seed_roi.getHandles():
426
+ seed_roi.removeHandle(handle)
427
+
428
+ self.main_view.addItem(seed_roi)
429
+ self.seed_roi = seed_roi#
430
+ self.seed_roi.sigRegionChanged.connect(lambda: self._redraw_fill_layer(fill_array, temp_mask))
431
+ self._redraw_fill_layer(fill_array, temp_mask)
432
+
433
+ def _handle_seed_click(self, event, fill_array, temp_mask):
434
+ """Handle seed location clicks."""
435
+
436
+ if event.button() != QtCore.Qt.MouseButton.LeftButton:
437
+ return
438
+
439
+ pos = event.scenePos()
440
+ start_point = self.main_view.mapSceneToView(pos)
441
+
442
+ self._draw_seed_roi(start_point, fill_array, temp_mask)
443
+ self._finish_mode()
444
+
445
+ def _handle_shape_click(self, event, fill_array, temp_mask):
446
+ """Handle rectangle and circle drawing clicks."""
447
+ if event.button() != QtCore.Qt.MouseButton.LeftButton:
448
+ return
449
+
450
+ pos = event.scenePos()
451
+ start_point = self.main_view.mapSceneToView(pos)
452
+
453
+ # Determine shape type and add/remove mode
454
+ shape_type = None
455
+ is_adding = True
456
+
457
+ for mode in ['rect', 'circle']:
458
+ if self.drawing_modes[mode]:
459
+ shape_type = mode
460
+ is_adding = True
461
+ break
462
+ elif self.removing_modes[mode]:
463
+ shape_type = mode
464
+ is_adding = False
465
+ break
466
+
467
+ if shape_type:
468
+ roi = self._create_shape_roi(shape_type, start_point, is_adding)
469
+ self._add_roi_to_scene(roi, is_adding, fill_array, temp_mask)
470
+ self._finish_mode()
471
+
472
+ def _create_shape_roi(self, shape_type, start_point, is_adding):
473
+ """Create ROI object for rectangle or circle."""
474
+ pen = pg.mkPen('g', width=4) if is_adding else pg.mkPen('r', width=4)
475
+ hover_pen = pg.mkPen('b', width=4)
476
+ handle_pen = pg.mkPen('b', width=4)
477
+
478
+ if shape_type == 'rect':
479
+ roi = pg.RectROI(
480
+ start_point, [self.height/6, self.width/6],
481
+ pen=pen, hoverPen=hover_pen, handlePen=handle_pen, handleHoverPen=hover_pen
482
+ )
483
+ roi.addScaleHandle([1, 0], [0.0, 1.0])
484
+ roi.addScaleHandle([0, 1], [1.0, 0.0])
485
+ roi.addScaleHandle([0, 0], [1.0, 1.0])
486
+ roi.addTranslateHandle([0.5, 0.5])
487
+
488
+ elif shape_type == 'circle':
489
+ x = start_point.x() - self.width / 10
490
+ y = start_point.y() - self.width / 10
491
+ roi = pg.CircleROI(
492
+ [x, y], radius=self.width/10,
493
+ pen=pen, hoverPen=hover_pen, handlePen=handle_pen, handleHoverPen=hover_pen
494
+ )
495
+ roi.addTranslateHandle([0.5, 0.5])
496
+
497
+ # Style handles
498
+ for handle in roi.getHandles():
499
+ handle.radius = 10
500
+ handle.buildPath()
501
+ handle.update()
502
+
503
+ return roi
504
+
505
+ def _add_roi_to_scene(self, roi, is_adding, fill_array: np.ndarray, temp_mask: np.ndarray):
506
+ """Add ROI to scene and lists."""
507
+ self.roi_list.append(roi)
508
+ self.add_list.append(is_adding)
509
+ self.main_view.addItem(roi)
510
+ roi.sigRegionChanged.connect(lambda: self._redraw_fill_layer(fill_array, temp_mask))
511
+ self._redraw_fill_layer(fill_array, temp_mask)
512
+ self._update_button_states()
513
+
514
+ def _finish_polygon_drawing(self, is_adding, fill_array: np.ndarray, temp_mask: np.ndarray):
515
+ """Finish polygon drawing."""
516
+ if len(self.poly_points) >= 3:
517
+ pen = pg.mkPen('g', width=4) if is_adding else pg.mkPen('r', width=4)
518
+ hover_pen = pg.mkPen('b', width=4)
519
+ handle_pen = pg.mkPen('b', width=4)
520
+
521
+ roi = pg.PolyLineROI(
522
+ self.poly_points, closed=True,
523
+ pen=pen, hoverPen=hover_pen, handlePen=handle_pen, handleHoverPen=hover_pen
524
+ )
525
+
526
+ for handle in roi.getHandles():
527
+ handle.radius = 10
528
+ handle.buildPath()
529
+ handle.update()
530
+
531
+ self._add_roi_to_scene(roi, is_adding, fill_array, temp_mask)
532
+ print("Polygon added.")
533
+ else:
534
+ print("Need at least 3 points.")
535
+
536
+ # Clean up
537
+ self.poly_points = []
538
+ scatter = self.add_scatter if is_adding else self.sub_scatter
539
+ line = self.add_line if is_adding else self.sub_line
540
+ scatter.setData([], [])
541
+ line.setData([], [])
542
+ self._finish_mode()
543
+
544
+ def _redraw_fill_layer(self, fill_array: np.ndarray, temp_mask: np.ndarray) -> None:
545
+ """Redraw the fill layer based on current ROIs."""
546
+
547
+ has_seed = hasattr(self, 'seed_roi') and self.seed_roi is not None
548
+
549
+ if not self.roi_list and not has_seed:
550
+ fill_array.fill(0)
551
+ temp_mask.fill(False)
552
+ self.fill_layer.setImage(fill_array)
553
+ return
554
+
555
+ temp_mask.fill(False)
556
+
557
+ for roi, is_adding in zip(self.roi_list, self.add_list):
558
+ if isinstance(roi, pg.RectROI):
559
+ self._apply_rect_mask(roi, is_adding, temp_mask)
560
+ elif isinstance(roi, pg.CircleROI):
561
+ self._apply_circle_mask(roi, is_adding, temp_mask)
562
+ elif isinstance(roi, pg.PolyLineROI):
563
+ self._apply_poly_mask(roi, is_adding, temp_mask)
564
+
565
+
566
+
567
+ fill_array[:, :, 0] = 0
568
+ fill_array[:, :, 1] = 255
569
+ fill_array[:, :, 2] = 0
570
+ #fill_array[:, :, 3] = np.flip(temp_mask,axis=0) * 80
571
+ fill_array[:, :, 3] = temp_mask * 80
572
+
573
+ # Yellow fill for seed ROI
574
+ if has_seed:
575
+ pos = self.seed_roi.pos()
576
+ size = self.seed_roi.size()
577
+ x, y = int(pos[0]), int(pos[1])
578
+ w, h = int(size[0]), int(size[1])
579
+
580
+ # Clamp to image bounds
581
+ x1 = max(0, x)
582
+ y1 = max(0, y)
583
+ x2 = min(self.width, x + w)
584
+ y2 = min(self.height, y + h)
585
+
586
+ w = max(0, x2 - x1)
587
+ h = max(0, y2 - y1)
588
+
589
+ if w > 0 and h > 0:
590
+ # Yellow = Red + Green
591
+ fill_array[y1:y1+h, x1:x1+w, 0] = 255 # Red
592
+ fill_array[y1:y1+h, x1:x1+w, 1] = 255 # Green
593
+ fill_array[y1:y1+h, x1:x1+w, 2] = 0 # Blue
594
+ fill_array[y1:y1+h, x1:x1+w, 3] = 120 # Alpha (more opaque than green)
595
+
596
+ self.fill_layer.setImage(fill_array, autoLevels=False, axisOrder='row-major')
597
+
598
+ def _apply_rect_mask(self, roi, is_adding, temp_mask: np.ndarray):
599
+ """Apply rectangle mask to temp_mask."""
600
+ pos = roi.pos()
601
+ size = roi.size()
602
+ x, y = int(pos[0]), int(pos[1])
603
+ w, h = int(size[0]), int(size[1])
604
+
605
+ # Clamp to image bounds
606
+ x1 = max(0, x)
607
+ y1 = max(0, y)
608
+ x2 = min(self.width, x + w)
609
+ y2 = min(self.height, y + h)
610
+
611
+
612
+ # Compute clipped width/height
613
+ w = max(0, x2 - x1)
614
+ h = max(0, y2 - y1)
615
+ # print(f"orig: ({x},{y}), w,h: ({w},{h})")
616
+ # print(f"top_left: ({x1},{y1}), bottom_right: ({x2},{y2}) w,h: ({w},{h})")
617
+ if w > 0 and h > 0:
618
+ temp_mask[y1:y1+h, x1:x1+w] = is_adding
619
+
620
+ def _apply_circle_mask(self, roi, is_adding, temp_mask: np.ndarray):
621
+ """Apply circle mask to temp_mask."""
622
+ pos = roi.pos()
623
+ size = roi.size()
624
+ cx, cy = pos[0] + size[0]/2, pos[1] + size[1]/2
625
+ rx, ry = size[0]/2, size[1]/2
626
+
627
+ y_coords, x_coords = np.ogrid[:temp_mask.shape[0], :temp_mask.shape[1]]
628
+ circle_mask = ((x_coords - cx)/rx)**2 + ((y_coords - cy)/ry)**2 <= 1
629
+
630
+ if is_adding:
631
+ temp_mask |= circle_mask
632
+ else:
633
+ temp_mask &= ~circle_mask
634
+
635
+ def _apply_poly_mask(self, roi, is_adding, temp_mask: np.ndarray):
636
+ """Apply polygon mask to temp_mask."""
637
+ points = roi.getState()['points']
638
+ pos = roi.pos()
639
+
640
+ if len(points) < 3:
641
+ return
642
+
643
+ vertices = np.array([[p[0]+pos[0], p[1]+pos[1]] for p in points], dtype=np.int32)
644
+ mask = np.zeros_like(temp_mask, dtype=np.uint8)
645
+ cv2.fillPoly(mask, [vertices], 1)
646
+
647
+ if is_adding:
648
+ temp_mask |= mask.astype(bool)
649
+ else:
650
+ temp_mask &= ~mask.astype(bool)
651
+
652
+ def _update_button_states(self):
653
+ """Update the enabled state of undo and redo buttons."""
654
+ self.buttons['undo_prev'].setEnabled(len(self.roi_list) > 0)
655
+ self.buttons['redo_prev'].setEnabled(len(self.undo_list) > 0)
656
+
657
+ def _clear_redo_stack(self):
658
+ """Clear the redo stack when new shapes are added."""
659
+ self.undo_list = []
660
+ self._update_button_states()
661
+
662
+ def _undo_last(self, fill_array: np.ndarray, temp_mask: np.ndarray):
663
+ """Undo the last ROI operation."""
664
+ if self.roi_list:
665
+ roi = self.roi_list.pop()
666
+ add_flag = self.add_list.pop()
667
+ self.main_view.removeItem(roi)
668
+ self.undo_list.append((roi, add_flag))
669
+ self._redraw_fill_layer(fill_array, temp_mask)
670
+ self._update_button_states()
671
+
672
+ def _redo_last(self, fill_array: np.ndarray, temp_mask: np.ndarray):
673
+ """Redo the last undone ROI operation."""
674
+ if self.undo_list:
675
+ roi, add_flag = self.undo_list.pop()
676
+ self.roi_list.append(roi)
677
+ self.add_list.append(add_flag)
678
+ self.main_view.addItem(roi)
679
+ roi.sigRegionChanged.connect(lambda: self._redraw_fill_layer(fill_array, temp_mask))
680
+ self._redraw_fill_layer(fill_array, temp_mask)
681
+ self._update_button_states()
682
+
683
+ def _save_interactive_roi(self) -> None:
684
+ """Save the current ROI to a YAML file. This only works with the interactive GUI."""
685
+ filename, _ = QtWidgets.QFileDialog.getSaveFileName(self.main_window, 'Save ROI', 'roi_interactive.yaml', filter='YAML Files (*.yaml)')
686
+
687
+ if filename:
688
+
689
+ # Ensure extension is added if user doesn't include it
690
+ if filename and not filename.endswith('.yaml'):
691
+ filename += '.yaml'
692
+
693
+ print("Saving to file:", filename)
694
+ serialized = [
695
+ self._get_roi_data(roi, add)
696
+ for roi, add in zip(self.roi_list, self.add_list)
697
+ ]
698
+
699
+ # add ROI to serialized data
700
+ if hasattr(self, 'seed_roi'):
701
+ self._finalize_seed_selection()
702
+ seed_data = {
703
+ 'type': 'SeedROI',
704
+ 'pos': [self.seed[0], self.seed[1]],
705
+ 'size': [self.subset_size, self.subset_size],
706
+ 'add': True
707
+ }
708
+ serialized.append(seed_data)
709
+
710
+ with open(filename, 'w') as f:
711
+ yaml.dump(serialized, f, sort_keys=False)
712
+
713
+ def _open_interactive_roi(self, fill_layer: np.ndarray, temp_mask: np.ndarray):
714
+ """Open ROI from a YAML file. This only works with the interactive GUI."""
715
+ filename, _ = QtWidgets.QFileDialog.getOpenFileName(
716
+ self.main_window, 'Open ROI', filter='YAML Files (*.yaml)'
717
+ )
718
+ if filename:
719
+ with open(filename, 'r') as f:
720
+ data = yaml.safe_load(f)
721
+
722
+ # Clear existing ROIs
723
+ for roi in self.roi_list:
724
+ self.main_view.removeItem(roi)
725
+ self.roi_list = []
726
+ self.add_list = []
727
+
728
+ self.seed_roi = None # Clear existing seed
729
+
730
+ for entry in data:
731
+ if entry.get('type') == 'SeedROI':
732
+ # Restore the seed ROI
733
+ x, y = entry['pos']
734
+ #y = self.height - y # convert to graphics coordinates
735
+ w,h = entry.get('size', [21, 21]) # fallback default
736
+ #y = self.width-y
737
+ print(x,y,w,h)
738
+ self.seed_roi = pg.RectROI(
739
+ [x, y], [w, h],
740
+ pen=pg.mkPen('b', width=3),
741
+ hoverPen=pg.mkPen('y', width=3),
742
+ handlePen='#0000',
743
+ handleHoverPen='#0000'
744
+ )
745
+ self.main_view.addItem(self.seed_roi)
746
+
747
+ else:
748
+ # Restore standard ROI
749
+ roi = self._create_roi_from_data(entry)
750
+ self.roi_list.append(roi)
751
+ self.add_list.append(entry['add'])
752
+ self.main_view.addItem(roi)
753
+ roi.sigRegionChanged.connect(lambda: self._redraw_fill_layer(fill_layer, temp_mask))
754
+
755
+ self._redraw_fill_layer(fill_layer, temp_mask)
756
+ self._update_button_states()
757
+
758
+ def _create_roi_from_data(self, entry):
759
+ """Create ROI object from saved data."""
760
+ roi_type = entry['type']
761
+ is_adding = entry['add']
762
+
763
+ pen = pg.mkPen('g', width=4) if is_adding else pg.mkPen('r', width=4)
764
+ hover_pen = pg.mkPen('b', width=4)
765
+ handle_pen = pg.mkPen('b', width=4)
766
+
767
+ if roi_type == 'RectROI':
768
+
769
+ x,y = entry['pos']
770
+ w,h = entry.get('size')
771
+ roi = pg.RectROI([x,y], [w,h], pen=pen,
772
+ hoverPen=hover_pen, handlePen=handle_pen,
773
+ handleHoverPen=hover_pen)
774
+
775
+ roi.addScaleHandle([1, 0], [0.0, 1.0])
776
+ roi.addScaleHandle([0, 1], [1.0, 0.0])
777
+ roi.addScaleHandle([0, 0], [1.0, 1.0])
778
+ roi.addTranslateHandle([0.5, 0.5])
779
+
780
+ elif roi_type == 'CircleROI':
781
+ x,y = entry['pos']
782
+ w,h = entry.get('size')
783
+ x = x-w/2.0
784
+ y = y-h/2.0
785
+ roi = pg.CircleROI([x,y], [w,h], pen=pen,
786
+ hoverPen=hover_pen, handlePen=handle_pen,
787
+ handleHoverPen=hover_pen)
788
+ roi.addTranslateHandle([0.5, 0.5])
789
+
790
+ elif roi_type == 'PolyLineROI':
791
+ points = [QtCore.QPointF(p[0], p[1]) for p in entry['points']]
792
+ roi = pg.PolyLineROI(points, closed=True,pen=pen,
793
+ hoverPen=hover_pen, handlePen=handle_pen,
794
+ handleHoverPen=hover_pen)
795
+
796
+ else:
797
+ raise TypeError(f"Unsupported ROI type: {roi_type}")
798
+
799
+ #update handle sizes
800
+ for handle in roi.getHandles():
801
+ handle.radius = 10
802
+ handle.buildPath()
803
+ handle.update()
804
+
805
+ return roi
806
+
807
+ def _finish(self):
808
+ """Finish ROI selection and close the GUI, with a check for empty seed."""
809
+
810
+ self._finalize_seed_selection()
811
+
812
+ if not self.seed:
813
+ reply = QtWidgets.QMessageBox.question(
814
+ self.main_window,
815
+ "Exit Confirmation",
816
+ "No Seed location has been selected for reliability guided DIC. Are you sure you want to continue?",
817
+ QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No,
818
+ QtWidgets.QMessageBox.StandardButton.No
819
+ )
820
+ if reply == QtWidgets.QMessageBox.StandardButton.No:
821
+ return
822
+
823
+ self.main_window.close()
824
+ pg.QtWidgets.QApplication.quit()
825
+
826
+
827
+
828
+ def _finalize_seed_selection(self) -> None:
829
+ """Process the final mask and seed location."""
830
+ #mask = np.flipud(temp_mask.T)
831
+
832
+ if hasattr(self, 'seed_roi'):
833
+ pos = self.seed_roi.pos()
834
+ x = int(np.floor(pos.x()))
835
+ y = int(np.floor(pos.y()))
836
+ self.seed = [x, y]
837
+
838
+ #if not mask[y, x]:
839
+ # raise ValueError(f"Seed location [{x}, {y}] is not within the mask")
840
+ #print(f"Final seed location: [{x}, {y}]")
841
+
842
+ def _get_roi_data(self, roi_element, add: bool):
843
+ """Extract data from ROI element for serialization."""
844
+ if isinstance(roi_element, pg.RectROI):
845
+ print('getting rect:', roi_element.pos(), roi_element.size())
846
+ return {
847
+ 'type': 'RectROI',
848
+ 'pos': [float(roi_element.pos().x()), roi_element.pos().y()],
849
+ 'size': [float(roi_element.size().x()), float(roi_element.size().y())],
850
+ 'add': bool(add)
851
+ }
852
+ elif isinstance(roi_element, pg.CircleROI):
853
+ return {
854
+ 'type': 'CircleROI',
855
+ 'pos': [float(roi_element.pos().x())+float(roi_element.size().x())/2.0,float(roi_element.pos().y())+float(roi_element.size().y())/2.0],
856
+ 'size': [float(roi_element.size().x()), float(roi_element.size().y())],
857
+ 'add': bool(add)
858
+ }
859
+ elif isinstance(roi_element, pg.PolyLineROI):
860
+ handle_pos = roi_element.getLocalHandlePositions()
861
+ points = [[float(p[1].x()), float(p[1].y())] for p in handle_pos]
862
+ return {
863
+ 'type': 'PolyLineROI',
864
+ 'points': points,
865
+ 'add': bool(add)
866
+ }
867
+ else:
868
+ raise TypeError(f"Unsupported ROI type: {type(roi_element)}")
869
+
870
+
871
+ def reset_mask(self):
872
+ """
873
+ Completely resets the roi mask to 0s.
874
+ """
875
+ self.mask[:] = False;
876
+
877
+
878
+
879
+ def rect_boundary(self, left: int, right: int, top: int, bottom: int) -> None:
880
+ """
881
+ Defines a central rectangular region of interest (ROI) excluding
882
+ surrounding pixels defined by input arguments"
883
+
884
+ Parameters
885
+ ----------
886
+ left (int): Number of px to exclude from left edge.
887
+ right (int): Number of px to exclude from the right edge.
888
+ top (int): Number of px to exclude from the top edge.
889
+ bottom (int): Number of px to exclude from the bottom edge.
890
+ """
891
+ self.reset_mask()
892
+ self.mask[bottom:(self.ref_image.shape[0]-top), left:(self.ref_image.shape[1])-right] = 255
893
+ self.__roi_selected = True
894
+
895
+ def rect_region(self, x: int, y: int, size_x: int, size_y: int ) -> None:
896
+
897
+ top = max(0, y)
898
+ bottom = min(self.ref_image.shape[0],y+size_y)
899
+ left = max(0, x)
900
+ right = min(self.ref_image.shape[1],x+size_x)
901
+
902
+ # Apply the mask in the subset region
903
+ self.mask[top:bottom, left:right] = 255
904
+ self.__roi_selected = True
905
+
906
+
907
+
908
+
909
+ def save_image(self, filename: str | Path) -> None:
910
+ """
911
+ Save the ROI overlayed over the reference image in .tiff image format.
912
+
913
+ Parameters
914
+ ----------
915
+ filename : str or pathlib.Path
916
+ Filename of image
917
+
918
+ Raises
919
+ ------
920
+ ValueError
921
+ If no ROI has been selected
922
+ """
923
+ if not self.__roi_selected:
924
+ raise ValueError("No ROI selected with \'interactive_selection\', \'rect_boundary\', \'read_array\' or \'rect_region\'. ")
925
+
926
+ overlay = self.ref_image.copy()
927
+ overlay[self.mask] = (0, 255, 0)
928
+ result = cv2.addWeighted(self.ref_image, 0.6, overlay, 0.4, 0)
929
+ cv2.imwrite(str(filename), result)
930
+
931
+
932
+
933
+
934
+ def save_array(self, filename: str | Path, binary: bool=False) -> None:
935
+ """
936
+ Save the ROI mask as a numpy binary or text file.
937
+
938
+ Parameters
939
+ ----------
940
+ filename : str or pathlib.Path
941
+ filename given to saved ROI mask
942
+ binary : bool
943
+ If True, saves from as a .npy binary file.
944
+ If False, saves to a space delimited text file.
945
+
946
+ Raises
947
+ ------
948
+ ValueError
949
+ If no ROI has been selected.
950
+ """
951
+ if not self.__roi_selected:
952
+ raise ValueError("No ROI selected with \'interactive_selection\', \'rect_boundary\', \'read_array\' or \'rect_region\'. ")
953
+
954
+ if binary:
955
+ np.save(filename, self.mask)
956
+ else:
957
+ np.savetxt(filename, self.mask, fmt='%d', delimiter=' ')
958
+
959
+
960
+ def read_array(self, filename: str | Path, binary: bool = False) -> None:
961
+ """
962
+ Load the ROI mask from a binary or text file and store it in `self.mask`.
963
+
964
+ Parameters
965
+ ----------
966
+ filename : str or pathlib.Path
967
+ Path to the file to load.
968
+ binary : bool
969
+ If True, loads from a .npy binary file. If False, loads from a text file.
970
+
971
+ Raises
972
+ ------
973
+ FileNotFoundError
974
+ If the specified file does not exist.
975
+ ValueError
976
+ If the loaded data is not a valid mask.
977
+ """
978
+
979
+ if not os.path.exists(filename):
980
+ raise FileNotFoundError(f"File '{filename}' does not exist.")
981
+
982
+ if binary:
983
+ self.mask = np.load(filename)
984
+ else:
985
+ self.mask = np.loadtxt(filename, dtype=bool, delimiter=' ')
986
+
987
+ # Optional: check if the loaded data is a proper binary mask (0s and 1s)
988
+ if not np.isin(self.mask, [0, 1]).all():
989
+ raise ValueError("Loaded ROI mask contains values other than 0 and 1.")
990
+
991
+ self.__roi_selected = True
992
+
993
+
994
+ def save_yaml(self, filename: str | Path) -> None:
995
+ """
996
+ Save the current ROI to a YAML file. This only works with the after having run the interactive GUI.
997
+
998
+ Parameters
999
+ ----------
1000
+ filename : str or pathlib.Path
1001
+ Filename of the YAML file to save the ROI data.
1002
+
1003
+ Raises
1004
+ ------
1005
+ ValueError
1006
+ If no ROI has been selected.
1007
+ """
1008
+
1009
+ if filename:
1010
+
1011
+ # Ensure extension is added if user doesn't include it
1012
+ if filename and not filename.endswith('.yaml'):
1013
+ filename += '.yaml'
1014
+
1015
+ print("Saving to file:", filename)
1016
+ serialized = [
1017
+ self._get_roi_data(roi, add)
1018
+ for roi, add in zip(self.roi_list, self.add_list)
1019
+ ]
1020
+
1021
+ # add ROI to serialized data
1022
+ if hasattr(self, 'seed_roi'):
1023
+ self._finalize_seed_selection()
1024
+ seed_data = {
1025
+ 'type': 'SeedROI',
1026
+ 'pos': [self.seed[0], self.seed[1]],
1027
+ 'size': [self.subset_size, self.subset_size],
1028
+ 'add': True
1029
+ }
1030
+ serialized.append(seed_data)
1031
+
1032
+ with open(filename, 'w') as f:
1033
+ yaml.dump(serialized, f, sort_keys=False)
1034
+
1035
+ def read_yaml(self, filename: str | Path) -> None:
1036
+ """
1037
+ Load the ROI from a YAML file and restore the state of the GUI.
1038
+ This method will clear existing ROIs and restore the state from the YAML file.
1039
+
1040
+ Parameters
1041
+ ----------
1042
+ filename : str or pathlib.Path
1043
+ Path to the YAML file containing the ROI data.
1044
+
1045
+ Raises
1046
+ ------
1047
+ FileNotFoundError
1048
+ If the specified file does not exist.
1049
+ ValueError
1050
+ If the loaded data is not a valid ROI format.
1051
+ """
1052
+
1053
+ # need to create a temp qapplication so I can import the ROI.
1054
+ self.__roi_selected = True
1055
+
1056
+ # Initialize GUI
1057
+ fill_array, temp_mask = self._setup_gui()
1058
+ self._connect_signals(fill_array, temp_mask)
1059
+
1060
+ if filename:
1061
+ with open(filename, 'r') as f:
1062
+ data = yaml.safe_load(f)
1063
+
1064
+ self.roi_list = []
1065
+ self.add_list = []
1066
+
1067
+ self.seed_roi = None # Clear existing seed
1068
+
1069
+ for entry in data:
1070
+ if entry.get('type') == 'SeedROI':
1071
+ # Restore the seed ROI
1072
+ x, y = entry['pos']
1073
+ #y = self.width-y
1074
+ size = entry.get('size', [10, 10]) # fallback default
1075
+ self.seed_roi = pg.RectROI(
1076
+ [x, y], size,
1077
+ pen=pg.mkPen('y', width=3),
1078
+ hoverPen=pg.mkPen('b', width=3),
1079
+ handlePen='#0000',
1080
+ handleHoverPen='#0000'
1081
+ )
1082
+ self.main_view.addItem(self.seed_roi)
1083
+
1084
+ else:
1085
+ # Restore standard ROI
1086
+ roi = self._create_roi_from_data(entry)
1087
+ self.roi_list.append(roi)
1088
+ self.add_list.append(entry['add'])
1089
+ self.main_view.addItem(roi)
1090
+ roi.sigRegionChanged.connect(lambda: self._redraw_fill_layer(fill_array, temp_mask))
1091
+
1092
+ self._redraw_fill_layer(fill_array, temp_mask)
1093
+ self._update_button_states()
1094
+ self._finalize_seed_selection()
1095
+
1096
+ #finalize mask
1097
+ self.mask = temp_mask
1098
+
1099
+
1100
+
1101
+
1102
+ def show_image(self) -> None:
1103
+ """
1104
+ Displays the current mask in grayscale.
1105
+
1106
+ Raises
1107
+ ------
1108
+ ValueError: If no ROI is selected.
1109
+ """
1110
+
1111
+ # Convert grayscale image to 3-channel if needed
1112
+ if self.ref_image.ndim == 2:
1113
+ ref_image_color = cv2.cvtColor(self.ref_image.astype(np.uint8), cv2.COLOR_GRAY2BGR)
1114
+ else:
1115
+ ref_image_color = self.ref_image
1116
+
1117
+ # Create a green mask image
1118
+ if self.ref_image.ndim == 3:
1119
+ green_mask = np.zeros_like(self.ref_image)
1120
+ elif self.ref_image.ndim == 2:
1121
+ h, w = self.ref_image.shape
1122
+ green_mask = np.zeros((h, w, 3), dtype=self.ref_image.dtype)
1123
+ else:
1124
+ raise ValueError(f"Unsupported image shape: {self.ref_image.shape}")
1125
+
1126
+ # Apply the green mask
1127
+ green_mask[self.mask, :] = [0, 255, 0]
1128
+
1129
+ # Blend the original image and the green mask
1130
+ blended = ref_image_color.astype(float) * 0.7 + green_mask.astype(float) * 0.3
1131
+ blended = blended.astype(np.uint8)
1132
+
1133
+ # Display using Matplotlib
1134
+ plt.figure()
1135
+ plt.imshow(blended)
1136
+ plt.axis('off')
1137
+ plt.tight_layout()
1138
+ plt.show()
1139
+
1140
+
1141
+ class CustomMainWindow(QtWidgets.QWidget):
1142
+
1143
+ def __init__(self, dic_obj=None, *args, **kwargs):
1144
+ super().__init__(*args, **kwargs)
1145
+ self.dic_obj = dic_obj
1146
+
1147
+ def closeEvent(self, event):
1148
+ if self.dic_obj:
1149
+ # Force finalization before checking seed
1150
+ self.dic_obj._finalize_seed_selection()
1151
+
1152
+ if not self.dic_obj.seed:
1153
+ reply = QtWidgets.QMessageBox.question(
1154
+ self,
1155
+ "Exit Confirmation",
1156
+ "No Seed location has been selected for reliability guided DIC. Are you sure you want to continue?",
1157
+ QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No,
1158
+ QtWidgets.QMessageBox.StandardButton.No
1159
+ )
1160
+ if reply == QtWidgets.QMessageBox.StandardButton.No:
1161
+ event.ignore()
1162
+ return
1163
+ event.accept()