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,280 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
Vector and tensor field sensors
|
|
9
|
+
================================================================================
|
|
10
|
+
|
|
11
|
+
In this example we will show how `pyvale` can be used to simulate vector and
|
|
12
|
+
tensor field sensors demonstrated by displacement and strain sensors. We show
|
|
13
|
+
some of the additional sensor array setup parameters such as the sensor
|
|
14
|
+
orientation for vector and tensor sensors. We also introduce a new type of
|
|
15
|
+
simulated error called a 'field error' which can be used to simulate uncertainty
|
|
16
|
+
in sensor positions, sampling time, orientation and sensor averaging area.
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
import numpy as np
|
|
22
|
+
from scipy.spatial.transform import Rotation
|
|
23
|
+
import matplotlib.pyplot as plt
|
|
24
|
+
|
|
25
|
+
# pyvale imports
|
|
26
|
+
import pyvale.mooseherder as mh
|
|
27
|
+
import pyvale.sensorsim as sens
|
|
28
|
+
import pyvale.dataset as dataset
|
|
29
|
+
|
|
30
|
+
#%%
|
|
31
|
+
# 1. Load physics simulation data
|
|
32
|
+
# -------------------------------
|
|
33
|
+
# As we did in the last example we load a finite element simulation dataset that
|
|
34
|
+
# comes packaged with `pyvale` in exodus (*.e) format. We also convert the
|
|
35
|
+
# length units of our simulation from meters to milli-meters as our
|
|
36
|
+
# visualisation tools are based on unit scaling by default.
|
|
37
|
+
|
|
38
|
+
data_path: Path = dataset.mechanical_2d_path()
|
|
39
|
+
sim_data: mh.SimData = mh.ExodusLoader(data_path).load_all_sim_data()
|
|
40
|
+
|
|
41
|
+
disp_keys = ("disp_x","disp_y")
|
|
42
|
+
strain_norm_keys = ("strain_xx","strain_yy",)
|
|
43
|
+
strain_dev_keys = ("strain_xy",)
|
|
44
|
+
|
|
45
|
+
sim_data: mh.SimData = sens.scale_length_units(scale=1000.0,
|
|
46
|
+
sim_data=sim_data,
|
|
47
|
+
disp_keys=disp_keys)
|
|
48
|
+
|
|
49
|
+
#%%
|
|
50
|
+
# 2. Build virtual sensor arrays
|
|
51
|
+
# ------------------------------
|
|
52
|
+
# Creating a vector or tensor field sensor array is similar to what we
|
|
53
|
+
# have already done for scalar fields we just need to specify the string
|
|
54
|
+
# keys for the field components we want to use in the sim data object we have
|
|
55
|
+
# loaded. For vector and tensor field sensors we can also specify a sensor
|
|
56
|
+
# orientation which we demonstrate here.
|
|
57
|
+
#
|
|
58
|
+
# The information we provide in the `SensorData` object is treated as the ground
|
|
59
|
+
# truth so any 'field errors' we simulate later are calculated with respect to
|
|
60
|
+
# this.
|
|
61
|
+
|
|
62
|
+
sens_pos: np.ndarray = sens.gen_pos_grid_inside(num_sensors=(2,2,1),
|
|
63
|
+
x_lims=(0.0,100.0),
|
|
64
|
+
y_lims=(0.0,150.0),
|
|
65
|
+
z_lims=(0.0,0.0))
|
|
66
|
+
|
|
67
|
+
sample_times: np.ndarray = np.linspace(0.0,np.max(sim_data.time),50)
|
|
68
|
+
|
|
69
|
+
sens_angles: tuple[Rotation] = sens_pos.shape[0] * \
|
|
70
|
+
(Rotation.from_euler("zyx",[90,0,0], degrees=True),)
|
|
71
|
+
|
|
72
|
+
disp_sens_data = sens.SensorData(positions=sens_pos,
|
|
73
|
+
sample_times=sample_times,
|
|
74
|
+
angles=sens_angles)
|
|
75
|
+
|
|
76
|
+
disp_sens: sens.SensorsPoint = sens.SensorFactory.vector_point(
|
|
77
|
+
sim_data,
|
|
78
|
+
disp_sens_data,
|
|
79
|
+
comp_keys=disp_keys,
|
|
80
|
+
spatial_dims=sens.EDim.TWOD,
|
|
81
|
+
descriptor=sens.DescriptorFactory.displacement(),
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
#%%
|
|
85
|
+
# .. note::
|
|
86
|
+
# Sensor angles can be specified individually for all sensors or if all
|
|
87
|
+
# sensors have the same angle a single element tuple can be used. This has the
|
|
88
|
+
# advantage that the rotations can be batch executed in one numpy call for
|
|
89
|
+
# speed. So we could have used `sens_angles = (Rotation.from_euler("zyx",
|
|
90
|
+
# [90,0,0],degrees=True),)` above.
|
|
91
|
+
|
|
92
|
+
#%%
|
|
93
|
+
# For the tensor field sensors we have to separately specify the string keys for
|
|
94
|
+
# the normal and deviatoric tensor components, otherwise it is the same as for
|
|
95
|
+
# the vector field sensor.
|
|
96
|
+
|
|
97
|
+
strain_sens_data = sens.SensorData(positions=sens_pos,
|
|
98
|
+
sample_times=sample_times,
|
|
99
|
+
angles=sens_angles)
|
|
100
|
+
|
|
101
|
+
strain_sens: sens.SensorsPoint = sens.SensorFactory.tensor_point(
|
|
102
|
+
sim_data,
|
|
103
|
+
strain_sens_data,
|
|
104
|
+
norm_comp_keys=strain_norm_keys,
|
|
105
|
+
dev_comp_keys=strain_dev_keys,
|
|
106
|
+
spatial_dims=sens.EDim.TWOD,
|
|
107
|
+
descriptor=sens.DescriptorFactory.strain(sens.EDim.TWOD),
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
#%%
|
|
111
|
+
# 2.1. Add simulated measurement errors
|
|
112
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
113
|
+
# Now we are going to create an error that allows us to add uncertainty in the
|
|
114
|
+
# sensor position and angle (as well as the sampling time and area averaging).
|
|
115
|
+
# In `pyvale` these are called field errors because we have to re-interpolate
|
|
116
|
+
# the field to evaluate them. In this case we will have a constant offset and
|
|
117
|
+
# random perturbation in the sensor positions and angle. We use the same type of
|
|
118
|
+
# field error for both sensor arrays for simplicity and add a probabilistic
|
|
119
|
+
# random error.
|
|
120
|
+
#
|
|
121
|
+
# First, we setup the data structures that will tell our error chain how to
|
|
122
|
+
# configure and evaluate our field errors. Everything that can be evaluated in
|
|
123
|
+
# a field error is captured in the `ErrFieldData` dataclass.
|
|
124
|
+
|
|
125
|
+
pos_offset_xyz = np.array((2.0,2.0,0.0),dtype=np.float64)
|
|
126
|
+
pos_offset_xyz = np.tile(pos_offset_xyz,(sens_pos.shape[0],1))
|
|
127
|
+
|
|
128
|
+
pos_rand = sens.GenUniform(low=-2.0,high=2.0) # units = mm
|
|
129
|
+
|
|
130
|
+
angle_offset = np.zeros_like(sens_pos)
|
|
131
|
+
angle_offset[:,0] = 1.0 # only rotate about z in 2D, units = degrees
|
|
132
|
+
|
|
133
|
+
angle_rand = sens.GenUniform(low=-5.0,high=5.0)
|
|
134
|
+
|
|
135
|
+
field_err_data = sens.ErrFieldData(pos_offset_xyz=pos_offset_xyz,
|
|
136
|
+
pos_rand_xyz=(pos_rand,pos_rand,None),
|
|
137
|
+
ang_offset_zyx=angle_offset,
|
|
138
|
+
ang_rand_zyx=(angle_rand,None,None))
|
|
139
|
+
|
|
140
|
+
#%%
|
|
141
|
+
# We build and set our error chains in exactly the same way as we did before
|
|
142
|
+
# noting that our field errors need a reference to the field that they will have
|
|
143
|
+
# to interpolate.
|
|
144
|
+
|
|
145
|
+
disp_err_chain: list[sens.IErrSimulator] = [
|
|
146
|
+
sens.ErrRandGen(sens.GenNormal(std=2.0)),
|
|
147
|
+
sens.ErrSysField(disp_sens.get_field(),field_err_data),
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
disp_sens.set_error_chain(disp_err_chain)
|
|
151
|
+
|
|
152
|
+
strain_err_chain: list[sens.IErrSimulator] = [
|
|
153
|
+
sens.ErrRandGenPercent(sens.GenUniform(low=-2.0,high=2.0)),
|
|
154
|
+
sens.ErrSysField(strain_sens.get_field(),field_err_data),
|
|
155
|
+
]
|
|
156
|
+
strain_sens.set_error_chain(strain_err_chain)
|
|
157
|
+
|
|
158
|
+
#%%
|
|
159
|
+
# 3. Run a simulated experiment
|
|
160
|
+
# -----------------------------
|
|
161
|
+
# We run our sensor simulation as normal but we note that the second
|
|
162
|
+
# dimension of our measurement array will have either 2 vector components for
|
|
163
|
+
# the displacement sensors in 2D or 3 tensor components for the strain sensors
|
|
164
|
+
# in 2D.
|
|
165
|
+
#
|
|
166
|
+
# We also print some of the virtual displacement and strain measurements to
|
|
167
|
+
# the console along with the shapes of the measurement arrays so we can compare
|
|
168
|
+
# them. Note that for the tensor sensors the measurement array axis is ordered
|
|
169
|
+
# so that the normal components are followed by the deviatoric.
|
|
170
|
+
|
|
171
|
+
disp_meas: np.ndarray = disp_sens.sim_measurements()
|
|
172
|
+
strain_meas: np.ndarray = strain_sens.sim_measurements()
|
|
173
|
+
|
|
174
|
+
sens_print: int = 0
|
|
175
|
+
comp_print: int = 0
|
|
176
|
+
time_last: int = 5
|
|
177
|
+
time_print = slice(disp_meas.shape[2]-time_last,disp_meas.shape[2])
|
|
178
|
+
|
|
179
|
+
print(80*"-")
|
|
180
|
+
print("DISP. SENSORS")
|
|
181
|
+
print(f"The last {time_last} virtual measurements of sensor "
|
|
182
|
+
+ f"{sens_print}:\n")
|
|
183
|
+
|
|
184
|
+
sens.print_measurements(disp_sens,sens_print,comp_print,time_print)
|
|
185
|
+
|
|
186
|
+
print("\nSTRAIN. SENSORS")
|
|
187
|
+
print(f"The last {time_last} virtual measurements of sensor "
|
|
188
|
+
+ f"{sens_print}:\n")
|
|
189
|
+
|
|
190
|
+
sens.print_measurements(strain_sens,sens_print,comp_print,time_print)
|
|
191
|
+
print("\n"+80*"-")
|
|
192
|
+
|
|
193
|
+
# %%
|
|
194
|
+
# Example terminal output:
|
|
195
|
+
#
|
|
196
|
+
# .. image:: ../../../../_static/basics_ex2_term_out.png
|
|
197
|
+
# :alt: Terminal output showing simulated measurements and error array shapes
|
|
198
|
+
# :width: 700px
|
|
199
|
+
# :align: center
|
|
200
|
+
|
|
201
|
+
#%%
|
|
202
|
+
# 4. Analyse & visualise the results
|
|
203
|
+
# ----------------------------------
|
|
204
|
+
# Now we visualise the sensor locations on the mesh and save these images to
|
|
205
|
+
# disk. As we have used sensor positioning errors in our error chain the
|
|
206
|
+
# perturbed sensor locations are shown on the sensor location visualisation as
|
|
207
|
+
# different coloured spheres without labels.
|
|
208
|
+
|
|
209
|
+
output_path = Path.cwd() / "pyvale-output"
|
|
210
|
+
if not output_path.is_dir():
|
|
211
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
pv_plot = sens.plot_point_sensors_on_sim(disp_sens,"disp_y")
|
|
215
|
+
pv_plot.camera_position = "xy"
|
|
216
|
+
|
|
217
|
+
save_render = output_path / "basics_ex2_disp_locs.png"
|
|
218
|
+
|
|
219
|
+
# Set to False to show an interactive plot instead of saving the figure
|
|
220
|
+
pv_plot.off_screen = True
|
|
221
|
+
if pv_plot.off_screen:
|
|
222
|
+
pv_plot.screenshot(save_render)
|
|
223
|
+
else:
|
|
224
|
+
pv_plot.show()
|
|
225
|
+
|
|
226
|
+
# %%
|
|
227
|
+
# .. image:: ../../../../_static/basics_ex2_disp_locs.png
|
|
228
|
+
# :alt: Location of virtual strain sensors
|
|
229
|
+
# :width: 800px
|
|
230
|
+
# :align: center
|
|
231
|
+
|
|
232
|
+
pv_plot = sens.plot_point_sensors_on_sim(strain_sens,"strain_yy")
|
|
233
|
+
pv_plot.camera_position = "xy"
|
|
234
|
+
|
|
235
|
+
# Set to False to show an interactive plot instead of saving the figure
|
|
236
|
+
pv_plot.off_screen = True
|
|
237
|
+
if pv_plot.off_screen:
|
|
238
|
+
pv_plot.screenshot(output_path / "basics_ex2_strain_locs.png")
|
|
239
|
+
else:
|
|
240
|
+
pv_plot.show()
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# %%
|
|
244
|
+
# .. image:: ../../../../_static/basics_ex2_strain_locs.png
|
|
245
|
+
# :alt: Location of virtual strain sensors
|
|
246
|
+
# :width: 800px
|
|
247
|
+
# :align: center
|
|
248
|
+
|
|
249
|
+
#%%
|
|
250
|
+
# We also plot and save the time traces for our virtual sensors for all
|
|
251
|
+
# components of the displacement and strain fields and save them to disk.
|
|
252
|
+
|
|
253
|
+
for kk in disp_keys:
|
|
254
|
+
(fig,ax) = sens.plot_time_traces(disp_sens,kk)
|
|
255
|
+
|
|
256
|
+
save_traces = output_path/f"basics_ex2_traces_{kk}.png"
|
|
257
|
+
fig.savefig(save_traces, dpi=300, bbox_inches="tight")
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
# %%
|
|
261
|
+
# .. image:: ../../../../_static/basics_ex2_traces_disp_y.png
|
|
262
|
+
# :alt: Simulated displacement sensor traces.
|
|
263
|
+
# :width: 500px
|
|
264
|
+
# :align: center
|
|
265
|
+
|
|
266
|
+
for kk in (strain_norm_keys+strain_dev_keys):
|
|
267
|
+
(fig,ax) = sens.plot_time_traces(strain_sens,kk)
|
|
268
|
+
|
|
269
|
+
save_traces = output_path/f"basics_ex2_traces_{kk}.png"
|
|
270
|
+
fig.savefig(save_traces, dpi=300, bbox_inches="tight")
|
|
271
|
+
|
|
272
|
+
# Uncomment to show all traces plots
|
|
273
|
+
# plt.show()
|
|
274
|
+
|
|
275
|
+
# %%
|
|
276
|
+
# .. image:: ../../../../_static/basics_ex2_traces_strain_yy.png
|
|
277
|
+
# :alt: Simulated strain sensor traces
|
|
278
|
+
# :width: 500px
|
|
279
|
+
# :align: center
|
|
280
|
+
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""Multi-physics experiment simulation
|
|
8
|
+
================================================================================
|
|
9
|
+
|
|
10
|
+
In this example we apply multiple sensor arrays across a number of different
|
|
11
|
+
physics simulations with different inputs allowing us to run a series of virtual
|
|
12
|
+
experiments and analyse the results.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
import numpy as np
|
|
17
|
+
import matplotlib.pyplot as plt
|
|
18
|
+
|
|
19
|
+
# pyvale imports
|
|
20
|
+
import pyvale.mooseherder as mh
|
|
21
|
+
import pyvale.sensorsim as sens
|
|
22
|
+
import pyvale.dataset as dataset
|
|
23
|
+
|
|
24
|
+
#%%
|
|
25
|
+
# 1. Load physics simulation data
|
|
26
|
+
# -------------------------------
|
|
27
|
+
# First we load a set of simulations all of the same thermo-mechanical test case
|
|
28
|
+
# where one simulation uses the reference thermal conductivity and expansion
|
|
29
|
+
# coefficient and the remaining simulation represents a -10% perturbation to
|
|
30
|
+
# these simulation inputs.
|
|
31
|
+
|
|
32
|
+
sim_paths: list[Path] = dataset.thermomechanical_3d_experiment_paths()
|
|
33
|
+
sim_keys: set[str] = {"sim_nominal","sim_perturbed"}
|
|
34
|
+
|
|
35
|
+
disp_keys = ("disp_x","disp_y","disp_z")
|
|
36
|
+
|
|
37
|
+
sim_data_dict: dict[str,mh.SimData] = {}
|
|
38
|
+
for ss,kk in zip(sim_paths,sim_keys):
|
|
39
|
+
sim_data: mh.SimData = mh.ExodusLoader(ss).load_all_sim_data()
|
|
40
|
+
|
|
41
|
+
sim_data: mh.SimData = sens.scale_length_units(scale=1000.0,
|
|
42
|
+
sim_data=sim_data,
|
|
43
|
+
disp_keys=disp_keys)
|
|
44
|
+
sim_data_dict[kk] = sim_data
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#%%
|
|
48
|
+
# 2. Build virtual sensor arrays
|
|
49
|
+
# ------------------------------
|
|
50
|
+
|
|
51
|
+
#%%
|
|
52
|
+
# 2.1 Build scalar field sensor array
|
|
53
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
54
|
+
# Here we build a scalar field sensor array to simulate thermocouples applied to
|
|
55
|
+
# our simulation in a similar way to what we have seen in previous examples.
|
|
56
|
+
|
|
57
|
+
sample_times = np.linspace(0.0,np.max(sim_data.time),50)
|
|
58
|
+
|
|
59
|
+
temp_sens_pos: np.ndarray = sens.gen_pos_grid_inside(num_sensors=(1,4,1),
|
|
60
|
+
x_lims=(12.5,12.5),
|
|
61
|
+
y_lims=(0.0,33.0),
|
|
62
|
+
z_lims=(0.0,12.0))
|
|
63
|
+
|
|
64
|
+
temp_sens_data = sens.SensorData(positions=temp_sens_pos,
|
|
65
|
+
sample_times=sample_times)
|
|
66
|
+
|
|
67
|
+
temp_sens: sens.SensorsPoint = sens.SensorFactory.scalar_point(
|
|
68
|
+
sim_data,
|
|
69
|
+
temp_sens_data,
|
|
70
|
+
comp_key="temperature",
|
|
71
|
+
spatial_dims=sens.EDim.THREED,
|
|
72
|
+
descriptor=sens.DescriptorFactory.temperature(),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
#%%
|
|
76
|
+
# 2.2 Add errors to the scalar field sensors
|
|
77
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
78
|
+
# Now we add some errors to our thermocouple sensor array starting with a random
|
|
79
|
+
# noise with a standard deviation of 2 degrees. We then build a field error
|
|
80
|
+
# that includes sensor position uncertainty. Here we generate position
|
|
81
|
+
# uncertainty in all dimensions but then we use the `pos_lock_xyz` numpy array
|
|
82
|
+
# in our `ErrFieldData` object to constrain all sensors to not move off the
|
|
83
|
+
# surface they are on. This feature is particularly useful when we have sensors
|
|
84
|
+
# on different faces of a 3D simulation and we want to constrain the sensors in
|
|
85
|
+
# particular axes for particular sensors. However, here we could have just
|
|
86
|
+
# omitted the position random generator in the X direction and replace it with
|
|
87
|
+
# `None`.
|
|
88
|
+
|
|
89
|
+
temp_pos_uncert = 0.5 # units = mm
|
|
90
|
+
temp_pos_rand = (sens.GenNormal(std=temp_pos_uncert),
|
|
91
|
+
sens.GenNormal(std=temp_pos_uncert),
|
|
92
|
+
sens.GenNormal(std=temp_pos_uncert))
|
|
93
|
+
|
|
94
|
+
temp_pos_lock = np.full(temp_sens_pos.shape,False,dtype=bool)
|
|
95
|
+
temp_pos_lock[:,0] = True
|
|
96
|
+
|
|
97
|
+
temp_field_err_data = sens.ErrFieldData(pos_rand_xyz=temp_pos_rand,
|
|
98
|
+
pos_lock_xyz=temp_pos_lock)
|
|
99
|
+
|
|
100
|
+
temp_err_chain: list[sens.IErrSimulator] = [
|
|
101
|
+
sens.ErrRandGen(sens.GenNormal(std=2.0)), # units = degrees
|
|
102
|
+
sens.ErrSysField(temp_sens.get_field(),temp_field_err_data),
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
temp_sens.set_error_chain(temp_err_chain)
|
|
106
|
+
|
|
107
|
+
#%%
|
|
108
|
+
# 2.3 Build tensor field sensor array
|
|
109
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
110
|
+
# Here we build a tensor field sensor array to simulate strain gauges applied to
|
|
111
|
+
# our simulation in a similar way to what we have seen in previous examples.
|
|
112
|
+
|
|
113
|
+
strain_sens_pos: np.ndarray = sens.gen_pos_grid_inside(num_sensors=(1,4,1),
|
|
114
|
+
x_lims=(9.4,9.4),
|
|
115
|
+
y_lims=(0.0,33.0),
|
|
116
|
+
z_lims=(12.0,12.0))
|
|
117
|
+
|
|
118
|
+
strain_sens_data = sens.SensorData(positions=strain_sens_pos,
|
|
119
|
+
sample_times=sample_times)
|
|
120
|
+
|
|
121
|
+
strain_sens: sens.SensorsPoint = sens.SensorFactory.tensor_point(
|
|
122
|
+
sim_data,
|
|
123
|
+
strain_sens_data,
|
|
124
|
+
norm_comp_keys=("strain_xx","strain_yy","strain_zz"),
|
|
125
|
+
dev_comp_keys=("strain_xy","strain_yz","strain_xz"),
|
|
126
|
+
spatial_dims=sens.EDim.THREED,
|
|
127
|
+
descriptor=sens.DescriptorFactory.strain(sens.EDim.THREED),
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
#%%
|
|
131
|
+
# 2.4 Add errors to the tensor field sensors
|
|
132
|
+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
133
|
+
# Now we add some errors to our strain gauge array starting with random noise
|
|
134
|
+
# with a standard deviation of 2% of the ground truth. We then build a field
|
|
135
|
+
# error to simulate orientation uncertainty and demonstrate the same 'lock'
|
|
136
|
+
# functionality that allows us to constrain the sensors to only rotate on the
|
|
137
|
+
# surface they are on.
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
angle_uncert: float = 2.0 # units = degrees
|
|
141
|
+
angle_rand_zyx = (sens.GenUniform(low=-angle_uncert,high=angle_uncert),
|
|
142
|
+
sens.GenUniform(low=-angle_uncert,high=angle_uncert),
|
|
143
|
+
sens.GenUniform(low=-angle_uncert,high=angle_uncert))
|
|
144
|
+
|
|
145
|
+
angle_lock = np.full(strain_sens_pos.shape,True,dtype=bool)
|
|
146
|
+
angle_lock[:,0] = False # Allow rotation about z
|
|
147
|
+
|
|
148
|
+
strain_field_err_data = sens.ErrFieldData(ang_rand_zyx=angle_rand_zyx,
|
|
149
|
+
ang_lock_zyx=angle_lock)
|
|
150
|
+
|
|
151
|
+
strain_err_chain: list[sens.IErrSimulator] = [
|
|
152
|
+
sens.ErrRandGenPercent(sens.GenNormal(std=2.0)),
|
|
153
|
+
sens.ErrSysField(strain_sens.get_field(),strain_field_err_data),
|
|
154
|
+
]
|
|
155
|
+
|
|
156
|
+
strain_sens.set_error_chain(strain_err_chain)
|
|
157
|
+
|
|
158
|
+
#%%
|
|
159
|
+
# 3. Create & run simulated experiments
|
|
160
|
+
# -------------------------------------
|
|
161
|
+
# We can now run our experiments over all simulations for all our virtual
|
|
162
|
+
# sensor arrays. We can run our simulations sequentially or in parallel by
|
|
163
|
+
# controlling the number of workers and parallelisation enumeration in the
|
|
164
|
+
# `ExpSimOpts` dataclass. Note that the default is to run the simulations in
|
|
165
|
+
# a single process sequentially (called the `ALL` option). The parallelisation
|
|
166
|
+
# enumeration has two options 'ALL' which means we run all of our N experiments
|
|
167
|
+
# on per worker and 'SPLIT' which splits our N experiments across the workers
|
|
168
|
+
# running a single simulation per worker. For our case here 'ALL' will be
|
|
169
|
+
# fastest and as we have 4 unique combinations of our simulation data and
|
|
170
|
+
# sensors arrays 4 workers will be most efficient. The 'SPLIT' option is most
|
|
171
|
+
# effective for computationally heavy simulated experiments that involve imaging
|
|
172
|
+
# simulations.
|
|
173
|
+
#
|
|
174
|
+
# We can also control what data is saved from our experiment simulation using
|
|
175
|
+
# `ExpSimSaveKeys` dataclass. Here you can assign custom keys to the different
|
|
176
|
+
# data arrays (measurement, systematic error and random error arrays etc.) or
|
|
177
|
+
# setting any of the member variables of the save keys to None will stop that
|
|
178
|
+
# variable being save. This is useful if you only have systematic errors and
|
|
179
|
+
# no random errors so don't need to save them (set `.rand=None`). If you have
|
|
180
|
+
# no field errors perturbing the sensor positon or time you will also want to
|
|
181
|
+
# stop these arrays being saves (`.pert_sens_times=None`, `.pert_sens_pos=None`)
|
|
182
|
+
# .
|
|
183
|
+
|
|
184
|
+
sensor_array_dict: dict[str,sens.ISensorArray] = {
|
|
185
|
+
"temp": temp_sens,
|
|
186
|
+
"strain": strain_sens,
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
exp_sim_opts = sens.ExpSimOpts(workers=4,para=sens.EExpSimPara.ALL)
|
|
190
|
+
exp_save_keys = sens.ExpSimSaveKeys(pert_sens_times=None)
|
|
191
|
+
|
|
192
|
+
exp_sim = sens.ExperimentSimulator(sim_data_dict,
|
|
193
|
+
sensor_array_dict,
|
|
194
|
+
exp_sim_opts,
|
|
195
|
+
exp_save_keys)
|
|
196
|
+
|
|
197
|
+
#%%
|
|
198
|
+
# The results of our simulated experiment are returned as a dictionary of numpy
|
|
199
|
+
# arrays where the key is a tuple of strings. The tuple key takes the form:
|
|
200
|
+
# (sim_key,sens_key,data_key) where data_key can be: "meas" for the simulated
|
|
201
|
+
# measurements; "sys_errs" for the systematic errors; "rand_errs" for the random
|
|
202
|
+
# errors; and "samp_times" for the sample time vector. The numpy array for
|
|
203
|
+
# "meas", "sys_errs" and "rand_errs" has the following shape
|
|
204
|
+
# (num_exps,num_sensors,num_field_comps,num_time_steps). The numpy array for the
|
|
205
|
+
# sample times has a shape (num_time_steps,). This will also contain the
|
|
206
|
+
# perturbed sensor positions with data key "pert_sens_pos". In our case we are
|
|
207
|
+
# not perturbing the sensor times and we have set the save key to None so this
|
|
208
|
+
# will not appear in our data dictionary.
|
|
209
|
+
#
|
|
210
|
+
# We can also calculate summary statistics which is returned as a dictionary
|
|
211
|
+
# keyed with the same tuple as the experimental data dictionary. The value of
|
|
212
|
+
# dictionary is an experiment stats object that contains numpy arrays for each
|
|
213
|
+
# statistic that is collapsed over the number of simulated experiments.
|
|
214
|
+
# The statistics we can access include: mean, standard deviation
|
|
215
|
+
# minimum, maximum, median, median absolute deviation and the 25% and 75%
|
|
216
|
+
# quartiles. See the `ExpSimStats` data class for details.
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
exp_data: dict[tuple[str,...],np.ndarray] = (
|
|
220
|
+
exp_sim.run_experiments(num_exp_per_sim=100)
|
|
221
|
+
)
|
|
222
|
+
exp_stats: dict[tuple[str,...],sens.ExpSimStats] = (
|
|
223
|
+
sens.calc_exp_sim_stats(exp_data)
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
#%%
|
|
227
|
+
# 4. Analyse & visualise the results
|
|
228
|
+
# ----------------------------------
|
|
229
|
+
# Here we inspect our experiment simulation data dictionary to demonstrate the
|
|
230
|
+
# the data structures it contains so you can perform any follow up analysis on
|
|
231
|
+
# the data you want. We first print the tuple keys in our dictionary so we can
|
|
232
|
+
# see what data is available.
|
|
233
|
+
|
|
234
|
+
print(80*"-")
|
|
235
|
+
print("Keys in the simulated experimental data dictionary:")
|
|
236
|
+
for kk in exp_data:
|
|
237
|
+
print(kk)
|
|
238
|
+
print(80*"-")
|
|
239
|
+
print()
|
|
240
|
+
|
|
241
|
+
#%%
|
|
242
|
+
# .. image:: ../../../../_static/basics_ex3_term_out_0.png
|
|
243
|
+
# :alt: Terminal output showing the simulated experiment data keys
|
|
244
|
+
# :width: 700px
|
|
245
|
+
# :align: center
|
|
246
|
+
|
|
247
|
+
#%%
|
|
248
|
+
# We then inspect the simulated data output for few combinations of simulations
|
|
249
|
+
# and sensor arrays showing the shapes of the raw data arrays and the calculated
|
|
250
|
+
# statistics. Noting that our scalar field sensor has a differen number of
|
|
251
|
+
# component dimensions to our mechanical field sensor.
|
|
252
|
+
|
|
253
|
+
print(80*"-")
|
|
254
|
+
print("Thermal sensor array:")
|
|
255
|
+
print()
|
|
256
|
+
print(f" {exp_data[('sim_nominal','temp','meas')].shape=}")
|
|
257
|
+
print(" shape=(n_exps,n_sensors,n_field_comps,n_time_steps)")
|
|
258
|
+
print()
|
|
259
|
+
print(f" {exp_stats[('sim_nominal','temp','meas')].max.shape=}")
|
|
260
|
+
print(" shape=(n_sensors,n_field_comps,n_time_steps)")
|
|
261
|
+
print()
|
|
262
|
+
print(f" {exp_data[('sim_nominal','temp','pert_sens_pos')].shape=}")
|
|
263
|
+
print(" shape=(n_exps,n_sensors,coord[X,Y,Z])")
|
|
264
|
+
print()
|
|
265
|
+
print(80*"-")
|
|
266
|
+
print("Mechanical sensor array:")
|
|
267
|
+
print()
|
|
268
|
+
print(f" {exp_data[('sim_nominal','strain','meas')].shape=}")
|
|
269
|
+
print(" shape=(n_exps,n_sensors,n_field_comps,n_time_steps)")
|
|
270
|
+
print()
|
|
271
|
+
print(f" {exp_stats[('sim_nominal','strain','meas')].max.shape=}")
|
|
272
|
+
print(" shape=(n_sensors,n_field_comps,n_time_steps)")
|
|
273
|
+
print()
|
|
274
|
+
print(f" {exp_data[('sim_nominal','strain','pert_sens_pos')].shape=}")
|
|
275
|
+
print(" shape=(n_exps,n_sensors,coord[X,Y,Z])")
|
|
276
|
+
print()
|
|
277
|
+
print(80*"-")
|
|
278
|
+
|
|
279
|
+
#%%
|
|
280
|
+
# .. image:: ../../../../_static/basics_ex3_term_out_1.png
|
|
281
|
+
# :alt: Terminal output showing the simulated experiment data structures
|
|
282
|
+
# :width: 700px
|
|
283
|
+
# :align: center
|
|
284
|
+
|
|
285
|
+
#%%
|
|
286
|
+
# We can save the output experiment simulation data dicitionary to disk and load
|
|
287
|
+
# it using the `save_exp_sim_data` and `load_exp_sim_data` functions. First,
|
|
288
|
+
# we create the standard pyvale output directory in your current working
|
|
289
|
+
# directory so we can save our data there.
|
|
290
|
+
|
|
291
|
+
output_path: Path = Path.cwd() / "pyvale-output"
|
|
292
|
+
if not output_path.is_dir():
|
|
293
|
+
output_path.mkdir(parents=True, exist_ok=True)
|
|
294
|
+
|
|
295
|
+
sens.save_exp_sim_data(output_path/"ex3_exp_sim_data.npz",exp_data)
|
|
296
|
+
|
|
297
|
+
exp_data: dict[tuple[str,...],np.ndarray] = sens.load_exp_sim_data(
|
|
298
|
+
output_path/"ex3_exp_sim_data.npz"
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
#%%
|
|
302
|
+
# Now we are going to save visualisations of our temperature and strain sensor
|
|
303
|
+
# locations on the simulation mesh so we can verify we have setup their
|
|
304
|
+
# locations as we expected.
|
|
305
|
+
|
|
306
|
+
cam_pos = np.array([(59.354, 43.428, 69.946),
|
|
307
|
+
(-2.858, 13.189, 4.523),
|
|
308
|
+
(-0.215, 0.948, -0.233)])
|
|
309
|
+
|
|
310
|
+
pv_plot = sens.plot_point_sensors_on_sim(temp_sens,"temperature")
|
|
311
|
+
pv_plot.camera_position = cam_pos
|
|
312
|
+
|
|
313
|
+
# Set to False to show an interactive plot instead of saving the figure
|
|
314
|
+
pv_plot.off_screen = True
|
|
315
|
+
if pv_plot.off_screen:
|
|
316
|
+
pv_plot.screenshot(output_path/"basics_ex3_temp_locs.png")
|
|
317
|
+
else:
|
|
318
|
+
pv_plot.show()
|
|
319
|
+
|
|
320
|
+
# %%
|
|
321
|
+
# Visualisation of the virtual temperature sensor locations:
|
|
322
|
+
#
|
|
323
|
+
# .. image:: ../../../../_static/basics_ex3_temp_locs.png
|
|
324
|
+
# :alt: Visualisation of the virtual temperature sensor locations
|
|
325
|
+
# :width: 800px
|
|
326
|
+
# :align: center
|
|
327
|
+
|
|
328
|
+
pv_plot = sens.plot_point_sensors_on_sim(strain_sens,"strain_yy")
|
|
329
|
+
pv_plot.camera_position = cam_pos
|
|
330
|
+
|
|
331
|
+
# Set to False to show an interactive plot instead of saving the figure
|
|
332
|
+
pv_plot.off_screen = True
|
|
333
|
+
if pv_plot.off_screen:
|
|
334
|
+
pv_plot.screenshot(output_path/"basics_ex3_strain_locs.png")
|
|
335
|
+
else:
|
|
336
|
+
pv_plot.show()
|
|
337
|
+
|
|
338
|
+
# %%
|
|
339
|
+
# Visualisation of the virtual strain sensor locations:
|
|
340
|
+
#
|
|
341
|
+
# .. image:: ../../../../_static/basics_ex3_strain_locs.png
|
|
342
|
+
# :alt: Visualisation of the virtual strain sensor locations
|
|
343
|
+
# :width: 800px
|
|
344
|
+
# :align: center
|
|
345
|
+
|
|
346
|
+
#%%
|
|
347
|
+
# Finally, we plot the traces for all simulated experiments for our virtual
|
|
348
|
+
# temperature and strain sensors.
|
|
349
|
+
|
|
350
|
+
trace_opts = sens.TraceOptsExperiment(plot_all_exp_points=True)
|
|
351
|
+
|
|
352
|
+
(fig,ax) = sens.plot_exp_traces(
|
|
353
|
+
exp_data,
|
|
354
|
+
comp_ind=0,
|
|
355
|
+
sens_key="temp",
|
|
356
|
+
sim_key="sim_nominal",
|
|
357
|
+
trace_opts=trace_opts,
|
|
358
|
+
descriptor=sens.DescriptorFactory.temperature(),
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
save_fig: Path = output_path/"basics_ex3_traces_temp.png"
|
|
362
|
+
fig.savefig(save_fig,dpi=300,bbox_inches="tight")
|
|
363
|
+
|
|
364
|
+
# %%
|
|
365
|
+
# Virtual temperature sensor traces over all simulated experiments for the
|
|
366
|
+
# nominal input simulation:
|
|
367
|
+
#
|
|
368
|
+
# .. image:: ../../../../_static/basics_ex3_traces_temp.png
|
|
369
|
+
# :alt: Simulated temperature sensor traces.
|
|
370
|
+
# :width: 500px
|
|
371
|
+
# :align: center
|
|
372
|
+
|
|
373
|
+
strain_plot_keys = ("strain_xx","strain_yy","strain_xy")
|
|
374
|
+
for ii,kk in enumerate(strain_plot_keys):
|
|
375
|
+
(fig,ax) = sens.plot_exp_traces(
|
|
376
|
+
exp_data,
|
|
377
|
+
comp_ind=ii,
|
|
378
|
+
sens_key="strain",
|
|
379
|
+
sim_key="sim_nominal",
|
|
380
|
+
trace_opts=trace_opts,
|
|
381
|
+
descriptor=sens.DescriptorFactory.strain(sens.EDim.THREED),
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
save_fig: Path = output_path/f"basics_ex3_traces_{kk}.png"
|
|
385
|
+
fig.savefig(save_fig,dpi=300,bbox_inches="tight")
|
|
386
|
+
|
|
387
|
+
# %%
|
|
388
|
+
# Virtual strain sensor traces over all simulated experiments for the perturbed
|
|
389
|
+
# input simulation:
|
|
390
|
+
#
|
|
391
|
+
# .. image:: ../../../../_static/basics_ex3_traces_strain_yy.png
|
|
392
|
+
# :alt: Simulated strain sensor traces.
|
|
393
|
+
# :width: 500px
|
|
394
|
+
# :align: center
|
|
395
|
+
|
|
396
|
+
# Uncomment this to display the sensor trace plots
|
|
397
|
+
# plt.show()
|