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.
- include/eigen3/Eigen/Cholesky +45 -0
- include/eigen3/Eigen/CholmodSupport +48 -0
- include/eigen3/Eigen/Core +384 -0
- include/eigen3/Eigen/Dense +7 -0
- include/eigen3/Eigen/Eigen +2 -0
- include/eigen3/Eigen/Eigenvalues +60 -0
- include/eigen3/Eigen/Geometry +59 -0
- include/eigen3/Eigen/Householder +29 -0
- include/eigen3/Eigen/IterativeLinearSolvers +48 -0
- include/eigen3/Eigen/Jacobi +32 -0
- include/eigen3/Eigen/KLUSupport +41 -0
- include/eigen3/Eigen/LU +47 -0
- include/eigen3/Eigen/MetisSupport +35 -0
- include/eigen3/Eigen/OrderingMethods +70 -0
- include/eigen3/Eigen/PaStiXSupport +49 -0
- include/eigen3/Eigen/PardisoSupport +35 -0
- include/eigen3/Eigen/QR +50 -0
- include/eigen3/Eigen/QtAlignedMalloc +39 -0
- include/eigen3/Eigen/SPQRSupport +34 -0
- include/eigen3/Eigen/SVD +50 -0
- include/eigen3/Eigen/Sparse +34 -0
- include/eigen3/Eigen/SparseCholesky +37 -0
- include/eigen3/Eigen/SparseCore +69 -0
- include/eigen3/Eigen/SparseLU +50 -0
- include/eigen3/Eigen/SparseQR +36 -0
- include/eigen3/Eigen/StdDeque +27 -0
- include/eigen3/Eigen/StdList +26 -0
- include/eigen3/Eigen/StdVector +27 -0
- include/eigen3/Eigen/SuperLUSupport +64 -0
- include/eigen3/Eigen/UmfPackSupport +40 -0
- include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
- include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
- include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
- include/eigen3/Eigen/src/Core/Array.h +417 -0
- include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
- include/eigen3/Eigen/src/Core/Assign.h +90 -0
- include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
- include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
- include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
- include/eigen3/Eigen/src/Core/Block.h +448 -0
- include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
- include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
- include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
- include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
- include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
- include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
- include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
- include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
- include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
- include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
- include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
- include/eigen3/Eigen/src/Core/Dot.h +318 -0
- include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
- include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
- include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
- include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
- include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
- include/eigen3/Eigen/src/Core/IO.h +258 -0
- include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
- include/eigen3/Eigen/src/Core/Inverse.h +117 -0
- include/eigen3/Eigen/src/Core/Map.h +171 -0
- include/eigen3/Eigen/src/Core/MapBase.h +310 -0
- include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
- include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- include/eigen3/Eigen/src/Core/Matrix.h +565 -0
- include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
- include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
- include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
- include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
- include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
- include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
- include/eigen3/Eigen/src/Core/Product.h +191 -0
- include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
- include/eigen3/Eigen/src/Core/Random.h +218 -0
- include/eigen3/Eigen/src/Core/Redux.h +515 -0
- include/eigen3/Eigen/src/Core/Ref.h +381 -0
- include/eigen3/Eigen/src/Core/Replicate.h +142 -0
- include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
- include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
- include/eigen3/Eigen/src/Core/Reverse.h +217 -0
- include/eigen3/Eigen/src/Core/Select.h +164 -0
- include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
- include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- include/eigen3/Eigen/src/Core/Solve.h +188 -0
- include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
- include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
- include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
- include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
- include/eigen3/Eigen/src/Core/Stride.h +116 -0
- include/eigen3/Eigen/src/Core/Swap.h +68 -0
- include/eigen3/Eigen/src/Core/Transpose.h +464 -0
- include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
- include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
- include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
- include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
- include/eigen3/Eigen/src/Core/Visitor.h +381 -0
- include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
- include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
- include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
- include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
- include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
- include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
- include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
- include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
- include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
- include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
- include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
- include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
- include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
- include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
- include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
- include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
- include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
- include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
- include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
- include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
- include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
- include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
- include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
- include/eigen3/Eigen/src/Householder/Householder.h +176 -0
- include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
- include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- include/eigen3/Eigen/src/LU/Determinant.h +117 -0
- include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
- include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
- include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
- include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
- include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
- include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
- include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
- include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
- include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
- include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
- include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
- include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
- include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
- include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
- include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
- include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
- include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
- include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
- include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
- include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
- include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
- include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
- include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
- include/eigen3/Eigen/src/StlSupport/details.h +84 -0
- include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- include/eigen3/Eigen/src/misc/Image.h +82 -0
- include/eigen3/Eigen/src/misc/Kernel.h +79 -0
- include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
- include/eigen3/Eigen/src/misc/blas.h +440 -0
- include/eigen3/Eigen/src/misc/lapack.h +152 -0
- include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
- include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
- include/eigen3/signature_of_eigen3_matrix_library +1 -0
- include/eigen3/unsupported/Eigen/AdolcForward +159 -0
- include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
- include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
- include/eigen3/unsupported/Eigen/AutoDiff +46 -0
- include/eigen3/unsupported/Eigen/BVH +95 -0
- include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
- include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
- include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
- include/eigen3/unsupported/Eigen/EulerAngles +43 -0
- include/eigen3/unsupported/Eigen/FFT +419 -0
- include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
- include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
- include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
- include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
- include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
- include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
- include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
- include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
- include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
- include/eigen3/unsupported/Eigen/Polynomials +137 -0
- include/eigen3/unsupported/Eigen/Skyline +39 -0
- include/eigen3/unsupported/Eigen/SparseExtra +54 -0
- include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
- include/eigen3/unsupported/Eigen/Splines +35 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
- include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
- include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
- include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
- include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
- include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
- include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
- include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
- pyvale/__init__.py +23 -0
- pyvale/blender/__init__.py +23 -0
- pyvale/blender/blendercalibrationdata.py +17 -0
- pyvale/blender/blenderexceptions.py +8 -0
- pyvale/blender/blenderlightdata.py +26 -0
- pyvale/blender/blendermaterialdata.py +15 -0
- pyvale/blender/blenderrenderdata.py +35 -0
- pyvale/blender/blenderscene.py +493 -0
- pyvale/blender/blendertools.py +449 -0
- pyvale/calib/__init__.py +11 -0
- pyvale/calib/calibcpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/calib/calibdotdetect.py +510 -0
- pyvale/calib/calibparams.py +47 -0
- pyvale/calib/calibstereo.py +441 -0
- pyvale/calib/cpp/bindings.cpp +22 -0
- pyvale/calib/cpp/calibdotdetect.cpp +16 -0
- pyvale/calib/cpp/calibdotdetect.hpp +20 -0
- pyvale/calib/cpp/calibopt.cpp +347 -0
- pyvale/calib/cpp/calibopt.hpp +84 -0
- pyvale/calib/cpp/calibstereo.cpp +95 -0
- pyvale/calib/cpp/calibstereo.hpp +27 -0
- pyvale/common_cpp/__init__.py +5 -0
- pyvale/common_cpp/bindings.cpp +33 -0
- pyvale/common_cpp/common_cpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/common_cpp/defines.hpp +39 -0
- pyvale/common_cpp/dicsignalhandler.cpp +16 -0
- pyvale/common_cpp/dicsignalhandler.hpp +11 -0
- pyvale/common_cpp/pocketfft_hdronly.h +3744 -0
- pyvale/common_cpp/progressbar.hpp +107 -0
- pyvale/common_cpp/util.cpp +19 -0
- pyvale/common_cpp/util.hpp +72 -0
- pyvale/common_py/util.py +63 -0
- pyvale/data/DIC_Challenge_Star_Noise_Def.tiff +0 -0
- pyvale/data/DIC_Challenge_Star_Noise_Ref.tiff +0 -0
- pyvale/data/__init__.py +5 -0
- pyvale/data/cal_target.tiff +0 -0
- pyvale/data/calib.caldat +26 -0
- pyvale/data/case00_HEX20_out.e +0 -0
- pyvale/data/case00_HEX27_out.e +0 -0
- pyvale/data/case00_HEX8_out.e +0 -0
- pyvale/data/case00_TET10_out.e +0 -0
- pyvale/data/case00_TET14_out.e +0 -0
- pyvale/data/case00_TET4_out.e +0 -0
- pyvale/data/case16_d_out.e +0 -0
- pyvale/data/case16_out.e +0 -0
- pyvale/data/case17_out.e +0 -0
- pyvale/data/case18_d_out.e +0 -0
- pyvale/data/case18_out.e +0 -0
- pyvale/data/case26_out.e +0 -0
- pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff +0 -0
- pyvale/data/plate_hole_def0000.tiff +0 -0
- pyvale/data/plate_hole_def0001.tiff +0 -0
- pyvale/data/plate_hole_ref0000.tiff +0 -0
- pyvale/data/plate_rigid_def0000.tiff +0 -0
- pyvale/data/plate_rigid_def0001.tiff +0 -0
- pyvale/data/plate_rigid_def_25px.tiff +0 -0
- pyvale/data/plate_rigid_def_50px.tiff +0 -0
- pyvale/data/plate_rigid_ref0000.tiff +0 -0
- pyvale/dataset/__init__.py +7 -0
- pyvale/dataset/dataset.py +483 -0
- pyvale/dic/__init__.py +15 -0
- pyvale/dic/cpp/bindings.cpp +52 -0
- pyvale/dic/cpp/dicfourier.cpp +705 -0
- pyvale/dic/cpp/dicfourier.hpp +410 -0
- pyvale/dic/cpp/dicinterpolator.cpp +633 -0
- pyvale/dic/cpp/dicinterpolator.hpp +162 -0
- pyvale/dic/cpp/dicmain.cpp +214 -0
- pyvale/dic/cpp/dicmain.hpp +61 -0
- pyvale/dic/cpp/dicoptimizer.cpp +564 -0
- pyvale/dic/cpp/dicoptimizer.hpp +279 -0
- pyvale/dic/cpp/dicresults.cpp +239 -0
- pyvale/dic/cpp/dicresults.hpp +64 -0
- pyvale/dic/cpp/dicrg.cpp +55 -0
- pyvale/dic/cpp/dicrg.hpp +52 -0
- pyvale/dic/cpp/dicscanmethod.cpp +819 -0
- pyvale/dic/cpp/dicscanmethod.hpp +119 -0
- pyvale/dic/cpp/dicshapefunc.cpp +117 -0
- pyvale/dic/cpp/dicshapefunc.hpp +40 -0
- pyvale/dic/cpp/dicsubset.cpp +325 -0
- pyvale/dic/cpp/dicsubset.hpp +122 -0
- pyvale/dic/cpp/dicutil.cpp +108 -0
- pyvale/dic/cpp/dicutil.hpp +96 -0
- pyvale/dic/cuda/malloc.cu +99 -0
- pyvale/dic/cuda/malloc.hpp +17 -0
- pyvale/dic/dic2d.py +190 -0
- pyvale/dic/dic2dconv.py +6 -0
- pyvale/dic/dic2dcpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/dic/dicchecks.py +455 -0
- pyvale/dic/dicdataimport.py +402 -0
- pyvale/dic/dicregionofinterest.py +1163 -0
- pyvale/dic/dicresults.py +58 -0
- pyvale/examples/__init__.py +5 -0
- pyvale/examples/basicsensorsim/README.md +2 -0
- pyvale/examples/basicsensorsim/ex0_quickstart.py +139 -0
- pyvale/examples/basicsensorsim/ex1_scalar_sensors.py +240 -0
- pyvale/examples/basicsensorsim/ex2_vector_tensor_sensors.py +280 -0
- pyvale/examples/basicsensorsim/ex3_experiment_simulator.py +397 -0
- pyvale/examples/blenderimagedef/README.md +2 -0
- pyvale/examples/blenderimagedef/ex1_blender_scene2d.py +176 -0
- pyvale/examples/blenderimagedef/ex2_blender_imagedef2d.py +177 -0
- pyvale/examples/blenderimagedef/ex3_blender_scenestereo.py +205 -0
- pyvale/examples/blenderimagedef/ex4_blender_imagedefstereo.py +213 -0
- pyvale/examples/blenderimagedef/ex5_blender_calibstereo.py +190 -0
- pyvale/examples/dic/README.md +2 -0
- pyvale/examples/dic/ex1_region_of_interest.py +101 -0
- pyvale/examples/dic/ex2_plate_with_hole.py +155 -0
- pyvale/examples/dic/ex3_plate_with_hole_strain.py +99 -0
- pyvale/examples/dic/ex4_dic_blender.py +97 -0
- pyvale/examples/dic/ex5_dic_challenge.py +107 -0
- pyvale/examples/extsensorsim/README.md +2 -0
- pyvale/examples/extsensorsim/ex1_byosimdata.py +211 -0
- pyvale/examples/extsensorsim/ex2_meshfreesensors.py +174 -0
- pyvale/examples/extsensorsim/ex3a_scal2d.py +151 -0
- pyvale/examples/extsensorsim/ex3b_scal3d.py +150 -0
- pyvale/examples/extsensorsim/ex3c_vec2d.py +163 -0
- pyvale/examples/extsensorsim/ex3d_vec3d.py +169 -0
- pyvale/examples/extsensorsim/ex3e_tens2d.py +170 -0
- pyvale/examples/extsensorsim/ex3f_tens3d.py +198 -0
- pyvale/examples/extsensorsim/ex4a_basicerrs_scal2d.py +201 -0
- pyvale/examples/extsensorsim/ex4b_fielderrs_scal3d.py +197 -0
- pyvale/examples/extsensorsim/ex4c_angleerrs_vec2d.py +215 -0
- pyvale/examples/extsensorsim/ex4d_fieldlockerrs_vec3d.py +184 -0
- pyvale/examples/extsensorsim/ex4e_chainfielderrs_vec2d.py +233 -0
- pyvale/examples/extsensorsim/ex4f_caliberrs_scal2d.py +167 -0
- pyvale/examples/extsensorsim/ex4g_spatavgerrs_scal2d.py +146 -0
- pyvale/examples/extsensorsim/ex5a_expsim_thermmech2d.py +350 -0
- pyvale/examples/extsensorsim/ex5b_expsim_thermmech3d.py +358 -0
- pyvale/examples/genanalyticdata/ex1_1_scalarvisualisation.py +41 -0
- pyvale/examples/genanalyticdata/ex1_2_scalarcasebuild.py +43 -0
- pyvale/examples/genanalyticdata/ex2_1_analyticsensors.py +86 -0
- pyvale/examples/genanalyticdata/ex2_2_analyticsensors_nomesh.py +89 -0
- pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +84 -0
- pyvale/examples/mooseherder/README.md +2 -0
- pyvale/examples/mooseherder/ex0_create_moose_config.py +65 -0
- pyvale/examples/mooseherder/ex1a_modify_moose_input.py +71 -0
- pyvale/examples/mooseherder/ex1b_modify_gmsh_input.py +69 -0
- pyvale/examples/mooseherder/ex2a_run_moose_once.py +80 -0
- pyvale/examples/mooseherder/ex2b_run_gmsh_once.py +64 -0
- pyvale/examples/mooseherder/ex2c_run_both_once.py +114 -0
- pyvale/examples/mooseherder/ex3_run_moose_seq_para.py +157 -0
- pyvale/examples/mooseherder/ex4_run_gmsh-moose_seq_para.py +176 -0
- pyvale/examples/mooseherder/ex5_run_moose_paramulti.py +136 -0
- pyvale/examples/mooseherder/ex6_read_moose_exodus.py +163 -0
- pyvale/examples/mooseherder/ex7a_read_moose_herd_results.py +153 -0
- pyvale/examples/mooseherder/ex7b_read_multi_herd_results.py +116 -0
- pyvale/examples/mooseherder/ex7c_read_multi_gmshmoose_results.py +127 -0
- pyvale/examples/mooseherder/ex7d_readconfig_multi_gmshmoose_results.py +143 -0
- pyvale/examples/mooseherder/ex8_read_existing_sweep_output.py +72 -0
- pyvale/examples/rasterimagedef/ex_rastenp.py +194 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_oneframe.py +206 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_static_cypara.py +189 -0
- pyvale/examples/rasterimagedef/ex_rastercyth_static_pypara.py +219 -0
- pyvale/examples/visualisation/ex1_visualisation_options.py +111 -0
- pyvale/mooseherder/__init__.py +55 -0
- pyvale/mooseherder/directorymanager.py +408 -0
- pyvale/mooseherder/exceptions.py +10 -0
- pyvale/mooseherder/exodusloader.py +762 -0
- pyvale/mooseherder/gmshrunner.py +158 -0
- pyvale/mooseherder/inputmodifier.py +240 -0
- pyvale/mooseherder/mooseconfig.py +212 -0
- pyvale/mooseherder/mooseherd.py +539 -0
- pyvale/mooseherder/mooserunner.py +307 -0
- pyvale/mooseherder/outputloader.py +17 -0
- pyvale/mooseherder/simdata.py +93 -0
- pyvale/mooseherder/simloaderbyfield.py +211 -0
- pyvale/mooseherder/simloaderbytime.py +193 -0
- pyvale/mooseherder/simloadopts.py +55 -0
- pyvale/mooseherder/simloadtools.py +465 -0
- pyvale/mooseherder/simrunner.py +31 -0
- pyvale/mooseherder/simsaver.py +401 -0
- pyvale/mooseherder/sweeploader.py +358 -0
- pyvale/mooseherder/sweeptools.py +76 -0
- pyvale/sensorsim/__init__.py +86 -0
- pyvale/sensorsim/camera.py +147 -0
- pyvale/sensorsim/cameradata.py +72 -0
- pyvale/sensorsim/cameradata2d.py +84 -0
- pyvale/sensorsim/camerasensor.py +147 -0
- pyvale/sensorsim/camerastereo.py +217 -0
- pyvale/sensorsim/cameratools.py +484 -0
- pyvale/sensorsim/cython/rastercyth.c +32404 -0
- pyvale/sensorsim/cython/rastercyth.html +3392 -0
- pyvale/sensorsim/cython/rastercyth.py +684 -0
- pyvale/sensorsim/enums.py +16 -0
- pyvale/sensorsim/errordriftcalc.py +104 -0
- pyvale/sensorsim/errorintegrator.py +359 -0
- pyvale/sensorsim/errorrand.py +105 -0
- pyvale/sensorsim/errorsimulator.py +137 -0
- pyvale/sensorsim/errorsyscalib.py +93 -0
- pyvale/sensorsim/errorsysdep.py +197 -0
- pyvale/sensorsim/errorsysfield.py +383 -0
- pyvale/sensorsim/errorsysindep.py +209 -0
- pyvale/sensorsim/exceptions.py +14 -0
- pyvale/sensorsim/experimentsimio.py +94 -0
- pyvale/sensorsim/experimentsimulator.py +615 -0
- pyvale/sensorsim/experimentstats.py +115 -0
- pyvale/sensorsim/field.py +127 -0
- pyvale/sensorsim/fieldconverter.py +378 -0
- pyvale/sensorsim/fieldinterp.py +89 -0
- pyvale/sensorsim/fieldinterpmesh.py +119 -0
- pyvale/sensorsim/fieldinterppoints.py +93 -0
- pyvale/sensorsim/fieldsampler.py +110 -0
- pyvale/sensorsim/fieldscalar.py +94 -0
- pyvale/sensorsim/fieldtensor.py +150 -0
- pyvale/sensorsim/fieldtransform.py +388 -0
- pyvale/sensorsim/fieldvector.py +136 -0
- pyvale/sensorsim/generatorsrandom.py +420 -0
- pyvale/sensorsim/imagedef2d.py +577 -0
- pyvale/sensorsim/imagetools.py +137 -0
- pyvale/sensorsim/integratorfactory.py +240 -0
- pyvale/sensorsim/integratorquadrature.py +217 -0
- pyvale/sensorsim/integratorrectangle.py +165 -0
- pyvale/sensorsim/integratorspatial.py +89 -0
- pyvale/sensorsim/integratortype.py +43 -0
- pyvale/sensorsim/logger.py +23 -0
- pyvale/sensorsim/plotting_logs.py +22 -0
- pyvale/sensorsim/raster.py +31 -0
- pyvale/sensorsim/rastercy.py +107 -0
- pyvale/sensorsim/rasternp.py +627 -0
- pyvale/sensorsim/rasteropts.py +58 -0
- pyvale/sensorsim/renderer.py +47 -0
- pyvale/sensorsim/rendermesh.py +137 -0
- pyvale/sensorsim/renderscene.py +51 -0
- pyvale/sensorsim/sensorarray.py +178 -0
- pyvale/sensorsim/sensordata.py +74 -0
- pyvale/sensorsim/sensordescriptor.py +275 -0
- pyvale/sensorsim/sensorfactory.py +179 -0
- pyvale/sensorsim/sensorspoint.py +308 -0
- pyvale/sensorsim/sensortools.py +113 -0
- pyvale/sensorsim/simtools.py +300 -0
- pyvale/sensorsim/visualexpplotter.py +201 -0
- pyvale/sensorsim/visualimagedef.py +74 -0
- pyvale/sensorsim/visualimages.py +76 -0
- pyvale/sensorsim/visualopts.py +507 -0
- pyvale/sensorsim/visualsimanimator.py +111 -0
- pyvale/sensorsim/visualsimplotter.py +180 -0
- pyvale/sensorsim/visualsimsensors.py +343 -0
- pyvale/sensorsim/visualtools.py +136 -0
- pyvale/sensorsim/visualtraceanimator.py +77 -0
- pyvale/sensorsim/visualtraceplotter.py +296 -0
- pyvale/simcases/case00_HEX20.i +242 -0
- pyvale/simcases/case00_HEX27.i +242 -0
- pyvale/simcases/case00_HEX8.i +242 -0
- pyvale/simcases/case00_TET10.i +242 -0
- pyvale/simcases/case00_TET14.i +242 -0
- pyvale/simcases/case00_TET4.i +242 -0
- pyvale/simcases/case01.i +101 -0
- pyvale/simcases/case02.i +156 -0
- pyvale/simcases/case03.i +136 -0
- pyvale/simcases/case04.i +181 -0
- pyvale/simcases/case05.i +234 -0
- pyvale/simcases/case06.i +305 -0
- pyvale/simcases/case07.geo +135 -0
- pyvale/simcases/case07.i +87 -0
- pyvale/simcases/case08.geo +144 -0
- pyvale/simcases/case08.i +153 -0
- pyvale/simcases/case09.geo +204 -0
- pyvale/simcases/case09.i +87 -0
- pyvale/simcases/case10.geo +204 -0
- pyvale/simcases/case10.i +257 -0
- pyvale/simcases/case11.geo +337 -0
- pyvale/simcases/case11.i +147 -0
- pyvale/simcases/case12.geo +388 -0
- pyvale/simcases/case12.i +329 -0
- pyvale/simcases/case13.i +140 -0
- pyvale/simcases/case14.i +159 -0
- pyvale/simcases/case15.geo +337 -0
- pyvale/simcases/case15.i +150 -0
- pyvale/simcases/case16.geo +391 -0
- pyvale/simcases/case16.i +357 -0
- pyvale/simcases/case16_d.i +360 -0
- pyvale/simcases/case16_u.i +360 -0
- pyvale/simcases/case17.geo +138 -0
- pyvale/simcases/case17.i +144 -0
- pyvale/simcases/case18.i +271 -0
- pyvale/simcases/case18_d.i +271 -0
- pyvale/simcases/case18_u.i +271 -0
- pyvale/simcases/case19.geo +252 -0
- pyvale/simcases/case19.i +99 -0
- pyvale/simcases/case20.geo +252 -0
- pyvale/simcases/case20.i +250 -0
- pyvale/simcases/case21.geo +74 -0
- pyvale/simcases/case21.i +155 -0
- pyvale/simcases/case22.geo +82 -0
- pyvale/simcases/case22.i +140 -0
- pyvale/simcases/case23.geo +164 -0
- pyvale/simcases/case23.i +140 -0
- pyvale/simcases/case24.geo +79 -0
- pyvale/simcases/case24.i +123 -0
- pyvale/simcases/case25.geo +82 -0
- pyvale/simcases/case25.i +140 -0
- pyvale/simcases/case26.geo +166 -0
- pyvale/simcases/case26.i +140 -0
- pyvale/simcases/cases_dictionary.yaml +336 -0
- pyvale/simcases/run_1case.py +60 -0
- pyvale/simcases/run_all_cases.py +69 -0
- pyvale/simcases/run_build_case.py +64 -0
- pyvale/simcases/run_example_cases.py +69 -0
- pyvale/strain/__init__.py +13 -0
- pyvale/strain/cpp/bindings.cpp +25 -0
- pyvale/strain/cpp/smooth.cpp +140 -0
- pyvale/strain/cpp/smooth.hpp +53 -0
- pyvale/strain/cpp/strain.cpp +390 -0
- pyvale/strain/cpp/strain.hpp +177 -0
- pyvale/strain/strain.py +117 -0
- pyvale/strain/strain_cpp.cpython-311-i386-linux-gnu.so +0 -0
- pyvale/strain/strainchecks.py +47 -0
- pyvale/strain/strainimport.py +303 -0
- pyvale/strain/strainresults.py +55 -0
- pyvale/verif/__init__.py +15 -0
- pyvale/verif/analyticmeshgen.py +102 -0
- pyvale/verif/analyticsimdatafactory.py +125 -0
- pyvale/verif/analyticsimdatagenerator.py +368 -0
- pyvale/verif/matchsimdata.py +113 -0
- pyvale/verif/pointsens.py +120 -0
- pyvale/verif/pointsensconst.py +19 -0
- pyvale/verif/pointsensmech.py +270 -0
- pyvale/verif/pointsensmultiphys.py +184 -0
- pyvale/verif/pointsensscalar.py +383 -0
- pyvale/verif/pointsenstensor.py +159 -0
- pyvale/verif/pointsensvector.py +157 -0
- pyvale-2026.1.1.dist-info/METADATA +98 -0
- pyvale-2026.1.1.dist-info/RECORD +860 -0
- pyvale-2026.1.1.dist-info/WHEEL +6 -0
- pyvale-2026.1.1.dist-info/licenses/LICENSE +21 -0
- pyvale.libs/libgomp-65f46eca.so.1.0.0 +0 -0
- share/eigen3/cmake/Eigen3Config.cmake +37 -0
- share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
- share/eigen3/cmake/Eigen3Targets.cmake +106 -0
- share/eigen3/cmake/UseEigen3.cmake +6 -0
- share/pkgconfig/eigen3.pc +9 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
Deforming a sample for stereo DIC
|
|
9
|
+
===================================================
|
|
10
|
+
|
|
11
|
+
This example takes you through creating stereo DIC scene, applying deformation
|
|
12
|
+
to the sample, and rendering images at each deformation timestep.
|
|
13
|
+
|
|
14
|
+
Test case: mechanical analysis of a plate with a hole loaded in tension.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
from scipy.spatial.transform import Rotation
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
# pyvale imports
|
|
22
|
+
import pyvale.sensorsim as sens
|
|
23
|
+
import pyvale.dataset as dataset
|
|
24
|
+
import pyvale.blender as blender
|
|
25
|
+
import pyvale.mooseherder as mh
|
|
26
|
+
|
|
27
|
+
# %%
|
|
28
|
+
# The simulation results are loaded in here in the same way as the previous
|
|
29
|
+
# example. As mentioned this `data_path` can be replaced with your own MOOSE
|
|
30
|
+
# simulation output in exodus format (*.e).
|
|
31
|
+
|
|
32
|
+
data_path = dataset.render_mechanical_3d_path()
|
|
33
|
+
sim_data = mh.ExodusLoader(data_path).load_all_sim_data()
|
|
34
|
+
|
|
35
|
+
# %%
|
|
36
|
+
# This is then scaled to mm, as all lengths in Blender are to be set in mm.
|
|
37
|
+
# The `SimData` object is then converted into a `RenderMeshData` object, as
|
|
38
|
+
# this skins the mesh ready to be imported into Blender.
|
|
39
|
+
# The `disp_comps` are the expected direction of displacement. Since this is a
|
|
40
|
+
# 3D deformation test case, displacement is expected in the x, y and z directions.
|
|
41
|
+
|
|
42
|
+
disp_comps = ("disp_x","disp_y", "disp_z")
|
|
43
|
+
sim_data = sens.scale_length_units(scale=1000.0,
|
|
44
|
+
sim_data=sim_data,
|
|
45
|
+
disp_keys=disp_comps)
|
|
46
|
+
|
|
47
|
+
render_mesh = sens.create_render_mesh(sim_data,
|
|
48
|
+
("disp_y","disp_x"),
|
|
49
|
+
sim_spat_dim=sens.EDim.THREED,
|
|
50
|
+
field_disp_keys=disp_comps)
|
|
51
|
+
|
|
52
|
+
# %%
|
|
53
|
+
# Firstly, a save path must be set.
|
|
54
|
+
# In order to do this a base path must be set. Then all the generated files will
|
|
55
|
+
# be saved to a subfolder within this specified base directory
|
|
56
|
+
# (e.g. blenderimages).
|
|
57
|
+
# If no base directory is specified, it will be set as your home directory.
|
|
58
|
+
|
|
59
|
+
base_dir = Path.cwd() / "pyvale-output"
|
|
60
|
+
if not base_dir.is_dir():
|
|
61
|
+
base_dir.mkdir(parents=True, exist_ok=True)
|
|
62
|
+
|
|
63
|
+
# %%
|
|
64
|
+
# Creating the scene
|
|
65
|
+
# ^^^^^^^^^^^^^^^^^^
|
|
66
|
+
# In order to create a DIC setup in Blender, first a scene must be created.
|
|
67
|
+
# A scene is initialised using the `BlenderScene` class. All the subsequent
|
|
68
|
+
# objects and actions necessary are then methods of this class.
|
|
69
|
+
scene = blender.Scene()
|
|
70
|
+
|
|
71
|
+
# %%
|
|
72
|
+
# The next thing that can be added to the scene is a sample.
|
|
73
|
+
# This is done by passing in the `RenderMeshData` object.
|
|
74
|
+
# It should be noted that the mesh will be centred on the origin to allow for
|
|
75
|
+
# the cameras to be centred on the mesh.
|
|
76
|
+
# Once the part is added to the Blender scene, it can be both moved and rotated.
|
|
77
|
+
|
|
78
|
+
part = scene.add_part(render_mesh, sim_spat_dim=3)
|
|
79
|
+
# Set the part location
|
|
80
|
+
part_location = np.array([0, 0, 0])
|
|
81
|
+
blender.Tools.move_blender_obj(part=part, pos_world=part_location)
|
|
82
|
+
# Set part rotation
|
|
83
|
+
part_rotation = Rotation.from_euler("xyz", [0, 0, 0], degrees=True)
|
|
84
|
+
blender.Tools.rotate_blender_obj(part=part, rot_world=part_rotation)
|
|
85
|
+
|
|
86
|
+
# %%
|
|
87
|
+
# The cameras can then be initialised. A stereo camera system is defined by a
|
|
88
|
+
# `CameraStereo` object, which contains the intrinsic parameters of both cameras
|
|
89
|
+
# as well as the extrinsic parameters between them.
|
|
90
|
+
# There are two ways to initialise a `CameraStereo` object.
|
|
91
|
+
# One way is to specify the camera parameters separately for each camera, create
|
|
92
|
+
# a `CameraStereo` object, and then add the stereo system using the
|
|
93
|
+
# `add_stereo_system` method.
|
|
94
|
+
# The other method is to use a convenience function, as shown below.
|
|
95
|
+
# This requires you to first initialise one camera. Then you can choose between
|
|
96
|
+
# either a face-on or symmetric stereo system. Then, either of the
|
|
97
|
+
# `symmetric_stereo_cameras` or `faceon_stereo_cameras` functions can be used to
|
|
98
|
+
# initialise a `CameraStereo` object. The only input required to these functions
|
|
99
|
+
# are the camera parameters for the first camera, and the desired stereo angle
|
|
100
|
+
# between the two. The cameras can then be added to the Blender scene using the
|
|
101
|
+
# `add_stereo_system` method.
|
|
102
|
+
|
|
103
|
+
cam_data_0 = sens.CameraData(pixels_num=np.array([1540, 1040]),
|
|
104
|
+
pixels_size=np.array([0.00345, 0.00345]),
|
|
105
|
+
pos_world=np.array([0, 0, 400]),
|
|
106
|
+
rot_world=Rotation.from_euler("xyz", [0, 0, 0]),
|
|
107
|
+
roi_cent_world=(0, 0, 0),
|
|
108
|
+
focal_length=15.0)
|
|
109
|
+
# Set this to "symmetric" to get a symmetric stereo system or set this to
|
|
110
|
+
# "faceon" to get a face-on stereo system
|
|
111
|
+
stereo_setup = "faceon"
|
|
112
|
+
if stereo_setup == "symmetric":
|
|
113
|
+
stereo_system = sens.CameraTools.symmetric_stereo_cameras(
|
|
114
|
+
cam_data_0=cam_data_0,
|
|
115
|
+
stereo_angle=15.0)
|
|
116
|
+
elif stereo_setup == "faceon":
|
|
117
|
+
stereo_system = sens.CameraTools.faceon_stereo_cameras(
|
|
118
|
+
cam_data_0=cam_data_0,
|
|
119
|
+
stereo_angle=15.0)
|
|
120
|
+
else:
|
|
121
|
+
raise ValueError(f"Unknown stereo_setup: {stereo_setup}")
|
|
122
|
+
|
|
123
|
+
cam0, cam1 = scene.add_stereo_system(stereo_system)
|
|
124
|
+
|
|
125
|
+
# %%
|
|
126
|
+
# Since this scene contains a stereo DIC system, a calibration file will be
|
|
127
|
+
# required to run the images through a DIC engine.
|
|
128
|
+
# A calibration file can be generated directly from the `CameraStereo` object.
|
|
129
|
+
# The calibration file will be saved in `YAML` format. However, if you wish to
|
|
130
|
+
# use MatchID to process the images, `save_calibration_mid` can be used instead
|
|
131
|
+
# to save the calibration in a format readable by MatchID.
|
|
132
|
+
# The calibration file will be saved to a sub-directory of the base directory
|
|
133
|
+
# called "calibration".
|
|
134
|
+
stereo_system.save_calibration(base_dir)
|
|
135
|
+
|
|
136
|
+
# %%
|
|
137
|
+
# A light can the be added to the scene.
|
|
138
|
+
# Blender offers different light types: Point, Sun, Spot and Area.
|
|
139
|
+
# The light can also be moved and rotated like the camera.
|
|
140
|
+
light_data = blender.LightData(type=blender.LightType.POINT,
|
|
141
|
+
pos_world=(0, 0, 400),
|
|
142
|
+
rot_world=Rotation.from_euler("xyz",
|
|
143
|
+
[0, 0, 0]),
|
|
144
|
+
energy=1)
|
|
145
|
+
light = scene.add_light(light_data)
|
|
146
|
+
light.location = (0, 0, 410)
|
|
147
|
+
light.rotation_euler = (0, 0, 0) # NOTE: The default is an XYZ Euler angle
|
|
148
|
+
|
|
149
|
+
# Apply the speckle pattern
|
|
150
|
+
material_data = blender.MaterialData()
|
|
151
|
+
speckle_path = dataset.dic_pattern_5mpx_path()
|
|
152
|
+
# NOTE: If you wish to use a bigger camera, you will need to generate a
|
|
153
|
+
# bigger speckle pattern generator
|
|
154
|
+
|
|
155
|
+
# %%
|
|
156
|
+
# A speckle pattern can then be applied to the sample.
|
|
157
|
+
# Firstly, the material properties of the sample must be specified, but these
|
|
158
|
+
# will all be defaulted if no inputs are provided.
|
|
159
|
+
#The speckle pattern can then be specified by providing a path to an image file
|
|
160
|
+
# with the pattern.
|
|
161
|
+
# The mm/px resolution of the camera must also be specified in order to
|
|
162
|
+
# correctly scale the speckle pattern.
|
|
163
|
+
# It should be noted that for a bigger camera or sample you may need to generate
|
|
164
|
+
# a larger speckle pattern.
|
|
165
|
+
|
|
166
|
+
mm_px_resolution = sens.CameraTools.calculate_mm_px_resolution(cam_data_0)
|
|
167
|
+
scene.add_speckle(part=part,
|
|
168
|
+
speckle_path=speckle_path,
|
|
169
|
+
mat_data=material_data,
|
|
170
|
+
mm_px_resolution=mm_px_resolution)
|
|
171
|
+
|
|
172
|
+
# %%
|
|
173
|
+
# Deforming the sample and rendering images
|
|
174
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
175
|
+
# Once all the objects have been added to the scene, the sample can be deformed,
|
|
176
|
+
# and images can be rendered.
|
|
177
|
+
# Firstly, all the rendering parameters must be set, including parameters such as
|
|
178
|
+
# the number of threads to use.
|
|
179
|
+
# Differently to a 2D DIC system, both cameras' parameters must be specified in
|
|
180
|
+
# the `RenderData` object.
|
|
181
|
+
render_data = blender.RenderData(cam_data=(stereo_system.cam_data_0,
|
|
182
|
+
stereo_system.cam_data_1),
|
|
183
|
+
base_dir=base_dir,
|
|
184
|
+
dir_name="blender-stereo-def",
|
|
185
|
+
threads=8)
|
|
186
|
+
|
|
187
|
+
# %%
|
|
188
|
+
# A series of deformed images can then be rendered.
|
|
189
|
+
# This is done by passing in rendering parameters, as well as the
|
|
190
|
+
# `RenderMeshData` object, the part(sample) and the spatial dimension of the
|
|
191
|
+
# simulation.
|
|
192
|
+
# This will automatically deform the sample, and render images from each camera
|
|
193
|
+
# at each deformation timestep.
|
|
194
|
+
# If `stage_image` is set to True, the image will be saved to disk, converted to
|
|
195
|
+
# an array, deleted and the image array will be returned. This is due to the
|
|
196
|
+
# fact that an image cannot be saved directly as an array through Blender.
|
|
197
|
+
|
|
198
|
+
scene.render_deformed_images(render_mesh=render_mesh,
|
|
199
|
+
sim_spat_dim=3,
|
|
200
|
+
render_data=render_data,
|
|
201
|
+
part=part,
|
|
202
|
+
stage_image=False)
|
|
203
|
+
|
|
204
|
+
# %%
|
|
205
|
+
# The rendered image will be saved to this filepath:
|
|
206
|
+
|
|
207
|
+
print("Save directory of the image:", (render_data.base_dir / render_data.dir_name))
|
|
208
|
+
|
|
209
|
+
# %%
|
|
210
|
+
# There is also the option to save the scene as a Blender project file.
|
|
211
|
+
# This file can be opened with the Blender GUI to view the scene.
|
|
212
|
+
|
|
213
|
+
blender.Tools.save_blender_file(base_dir=base_dir,over_write=True)
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
Rendering calibration images
|
|
9
|
+
---------------------------------------------
|
|
10
|
+
|
|
11
|
+
This example takes you through how to render calibration images for a given DIC
|
|
12
|
+
setup using in-built tools for calibration target generation.
|
|
13
|
+
|
|
14
|
+
Note that this example produces a significant number of images and will take a
|
|
15
|
+
long time to run.
|
|
16
|
+
"""
|
|
17
|
+
import numpy as np
|
|
18
|
+
from scipy.spatial.transform import Rotation
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
# pyvale imports
|
|
22
|
+
import pyvale.sensorsim as sens
|
|
23
|
+
import pyvale.blender as blender
|
|
24
|
+
import pyvale.dataset as dataset
|
|
25
|
+
|
|
26
|
+
# %%
|
|
27
|
+
# Firstly, a save path must be set.
|
|
28
|
+
# In order to do this a base path must be set. Then all the generated files will
|
|
29
|
+
# be saved to a subfolder within this specified base directory
|
|
30
|
+
# (e.g. blenderimages).
|
|
31
|
+
# If no base directory is specified, it will be set as your home directory.
|
|
32
|
+
|
|
33
|
+
base_dir = Path.cwd() / "pyvale-output" / "blender-calib"
|
|
34
|
+
if not base_dir.is_dir():
|
|
35
|
+
base_dir.mkdir(parents=True, exist_ok=True)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# %%
|
|
40
|
+
# Creating the scene
|
|
41
|
+
# ^^^^^^^^^^^^^^^^^^
|
|
42
|
+
# In order to create a DIC setup in Blender, first a scene must be created.
|
|
43
|
+
# A scene is initialised using the `BlenderScene` class. All the subsequent
|
|
44
|
+
# objects and actions necessary are then methods of this class.
|
|
45
|
+
scene = blender.Scene()
|
|
46
|
+
|
|
47
|
+
# %%
|
|
48
|
+
# The next thing to add to the scene is the calibration target.
|
|
49
|
+
# This is done by specifing the size of calibration target to add to the scene
|
|
50
|
+
# by passing in an array of (width, height, depth).
|
|
51
|
+
# The calibration target being simulated here is 12 x 9 with 10 mm spacing.
|
|
52
|
+
|
|
53
|
+
target = scene.add_cal_target(target_size=np.array([150, 100, 10]))
|
|
54
|
+
|
|
55
|
+
# %%
|
|
56
|
+
# The cameras can then be initialised. A stereo camera system is defined by a
|
|
57
|
+
# `CameraStereo` object, which contains the intrinsic parameters of both cameras
|
|
58
|
+
# as well as the extrinsic parameters between them.
|
|
59
|
+
# There are two ways to initialise a `CameraStereo` object.
|
|
60
|
+
# One way is to specify the camera parameters separately for each camera, create
|
|
61
|
+
# a `CameraStereo` object, and then add the stereo system using the
|
|
62
|
+
# `add_stereo_system` method.
|
|
63
|
+
# The other method is to use a convenience function, as shown below.
|
|
64
|
+
# This requires you to first initialise one camera. Then you can choose between
|
|
65
|
+
# either a face-on or symmetric stereo system. Then, either of the
|
|
66
|
+
# `symmetric_stereo_cameras` or `faceon_stereo_cameras` functions can be used to
|
|
67
|
+
# initialise a `CameraStereo` object. The only input required to these functions
|
|
68
|
+
# are the camera parameters for the first camera, and the desired stereo angle
|
|
69
|
+
# between the two. The cameras can then be added to the Blender scene using the
|
|
70
|
+
# `add_stereo_system` method.
|
|
71
|
+
cam_data_0 = sens.CameraData(pixels_num=np.array([1540, 1040]),
|
|
72
|
+
pixels_size=np.array([0.00345, 0.00345]),
|
|
73
|
+
pos_world=np.array([0, 0, 400]),
|
|
74
|
+
rot_world=Rotation.from_euler("xyz", [0, 0, 0]),
|
|
75
|
+
roi_cent_world=(0, 0, 0),
|
|
76
|
+
focal_length=15.0)
|
|
77
|
+
# Set this to "symmetric" to get a symmetric stereo system or set this to
|
|
78
|
+
# "faceon" to get a face-on stereo system
|
|
79
|
+
stereo_setup = "faceon"
|
|
80
|
+
if stereo_setup == "symmetric":
|
|
81
|
+
stereo_system = sens.CameraTools.symmetric_stereo_cameras(
|
|
82
|
+
cam_data_0=cam_data_0,
|
|
83
|
+
stereo_angle=15.0)
|
|
84
|
+
elif stereo_setup == "faceon":
|
|
85
|
+
stereo_system = sens.CameraTools.faceon_stereo_cameras(
|
|
86
|
+
cam_data_0=cam_data_0,
|
|
87
|
+
stereo_angle=15.0)
|
|
88
|
+
else:
|
|
89
|
+
raise ValueError(f"Unknown stereo_setup: {stereo_setup}")
|
|
90
|
+
|
|
91
|
+
scene.add_stereo_system(stereo_system)
|
|
92
|
+
|
|
93
|
+
# %%
|
|
94
|
+
# Since this scene contains a stereo DIC system, a calibration file will be
|
|
95
|
+
# required to run the images through a DIC engine.
|
|
96
|
+
# A calibration file can be generated directly from the `CameraStereo` object.
|
|
97
|
+
# The calibration file will be saved in `YAML` format. However, if you wish to
|
|
98
|
+
# use MatchID to process the images, `save_calibration_mid` can be used instead
|
|
99
|
+
# to save the calibration in a format readable by MatchID.
|
|
100
|
+
# The calibration file will be saved to a sub-directory of the base directory
|
|
101
|
+
# called "calibration".
|
|
102
|
+
# This calibration file with "perfect" parameters can be used as a comparitive
|
|
103
|
+
# benchmark to the calibration gained from running the calibration files through
|
|
104
|
+
# a DIC engine.
|
|
105
|
+
stereo_system.save_calibration(base_dir)
|
|
106
|
+
|
|
107
|
+
# %%
|
|
108
|
+
# A light can the be added to the scene.
|
|
109
|
+
# Blender offers different light types: Point, Sun, Spot and Area.
|
|
110
|
+
# The light can also be moved and rotated like the camera.
|
|
111
|
+
|
|
112
|
+
light_data = blender.LightData(type=blender.LightType.POINT,
|
|
113
|
+
pos_world=(0, 0, 200),
|
|
114
|
+
rot_world=Rotation.from_euler("xyz",
|
|
115
|
+
[0, 0, 0]),
|
|
116
|
+
energy=1)
|
|
117
|
+
light = scene.add_light(light_data)
|
|
118
|
+
light.location = (0, 0, 210)
|
|
119
|
+
light.rotation_euler = (0, 0, 0) # NOTE: The default is an XYZ Euler angle
|
|
120
|
+
|
|
121
|
+
# %%
|
|
122
|
+
# The calibration target pattern can then be added to the calibration target
|
|
123
|
+
# object.
|
|
124
|
+
# This is added in the same way that a speckle pattern is added to a sample.
|
|
125
|
+
# However, it is important to set the `cal` flag to True, as this means that the
|
|
126
|
+
# calibration target pattern will not be scaled in the same way as a speckle
|
|
127
|
+
# pattern.
|
|
128
|
+
|
|
129
|
+
material_data = blender.MaterialData()
|
|
130
|
+
cal_target = dataset.cal_target()
|
|
131
|
+
mm_px_resolution = sens.CameraTools.calculate_mm_px_resolution(cam_data_0)
|
|
132
|
+
scene.add_speckle(part=target,
|
|
133
|
+
speckle_path=cal_target,
|
|
134
|
+
mat_data=material_data,
|
|
135
|
+
mm_px_resolution=mm_px_resolution,
|
|
136
|
+
cal=True)
|
|
137
|
+
|
|
138
|
+
# %%
|
|
139
|
+
# Rendering a set of images
|
|
140
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
141
|
+
# Once all the objects have been added to the scene, a set of images can be
|
|
142
|
+
# rendered.Firstly, all the rendering parameters must be set, including
|
|
143
|
+
# parameters such as the number of threads to use.
|
|
144
|
+
|
|
145
|
+
render_data = blender.RenderData(cam_data=(stereo_system.cam_data_0,
|
|
146
|
+
stereo_system.cam_data_1),
|
|
147
|
+
base_dir=base_dir,
|
|
148
|
+
dir_name="blender-stereo-cal")
|
|
149
|
+
|
|
150
|
+
# %%
|
|
151
|
+
# The parameters for the calibration target's movement can then be set. This is
|
|
152
|
+
# done by setting the minimum and maximum angle and plunge limits, as well as
|
|
153
|
+
# the step value that they should be increased by. The x and y limit of the
|
|
154
|
+
# calibration target's movement (from the origin) can also be set if you wish to
|
|
155
|
+
# perform a calibration for a constrained optical setup. If these limits are not
|
|
156
|
+
# passed in they will be initialised from the FOV to cover the whole FOV of the
|
|
157
|
+
# cameras.
|
|
158
|
+
|
|
159
|
+
calibration_data = blender.CalibrationData(angle_lims=(-10, 10),
|
|
160
|
+
angle_step=20,
|
|
161
|
+
plunge_lims=(-5, 5),
|
|
162
|
+
plunge_step=10)
|
|
163
|
+
|
|
164
|
+
# %%
|
|
165
|
+
# It is then possible to check the number of calibration images that will be
|
|
166
|
+
# rendered before rendering them. The only input that is needed is the
|
|
167
|
+
# `calibration_data` specified above.
|
|
168
|
+
|
|
169
|
+
number_calibration_images = blender.Tools.number_calibration_images(calibration_data)
|
|
170
|
+
print("Number of calibration images to be rendered:", number_calibration_images)
|
|
171
|
+
|
|
172
|
+
# %%
|
|
173
|
+
# The calibration images can then be rendered. This function will move the
|
|
174
|
+
# calibration target according to movement limits set above, and will also move
|
|
175
|
+
# the target rigidly across the FOV of the camera, in order to characterise the
|
|
176
|
+
# entire FOV of the cameras.
|
|
177
|
+
blender.Tools.render_calibration_images(render_data,
|
|
178
|
+
calibration_data,
|
|
179
|
+
target)
|
|
180
|
+
|
|
181
|
+
# %%
|
|
182
|
+
# The rendered images will be saved to this filepath:
|
|
183
|
+
|
|
184
|
+
print("Save directory of the images:", (render_data.base_dir / render_data.dir_name))
|
|
185
|
+
|
|
186
|
+
# %%
|
|
187
|
+
# There is also the option to save the scene as a Blender project file.
|
|
188
|
+
# This file can be opened with the Blender GUI to view the scene.
|
|
189
|
+
|
|
190
|
+
blender.Tools.save_blender_file(base_dir=base_dir,over_write=True)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#================================================================================
|
|
2
|
+
#Example: thermocouples on a 2d plate
|
|
3
|
+
#
|
|
4
|
+
#pyvale: the python validation engine
|
|
5
|
+
#License: MIT
|
|
6
|
+
#Copyright (C) 2024 The Computer Aided Validation Team
|
|
7
|
+
#================================================================================
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
Selecting a Region of Interest (ROI)
|
|
11
|
+
---------------------------------------------
|
|
12
|
+
|
|
13
|
+
This example looks at the current core functionality of the Region of Interest
|
|
14
|
+
(ROI) Selection Firsly we'll need to import `pyvale` itself.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
# pyvale modules
|
|
20
|
+
import pyvale.dataset as dataset
|
|
21
|
+
import pyvale.dic as dic
|
|
22
|
+
|
|
23
|
+
# %%
|
|
24
|
+
# We'll begin by selecting our Region of Interest (ROI) using the interactive selection tool.
|
|
25
|
+
# First, we create an instance of the ROI class. We pass a reference image to it, which is
|
|
26
|
+
# displayed as the underlay during ROI selection.
|
|
27
|
+
ref_img = dataset.dic_plate_with_hole_ref()
|
|
28
|
+
roi = dic.RegionOfInterest(ref_image=ref_img)
|
|
29
|
+
roi.interactive_selection(subset_size=31)
|
|
30
|
+
|
|
31
|
+
# create a directory for the the different outputs
|
|
32
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
33
|
+
if not output_path.is_dir():
|
|
34
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
35
|
+
|
|
36
|
+
# %%
|
|
37
|
+
# .. image:: ../../../../_static/roi_tool.gif
|
|
38
|
+
# :alt: ROI selection GUI (animated)
|
|
39
|
+
# :width: 600px
|
|
40
|
+
# :align: center
|
|
41
|
+
|
|
42
|
+
# %%
|
|
43
|
+
# After closing the interactive tool, a mask and a set of seed coordinates will be generated.
|
|
44
|
+
# These can be used directly in the DIC engine. If you plan to reuse the ROI, it’s a good idea
|
|
45
|
+
# to save it. For very large images, set `binary=True` to reduce file size and speed up saving.
|
|
46
|
+
roi_file = output_path / "roi.dat"
|
|
47
|
+
roi.save_array(filename=roi_file,binary=False)
|
|
48
|
+
|
|
49
|
+
# %%
|
|
50
|
+
# To reuse the saved ROI mask in the future, load it using:
|
|
51
|
+
roi.read_array(filename=roi_file,binary=False)
|
|
52
|
+
|
|
53
|
+
# %%
|
|
54
|
+
# If you are loading a previously saved ROI, you may want to visualize it
|
|
55
|
+
# overlaid on the reference image to verify it before proceeding with correlation.
|
|
56
|
+
roi.show_image()
|
|
57
|
+
|
|
58
|
+
# %%
|
|
59
|
+
# There are also programmatic ways to define an ROI.
|
|
60
|
+
# For example, to exclude a boundary region and keep only the central part:
|
|
61
|
+
roi.reset_mask()
|
|
62
|
+
roi.rect_boundary(left=50,right=50,bottom=50,top=50)
|
|
63
|
+
boundary_img = output_path / "rect_boundary.tiff"
|
|
64
|
+
roi.save_image(boundary_img)
|
|
65
|
+
|
|
66
|
+
# %%
|
|
67
|
+
# This excludes 50 pixels along each edge of the image from the ROI.
|
|
68
|
+
# Alternatively, to define a specific rectangular region:
|
|
69
|
+
roi.reset_mask()
|
|
70
|
+
roi.rect_region(x=200,y=200,size_x=200,size_y=200)
|
|
71
|
+
region_img = output_path / "rect_region.tiff"
|
|
72
|
+
roi.save_image(region_img)
|
|
73
|
+
|
|
74
|
+
# %%
|
|
75
|
+
# .. list-table::
|
|
76
|
+
# :widths: 50 50
|
|
77
|
+
# :align: center
|
|
78
|
+
# :header-rows: 0
|
|
79
|
+
#
|
|
80
|
+
# * - .. figure:: ../../../../_static/rect_boundary.png
|
|
81
|
+
# :width: 300px
|
|
82
|
+
# :align: center
|
|
83
|
+
#
|
|
84
|
+
# ``roi.rect_boundary(left=200, right=200, bottom=200, top=200)``
|
|
85
|
+
#
|
|
86
|
+
# - .. figure:: ../../../../_static/rect_region.png
|
|
87
|
+
# :width: 300px
|
|
88
|
+
# :align: center
|
|
89
|
+
#
|
|
90
|
+
# ``roi.rect_region(x=200, y=200, size_x=200, size_y=200)``
|
|
91
|
+
|
|
92
|
+
# %%
|
|
93
|
+
# The `rect_region` example above creates an ROI starting at pixel coordinates (200, 200)
|
|
94
|
+
# with a size of 200×200 pixels.
|
|
95
|
+
#
|
|
96
|
+
# You can also manually modify the ROI mask. A good starting point is:
|
|
97
|
+
# `roi.rect_boundary(0, 0, 0, 0)` — this sets the ROI to include the full image.
|
|
98
|
+
# From there, you can manipulate `roi.mask` as you would any other 2D NumPy array.
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#================================================================================
|
|
2
|
+
#Example: thermocouples on a 2d plate
|
|
3
|
+
#
|
|
4
|
+
#pyvale: the python validation engine
|
|
5
|
+
#License: MIT
|
|
6
|
+
#Copyright (C) 2024 The Computer Aided Validation Team
|
|
7
|
+
#================================================================================
|
|
8
|
+
"""
|
|
9
|
+
2D Plate with a Hole
|
|
10
|
+
---------------------
|
|
11
|
+
|
|
12
|
+
This example walks through setting up a DIC and strain calculation for the
|
|
13
|
+
classic "plate with a hole" problem. The images used are synthetically generated,
|
|
14
|
+
allowing for comparison to analytically known values.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import matplotlib.pyplot as plt
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
# pyvale modules
|
|
21
|
+
import pyvale.dataset as dataset
|
|
22
|
+
import pyvale.dic as dic
|
|
23
|
+
|
|
24
|
+
# %%
|
|
25
|
+
# We'll start by defining some variables that will be reused throughout the example:
|
|
26
|
+
# the reference image, deformed image(s), and the subset size.
|
|
27
|
+
#
|
|
28
|
+
# If you're working with a series of deformed images, it's a good idea to place
|
|
29
|
+
# them in a separate folder or ensure they follow a consistent naming convention.
|
|
30
|
+
# In such cases, the wildcard operator `*` can be used to select multiple files.
|
|
31
|
+
#
|
|
32
|
+
# The images used here are included in the `data <https://github.com/Computer-Aided-Validation-Laboratory/pyvale/tree/main/src/pyvale/data>`_ folder.
|
|
33
|
+
# We've provided helper functions to load them regardless of your installation path.
|
|
34
|
+
subset_size = 31
|
|
35
|
+
ref_img = dataset.dic_plate_with_hole_ref()
|
|
36
|
+
def_img = dataset.dic_plate_with_hole_def()
|
|
37
|
+
|
|
38
|
+
# create a directory for the the different outputs
|
|
39
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
40
|
+
if not output_path.is_dir():
|
|
41
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
42
|
+
|
|
43
|
+
# %%
|
|
44
|
+
# Next, we’ll select our Region of Interest (ROI) using the interactive tool.
|
|
45
|
+
# Create an instance of the ROI class and pass the reference image
|
|
46
|
+
# as input. This image will be shown as the underlay during any ROI selection or
|
|
47
|
+
# visualization.
|
|
48
|
+
roi = dic.RegionOfInterest(ref_img)
|
|
49
|
+
roi.interactive_selection(subset_size)
|
|
50
|
+
|
|
51
|
+
# %%
|
|
52
|
+
# Once you've closed the ROI interactive window, a mask and seed location coordinates
|
|
53
|
+
# will be generated. These are needed for the DIC engine.
|
|
54
|
+
#
|
|
55
|
+
# If you intend to reuse this ROI, it's a good idea to save it. For large images,
|
|
56
|
+
# setting `binary=True` is recommended to reduce file size and write time.
|
|
57
|
+
roi_file = output_path / "roi.dat"
|
|
58
|
+
roi.save_array(filename=roi_file, binary=False)
|
|
59
|
+
|
|
60
|
+
# %%
|
|
61
|
+
# To load a previously saved ROI for future use, use the `read_array` method.
|
|
62
|
+
# Make sure the filename and format (binary or human-readable) match what was saved.
|
|
63
|
+
roi.read_array(filename=roi_file, binary=False)
|
|
64
|
+
|
|
65
|
+
# %%
|
|
66
|
+
# Now we can run the 2D DIC engine using :func:`pyvale.dic_2d`.
|
|
67
|
+
#
|
|
68
|
+
# This function accepts many optional arguments — consult the documentation for full details.
|
|
69
|
+
# At a minimum, you’ll need to specify:
|
|
70
|
+
#
|
|
71
|
+
# - Reference image
|
|
72
|
+
# - Deformed image(s)
|
|
73
|
+
# - ROI mask
|
|
74
|
+
# - Seed coordinates (If using a Reliability Guided approach)
|
|
75
|
+
# - Subset size
|
|
76
|
+
#
|
|
77
|
+
# By default, the engine uses an affine shape function with the Zero Normalised
|
|
78
|
+
# Sum of Squared Differences (ZNSSD) correlation criterion.
|
|
79
|
+
#
|
|
80
|
+
# At present, the DIC engine doesn't return any results to the user, instead the results are saved to disk.
|
|
81
|
+
# You can customize the filename, location, format, and delimiter using
|
|
82
|
+
# the options options `output_basepath`, `output_prefix`, `output_delimiter`, and `output_binary`.
|
|
83
|
+
# More info on these options can be found in the documentation for :func:`dic.two_dimensional`.
|
|
84
|
+
# By default, the results will be saved with the prefix `dic_results_` followed
|
|
85
|
+
# by the original filename. The file extension will be replaced will either ".csv" or "dic2d"
|
|
86
|
+
# depending on whether the results are being saved in human-readable or binary format.
|
|
87
|
+
dic.calculate_2d(reference=ref_img,
|
|
88
|
+
deformed=def_img,
|
|
89
|
+
roi_mask=roi.mask,
|
|
90
|
+
seed=roi.seed,
|
|
91
|
+
subset_size=subset_size,
|
|
92
|
+
subset_step=10,
|
|
93
|
+
shape_function="AFFINE",
|
|
94
|
+
max_displacement=10,
|
|
95
|
+
correlation_criteria="ZNSSD",
|
|
96
|
+
output_basepath=output_path,
|
|
97
|
+
output_delimiter=",",
|
|
98
|
+
output_prefix="dic_results_")
|
|
99
|
+
|
|
100
|
+
# %%
|
|
101
|
+
# If you saved the results in a human-readable format, you can use any tool
|
|
102
|
+
# (e.g., Excel, Python, MATLAB) for post-processing.
|
|
103
|
+
#
|
|
104
|
+
# For convenience, we provide a utility function to import results back into Python
|
|
105
|
+
# for analysis and visualization: :func:`pyvale.dic.import_2d`.
|
|
106
|
+
#
|
|
107
|
+
# The returned object is an instance of :class:`pyvale.DICResults`. If the results
|
|
108
|
+
# were saved in binary format or with a custom delimiter, be sure to specify those parameters.
|
|
109
|
+
dic_files = output_path / "dic_results_*.csv"
|
|
110
|
+
dicdata = dic.import_2d(data=dic_files, delimiter=",", binary=False)
|
|
111
|
+
|
|
112
|
+
# %%
|
|
113
|
+
# As an example, here's a simple visualization of the displacement (u, v) and
|
|
114
|
+
# correlation cost for the two deformed images using matplotlib. You'll need to
|
|
115
|
+
# ensure you have `matplotlib.pyplot` installed and imported.
|
|
116
|
+
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
|
|
117
|
+
axes = axes.flatten()
|
|
118
|
+
|
|
119
|
+
# First deformation image
|
|
120
|
+
im1 = axes[0].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.u[0])
|
|
121
|
+
im2 = axes[1].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.v[0])
|
|
122
|
+
im3 = axes[2].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.cost[0])
|
|
123
|
+
|
|
124
|
+
# Second deformation image
|
|
125
|
+
im4 = axes[3].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.u[1])
|
|
126
|
+
im5 = axes[4].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.v[1])
|
|
127
|
+
im6 = axes[5].pcolor(dicdata.ss_x, dicdata.ss_y, dicdata.cost[1])
|
|
128
|
+
|
|
129
|
+
# Titles
|
|
130
|
+
axes[0].set_title('u component (def0000.tiff)')
|
|
131
|
+
axes[1].set_title('v component (def0000.tiff)')
|
|
132
|
+
axes[2].set_title('cost (def0000.tiff)')
|
|
133
|
+
axes[3].set_title('u component (def0001.tiff)')
|
|
134
|
+
axes[4].set_title('v component (def0001.tiff)')
|
|
135
|
+
axes[5].set_title('cost (def0001.tiff)')
|
|
136
|
+
|
|
137
|
+
for aa in axes:
|
|
138
|
+
aa.set_aspect('equal')
|
|
139
|
+
|
|
140
|
+
# Colorbars
|
|
141
|
+
fig.colorbar(im1, ax=axes[0])
|
|
142
|
+
fig.colorbar(im2, ax=axes[1])
|
|
143
|
+
fig.colorbar(im3, ax=axes[2])
|
|
144
|
+
fig.colorbar(im4, ax=axes[3])
|
|
145
|
+
fig.colorbar(im5, ax=axes[4])
|
|
146
|
+
fig.colorbar(im6, ax=axes[5])
|
|
147
|
+
|
|
148
|
+
plt.tight_layout()
|
|
149
|
+
plt.show()
|
|
150
|
+
|
|
151
|
+
# %%
|
|
152
|
+
# .. image:: ../../../../_static/plate_with_hole.png
|
|
153
|
+
# :alt: Displacement and cost values
|
|
154
|
+
# :width: 800px
|
|
155
|
+
# :align: center
|