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,383 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
import copy
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
import numpy as np
|
|
10
|
+
from scipy.spatial.transform import Rotation
|
|
11
|
+
|
|
12
|
+
from pyvale.sensorsim.field import IField
|
|
13
|
+
from pyvale.sensorsim.fieldsampler import sample_field_with_sensor_data
|
|
14
|
+
from pyvale.sensorsim.sensordata import SensorData
|
|
15
|
+
from pyvale.sensorsim.integratortype import EIntSpatialType
|
|
16
|
+
from pyvale.sensorsim.errorsimulator import (IErrSimulator,
|
|
17
|
+
EErrType,
|
|
18
|
+
EErrDep)
|
|
19
|
+
from pyvale.sensorsim.errordriftcalc import IDriftCalculator
|
|
20
|
+
from pyvale.sensorsim.generatorsrandom import IGenRandom
|
|
21
|
+
|
|
22
|
+
# TODO:
|
|
23
|
+
# - Implement different perturbed sampling times for each sensor or allow all
|
|
24
|
+
# to lock to the same time step as it works now.
|
|
25
|
+
# - Need to check that we perform field rotations correctly for sensor angles.
|
|
26
|
+
# - This needs to be updated to take rotation objects for offsets and to build
|
|
27
|
+
# and compose rotations
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass(slots=True)
|
|
31
|
+
class ErrFieldData:
|
|
32
|
+
"""Dataclass for controlling sensor parameter perturbations for field based
|
|
33
|
+
systematic errors (i.e. errors that require interpolation of the physical
|
|
34
|
+
field).
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
pos_offset_xyz: np.ndarray | None = None
|
|
38
|
+
"""Array of offsets to apply to the sensor positions for error calculation.
|
|
39
|
+
shape=(num_sensors,3) where the columns represent the X, Y and Z offsets in
|
|
40
|
+
simulation world coordinates. If None then no position offset is applied.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
ang_offset_zyx: np.ndarray | None = None
|
|
44
|
+
"""Array of offsets to apply to the sensor angles for error calculation.
|
|
45
|
+
shape=(num_sensors,3) where the columns represent rotations about offsets
|
|
46
|
+
about the Z, Y and X axis of the sensor in sensor local coordinates. If None
|
|
47
|
+
then no angular offsets are applied.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
time_offset: np.ndarray | None = None
|
|
51
|
+
"""Array of offsets to apply to the sampling times for all sensors. shape=(
|
|
52
|
+
num_time_steps,). If None then no time offset is applied.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
pos_rand_xyz: tuple[IGenRandom | None,
|
|
56
|
+
IGenRandom | None,
|
|
57
|
+
IGenRandom | None] = (None,None,None)
|
|
58
|
+
"""Tuple of random generators (implementations of `IGenRandom`
|
|
59
|
+
interface) for perturbing the sensor positions. The generators perturb the
|
|
60
|
+
X, Y and Z coordinates in order. If None then that axis is not randomly
|
|
61
|
+
perturbed from the nominal sensor position. Note that the random generators
|
|
62
|
+
should return position perturbations consistent with the simulation units.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
ang_rand_zyx: tuple[IGenRandom | None,
|
|
66
|
+
IGenRandom | None,
|
|
67
|
+
IGenRandom | None] = (None,None,None)
|
|
68
|
+
"""Tuple of random generators (implementations of `IGenRandom`
|
|
69
|
+
interface) for perturbing the sensor angles. The generators perturb
|
|
70
|
+
rotations about the the Z, Y and X axis in order. If None then that axis is
|
|
71
|
+
not randomly perturbed from the nominal sensor position.
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
time_rand: IGenRandom | None = None
|
|
75
|
+
"""Random generator for perturbing sensor array sampling times for the
|
|
76
|
+
purpose of calculating field based errors. If None then sensor sampling
|
|
77
|
+
times will not be perturbed from the nominal times.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
spatial_averager: EIntSpatialType | None = None
|
|
81
|
+
"""Type of spatial averaging to use for this sensor array for the purpose of
|
|
82
|
+
calculating field based errors. If None then no spatial averaging is
|
|
83
|
+
performed.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
spatial_dims: np.ndarray | None = None
|
|
87
|
+
"""The spatial dimension of the sensor in its local X,Y,Z coordinates for
|
|
88
|
+
the purpose of calculating field errors. Only used if spatial averager is
|
|
89
|
+
specified above. shape=(3,)
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
pos_lock_xyz: np.ndarray | None = None
|
|
93
|
+
"""Boolean array with shape=(num_sensors,coord[X,Y,Z]), Setting equal to
|
|
94
|
+
True will lock the axis for the particular sensor so that it will not have
|
|
95
|
+
it's position perturbed.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
ang_lock_zyx: np.ndarray | None = None
|
|
99
|
+
"""Boolean array with shape=(num_sensors,ang[Z,Y,X]), Setting equal to
|
|
100
|
+
True will lock the rotation about that axis for the particular sensor.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
# TODO: implement drift for other dimensions, pos/angle
|
|
104
|
+
time_drift: IDriftCalculator | None = None
|
|
105
|
+
"""Temporal drift calculation
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class ErrSysField(IErrSimulator):
|
|
110
|
+
"""Class for calculating field based systematic errors. Field based errors
|
|
111
|
+
are errors that require interpolation or sampling of the simulated physical
|
|
112
|
+
field such as perturbations of the sensor position or sampling time.
|
|
113
|
+
|
|
114
|
+
All perturbations to the sensor parameters (positions, sample times, angles
|
|
115
|
+
area averaging) are calculated first before performing a single
|
|
116
|
+
interpolation with the perturbed sensor state.
|
|
117
|
+
|
|
118
|
+
Implements the `IErrSimulator` interface.
|
|
119
|
+
"""
|
|
120
|
+
__slots__ = ("_field","_sensor_data_perturbed","_field_err_data","_err_dep")
|
|
121
|
+
|
|
122
|
+
def __init__(self,
|
|
123
|
+
field: IField,
|
|
124
|
+
field_err_data: ErrFieldData,
|
|
125
|
+
err_dep: EErrDep = EErrDep.DEPENDENT) -> None:
|
|
126
|
+
"""
|
|
127
|
+
Parameters
|
|
128
|
+
----------
|
|
129
|
+
field : IField
|
|
130
|
+
The physical field to interpolate which will be an implementation of
|
|
131
|
+
the `IField` interface. This will be a `FieldScalar`, `FieldVector`
|
|
132
|
+
or `FieldTensor` object.
|
|
133
|
+
field_err_data : ErrFieldData
|
|
134
|
+
Dataclass specifying which sensor array parameters will be perturbed
|
|
135
|
+
and how they will be perturbed. See the `ErrFieldData` class for
|
|
136
|
+
more detail
|
|
137
|
+
err_dep : EErrDep, optional
|
|
138
|
+
Error calculation dependence, by default EErrDep.DEPENDENT.
|
|
139
|
+
"""
|
|
140
|
+
self._field = field
|
|
141
|
+
self._field_err_data = field_err_data
|
|
142
|
+
self._err_dep = err_dep
|
|
143
|
+
self._sensor_data_perturbed = SensorData()
|
|
144
|
+
|
|
145
|
+
def get_error_dep(self) -> EErrDep:
|
|
146
|
+
return self._err_dep
|
|
147
|
+
|
|
148
|
+
def set_error_dep(self, dependence: EErrDep) -> None:
|
|
149
|
+
self._err_dep = dependence
|
|
150
|
+
|
|
151
|
+
def get_error_type(self) -> EErrType:
|
|
152
|
+
return EErrType.SYSTEMATIC
|
|
153
|
+
|
|
154
|
+
def get_perturbed_sensor_data(self) -> SensorData:
|
|
155
|
+
return self._sensor_data_perturbed
|
|
156
|
+
|
|
157
|
+
def reseed(self, seed: int | None = None) -> None:
|
|
158
|
+
for rr in self._field_err_data.pos_rand_xyz:
|
|
159
|
+
if rr is not None:
|
|
160
|
+
rr.reseed(seed)
|
|
161
|
+
|
|
162
|
+
for rr in self._field_err_data.ang_rand_zyx:
|
|
163
|
+
if rr is not None:
|
|
164
|
+
rr.reseed(seed)
|
|
165
|
+
|
|
166
|
+
if self._field_err_data.time_rand is not None:
|
|
167
|
+
self._field_err_data.time_rand.reseed(seed)
|
|
168
|
+
|
|
169
|
+
def sim_errs(self,
|
|
170
|
+
err_basis: np.ndarray,
|
|
171
|
+
sens_data: SensorData,
|
|
172
|
+
) -> tuple[np.ndarray, SensorData]:
|
|
173
|
+
self._sensor_data_perturbed = copy.deepcopy(sens_data)
|
|
174
|
+
self._sensor_data_perturbed.spatial_averager = \
|
|
175
|
+
self._field_err_data.spatial_averager
|
|
176
|
+
self._sensor_data_perturbed.spatial_dims = \
|
|
177
|
+
self._field_err_data.spatial_dims
|
|
178
|
+
|
|
179
|
+
self._sensor_data_perturbed.positions = _perturb_sensor_positions(
|
|
180
|
+
self._sensor_data_perturbed.positions,
|
|
181
|
+
self._field_err_data.pos_offset_xyz,
|
|
182
|
+
self._field_err_data.pos_rand_xyz,
|
|
183
|
+
self._field_err_data.pos_lock_xyz,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
self._sensor_data_perturbed.sample_times = _perturb_sample_times(
|
|
187
|
+
self._field.get_time_steps(),
|
|
188
|
+
self._sensor_data_perturbed.sample_times,
|
|
189
|
+
self._field_err_data.time_offset,
|
|
190
|
+
self._field_err_data.time_rand,
|
|
191
|
+
self._field_err_data.time_drift,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
self._sensor_data_perturbed.angles = _perturb_sensor_angles(
|
|
195
|
+
sens_data.positions.shape[0],
|
|
196
|
+
self._sensor_data_perturbed.angles,
|
|
197
|
+
self._field_err_data.ang_offset_zyx,
|
|
198
|
+
self._field_err_data.ang_rand_zyx,
|
|
199
|
+
self._field_err_data.ang_lock_zyx,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
sys_errs = sample_field_with_sensor_data(
|
|
203
|
+
self._field,
|
|
204
|
+
self._sensor_data_perturbed
|
|
205
|
+
) - err_basis
|
|
206
|
+
|
|
207
|
+
return (sys_errs,self._sensor_data_perturbed)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def _perturb_sensor_positions(sens_pos_nominal: np.ndarray,
|
|
211
|
+
pos_offset_xyz: np.ndarray | None,
|
|
212
|
+
pos_rand_xyz: tuple[IGenRandom | None,
|
|
213
|
+
IGenRandom | None,
|
|
214
|
+
IGenRandom | None] | None,
|
|
215
|
+
pos_loc_xyz: np.ndarray | None,
|
|
216
|
+
) -> np.ndarray:
|
|
217
|
+
"""Helper function for perturbing the sensor positions from their nominal
|
|
218
|
+
positions based on the user specified offset and random generators for each
|
|
219
|
+
axis.
|
|
220
|
+
|
|
221
|
+
Parameters
|
|
222
|
+
----------
|
|
223
|
+
sens_pos_nominal : np.ndarray
|
|
224
|
+
Nominal sensor positions as an array with shape=(num_sensors,3) where
|
|
225
|
+
the columns represent the position in the X, Y and Z axes.
|
|
226
|
+
pos_offset_xyz : np.ndarray | None
|
|
227
|
+
Offsets to apply to the sensor positions as an array with shape=
|
|
228
|
+
(num_sensors,3) wherethe columns represent the position in the X, Y and
|
|
229
|
+
Z axes. If None then no offset is applied.
|
|
230
|
+
pos_rand_xyz : tuple[IGenRandom | None,
|
|
231
|
+
IGenRandom | None,
|
|
232
|
+
IGenRandom | None] | None
|
|
233
|
+
Random generators for sensor position perturbations along the the X, Y
|
|
234
|
+
and Z axes. If None then no perturbation is applied.
|
|
235
|
+
pos_loc_xyz : np.ndarray | None
|
|
236
|
+
Boolean mask with shape=(num_sensors,3), where the mask is true the
|
|
237
|
+
coordinate is locked and will not perturb based on offset or rand above.
|
|
238
|
+
|
|
239
|
+
Returns
|
|
240
|
+
-------
|
|
241
|
+
np.ndarray
|
|
242
|
+
Array of perturbed sensors positions with shape=(num_sensors,3) where
|
|
243
|
+
the columns represent the position in the X, Y and Z axes.
|
|
244
|
+
"""
|
|
245
|
+
sens_pos_perturbed = np.copy(sens_pos_nominal)
|
|
246
|
+
|
|
247
|
+
if pos_offset_xyz is not None:
|
|
248
|
+
sens_pos_perturbed = sens_pos_perturbed + pos_offset_xyz
|
|
249
|
+
|
|
250
|
+
if pos_rand_xyz is not None:
|
|
251
|
+
for ii,rng in enumerate(pos_rand_xyz):
|
|
252
|
+
if rng is not None:
|
|
253
|
+
sens_pos_perturbed[:,ii] = sens_pos_perturbed[:,ii] + \
|
|
254
|
+
rng.generate(shape=sens_pos_perturbed.shape[0])
|
|
255
|
+
|
|
256
|
+
if pos_loc_xyz is not None:
|
|
257
|
+
sens_pos_perturbed[pos_loc_xyz] = sens_pos_nominal[pos_loc_xyz]
|
|
258
|
+
|
|
259
|
+
return sens_pos_perturbed
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
def _perturb_sample_times(sim_time: np.ndarray,
|
|
263
|
+
time_nominal: np.ndarray | None,
|
|
264
|
+
time_offset: np.ndarray | None,
|
|
265
|
+
time_rand: IGenRandom | None,
|
|
266
|
+
time_drift: IDriftCalculator | None
|
|
267
|
+
) -> np.ndarray | None:
|
|
268
|
+
"""Helper function for calculating perturbed sensor sampling times for the
|
|
269
|
+
purpose of calculating field based systematic errors.
|
|
270
|
+
|
|
271
|
+
Parameters
|
|
272
|
+
----------
|
|
273
|
+
sim_time : np.ndarray
|
|
274
|
+
Simulation time steps for the underlying physical field.
|
|
275
|
+
time_nominal : np.ndarray | None
|
|
276
|
+
Nominal sensor sampling times. If None then the simulation time steps
|
|
277
|
+
are assumed to be the sampling times.
|
|
278
|
+
time_offset : np.ndarray | None
|
|
279
|
+
Array of time offsets to apply to all sensors. If None then no offsets
|
|
280
|
+
are applied.
|
|
281
|
+
time_rand : IGenRandom | None
|
|
282
|
+
Random generator for perturbing the sampling times of all sensors. If
|
|
283
|
+
None then no random perturbation of sampling times occurs.
|
|
284
|
+
time_drift : IDriftCalculator | None
|
|
285
|
+
Drift function for calculating temporal sampling drift. If None then no
|
|
286
|
+
temporal drift is applied.
|
|
287
|
+
|
|
288
|
+
Returns
|
|
289
|
+
-------
|
|
290
|
+
np.ndarray | None
|
|
291
|
+
Array of perturbed sample times
|
|
292
|
+
"""
|
|
293
|
+
if time_nominal is None:
|
|
294
|
+
if (time_offset is not None
|
|
295
|
+
or time_rand is not None
|
|
296
|
+
or time_drift is not None):
|
|
297
|
+
time_nominal = sim_time
|
|
298
|
+
else:
|
|
299
|
+
return None
|
|
300
|
+
|
|
301
|
+
time_perturbed = np.copy(time_nominal)
|
|
302
|
+
|
|
303
|
+
if time_offset is not None:
|
|
304
|
+
time_perturbed = time_perturbed + time_offset
|
|
305
|
+
if time_rand is not None:
|
|
306
|
+
time_perturbed = time_perturbed + time_rand.generate(
|
|
307
|
+
shape=time_nominal.shape)
|
|
308
|
+
if time_drift is not None:
|
|
309
|
+
time_perturbed = time_perturbed + time_drift.calc_drift(time_nominal)
|
|
310
|
+
|
|
311
|
+
return time_perturbed
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def _perturb_sensor_angles(n_sensors: int,
|
|
315
|
+
angles_nominal: tuple[Rotation,...] | None,
|
|
316
|
+
angle_offsets_zyx: np.ndarray | None,
|
|
317
|
+
rand_ang_zyx: tuple[IGenRandom | None,
|
|
318
|
+
IGenRandom | None,
|
|
319
|
+
IGenRandom | None] | None,
|
|
320
|
+
angle_loc_zyx: np.ndarray | None,
|
|
321
|
+
) -> tuple[Rotation,...] | None:
|
|
322
|
+
"""Helper function for perturbing sensor angles for the purpose of
|
|
323
|
+
calculating field based systematic errors.
|
|
324
|
+
|
|
325
|
+
Parameters
|
|
326
|
+
----------
|
|
327
|
+
n_sensors : int
|
|
328
|
+
Number of sensors in the sensor array.
|
|
329
|
+
angles_nominal : tuple[Rotation,...] | None
|
|
330
|
+
The nominal angles of the sensors as a tuple of scipy Rotation objects.
|
|
331
|
+
This tuple should have length equal to the number of sensors. If None
|
|
332
|
+
then an initial orienation of [0,0,0] is assumed.
|
|
333
|
+
angle_offsets_zyx : np.ndarray | None
|
|
334
|
+
Angle offsets to apply to the sensor array as an array with shape=(
|
|
335
|
+
num_sensors,3) where the columns are the rotations about Z, Y and X in
|
|
336
|
+
degrees. If None then no offsets are applied.
|
|
337
|
+
rand_ang_zyx : tuple[IGenRandom | None,
|
|
338
|
+
IGenRandom | None,
|
|
339
|
+
IGenRandom | None] | None
|
|
340
|
+
Random generators for perturbing sensor angles about the Z, Y and X axis
|
|
341
|
+
respectively. If None then no random perturbation to the sensor angle
|
|
342
|
+
occurs.
|
|
343
|
+
angle_loc_zyx : np.ndarray | None
|
|
344
|
+
Boolean mask with shape=(num_sensors,3), where the mask is true the
|
|
345
|
+
angle is locked and the sensor will not rotate about that axis despite
|
|
346
|
+
the offset of rand generators above,
|
|
347
|
+
|
|
348
|
+
Returns
|
|
349
|
+
-------
|
|
350
|
+
tuple[Rotation,...] | None
|
|
351
|
+
Rotation object giving each sensors perturbed angle. If None then the
|
|
352
|
+
no sensors have had their angles perturbed.
|
|
353
|
+
"""
|
|
354
|
+
if angles_nominal is None:
|
|
355
|
+
if angle_offsets_zyx is not None or rand_ang_zyx is not None:
|
|
356
|
+
angles_nominal = n_sensors * \
|
|
357
|
+
(Rotation.from_euler("zyx",[0,0,0], degrees=True),)
|
|
358
|
+
else:
|
|
359
|
+
return None
|
|
360
|
+
|
|
361
|
+
angles_perturbed = [Rotation.from_euler("zyx",[0,0,0], degrees=True)] * \
|
|
362
|
+
len(angles_nominal)
|
|
363
|
+
for ii,rot_nom in enumerate(angles_nominal): # loop over sensors
|
|
364
|
+
# NOTE: adding angles here might not be correct
|
|
365
|
+
sensor_rot_angs = np.zeros((3,))
|
|
366
|
+
|
|
367
|
+
if angle_offsets_zyx is not None:
|
|
368
|
+
sensor_rot_angs = sensor_rot_angs + angle_offsets_zyx[ii,:]
|
|
369
|
+
|
|
370
|
+
if rand_ang_zyx is not None:
|
|
371
|
+
for jj,rand_ang in enumerate(rand_ang_zyx): # loop over components
|
|
372
|
+
if rand_ang is not None:
|
|
373
|
+
sensor_rot_angs[jj] = sensor_rot_angs[jj] + \
|
|
374
|
+
rand_ang.generate(shape=(1,))[0]
|
|
375
|
+
|
|
376
|
+
if angle_loc_zyx is not None:
|
|
377
|
+
# No rotation about locked axes using mask
|
|
378
|
+
sensor_rot_angs[angle_loc_zyx[ii,:]] = 0.0
|
|
379
|
+
|
|
380
|
+
sensor_rot = Rotation.from_euler("zyx",sensor_rot_angs, degrees=True)
|
|
381
|
+
angles_perturbed[ii] = sensor_rot*rot_nom
|
|
382
|
+
|
|
383
|
+
return tuple(angles_perturbed)
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
from pyvale.sensorsim.errorsimulator import (IErrSimulator,
|
|
9
|
+
EErrType,
|
|
10
|
+
EErrDep)
|
|
11
|
+
from pyvale.sensorsim.generatorsrandom import IGenRandom
|
|
12
|
+
from pyvale.sensorsim.sensordata import SensorData
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ErrSysOffset(IErrSimulator):
|
|
16
|
+
"""Systematic error calculator applying a constant offset to all simulated
|
|
17
|
+
sensor measurements. Implements the `IErrSimulator` interface.
|
|
18
|
+
"""
|
|
19
|
+
__slots__ = ("_offset","_err_dep")
|
|
20
|
+
|
|
21
|
+
def __init__(self,
|
|
22
|
+
offset: float,
|
|
23
|
+
err_dep: EErrDep = EErrDep.INDEPENDENT) -> None:
|
|
24
|
+
"""
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
offset : float
|
|
28
|
+
Constant offset to apply to all simulated measurements from the
|
|
29
|
+
sensor array.
|
|
30
|
+
err_dep : EErrDependence, optional
|
|
31
|
+
Error calculation dependence, by default EErrDependence.INDEPENDENT.
|
|
32
|
+
"""
|
|
33
|
+
self._offset = offset
|
|
34
|
+
self._err_dep = err_dep
|
|
35
|
+
|
|
36
|
+
def get_error_dep(self) -> EErrDep:
|
|
37
|
+
return self._err_dep
|
|
38
|
+
|
|
39
|
+
def set_error_dep(self, dependence: EErrDep) -> None:
|
|
40
|
+
self._err_dep = dependence
|
|
41
|
+
|
|
42
|
+
def get_error_type(self) -> EErrType:
|
|
43
|
+
return EErrType.SYSTEMATIC
|
|
44
|
+
|
|
45
|
+
def reseed(self, seed: int | None = None) -> None:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
def sim_errs(self,
|
|
49
|
+
err_basis: np.ndarray,
|
|
50
|
+
sens_data: SensorData,
|
|
51
|
+
) -> tuple[np.ndarray, SensorData]:
|
|
52
|
+
return (self._offset*np.ones(shape=err_basis.shape),sens_data)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ErrSysOffsetPercent(IErrSimulator):
|
|
56
|
+
"""Systematic error calculator applying a constant offset as a percentage of
|
|
57
|
+
the sensor reading to each individual simulated sensor measurement.
|
|
58
|
+
Implements the `IErrSimulator` interface.
|
|
59
|
+
"""
|
|
60
|
+
__slots__ = ("_offset_percent","_err_dep")
|
|
61
|
+
|
|
62
|
+
def __init__(self,
|
|
63
|
+
offset_percent: float,
|
|
64
|
+
err_dep: EErrDep = EErrDep.INDEPENDENT) -> None:
|
|
65
|
+
"""
|
|
66
|
+
Parameters
|
|
67
|
+
----------
|
|
68
|
+
offset_percent : float
|
|
69
|
+
Percentage offset to apply to apply to all simulated measurements
|
|
70
|
+
from the sensor array.
|
|
71
|
+
err_dep : EErrDependence, optional
|
|
72
|
+
Error calculation dependence, by default EErrDependence.INDEPENDENT
|
|
73
|
+
"""
|
|
74
|
+
self._offset_percent = offset_percent
|
|
75
|
+
self._err_dep = err_dep
|
|
76
|
+
|
|
77
|
+
def get_error_dep(self) -> EErrDep:
|
|
78
|
+
return self._err_dep
|
|
79
|
+
|
|
80
|
+
def set_error_dep(self, dependence: EErrDep) -> None:
|
|
81
|
+
self._err_dep = dependence
|
|
82
|
+
|
|
83
|
+
def get_error_type(self) -> EErrType:
|
|
84
|
+
return EErrType.SYSTEMATIC
|
|
85
|
+
|
|
86
|
+
def reseed(self, seed: int | None = None) -> None:
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
def sim_errs(self,
|
|
90
|
+
err_basis: np.ndarray,
|
|
91
|
+
sens_data: SensorData,
|
|
92
|
+
) -> tuple[np.ndarray, SensorData]:
|
|
93
|
+
return (self._offset_percent/100 *
|
|
94
|
+
err_basis *
|
|
95
|
+
np.ones(shape=err_basis.shape),
|
|
96
|
+
sens_data)
|
|
97
|
+
|
|
98
|
+
class ErrSysGen(IErrSimulator):
|
|
99
|
+
"""Systematic error calculator for applying a unique offset to each sensor
|
|
100
|
+
by sample from a user specified probability distribution (an implementation
|
|
101
|
+
of the `IGeneratorRandom` interface).
|
|
102
|
+
|
|
103
|
+
Implements the `IErrSimulator` interface.
|
|
104
|
+
"""
|
|
105
|
+
__slots__ = ("_generator","_err_dep")
|
|
106
|
+
|
|
107
|
+
def __init__(self,
|
|
108
|
+
generator: IGenRandom,
|
|
109
|
+
err_dep: EErrDep = EErrDep.INDEPENDENT) -> None:
|
|
110
|
+
"""
|
|
111
|
+
Parameters
|
|
112
|
+
----------
|
|
113
|
+
generator : IGenRandom
|
|
114
|
+
Random generator object used to calculate the systematic error in
|
|
115
|
+
simulation units.
|
|
116
|
+
err_dep : EErrDependence, optional
|
|
117
|
+
Error calculation dependence, by default EErrDependence.INDEPENDENT.
|
|
118
|
+
"""
|
|
119
|
+
self._generator = generator
|
|
120
|
+
self._err_dep = err_dep
|
|
121
|
+
|
|
122
|
+
def get_error_dep(self) -> EErrDep:
|
|
123
|
+
return self._err_dep
|
|
124
|
+
|
|
125
|
+
def set_error_dep(self, dependence: EErrDep) -> None:
|
|
126
|
+
self._err_dep = dependence
|
|
127
|
+
|
|
128
|
+
def get_error_type(self) -> EErrType:
|
|
129
|
+
return EErrType.SYSTEMATIC
|
|
130
|
+
|
|
131
|
+
def reseed(self, seed: int | None = None) -> None:
|
|
132
|
+
self._generator.reseed(seed)
|
|
133
|
+
|
|
134
|
+
def sim_errs(self,
|
|
135
|
+
err_basis: np.ndarray,
|
|
136
|
+
sens_data: SensorData,
|
|
137
|
+
) -> tuple[np.ndarray, SensorData]:
|
|
138
|
+
err_shape = np.array(err_basis.shape)
|
|
139
|
+
err_shape[-1] = 1
|
|
140
|
+
|
|
141
|
+
sys_errs = self._generator.generate(shape=err_shape)
|
|
142
|
+
|
|
143
|
+
tile_shape = np.array(err_basis.shape)
|
|
144
|
+
tile_shape[0:-1] = 1
|
|
145
|
+
sys_errs = np.tile(sys_errs,tuple(tile_shape))
|
|
146
|
+
|
|
147
|
+
return (sys_errs,sens_data)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class ErrSysGenPercent(IErrSimulator):
|
|
151
|
+
"""Systematic error calculator for applying a unique percentage offset to
|
|
152
|
+
each sensor by sample from a user specified probability distribution (an
|
|
153
|
+
implementation of the `IGeneratorRandom` interface). This class assumes the
|
|
154
|
+
random generator is for a percentage error based on the input error basis
|
|
155
|
+
and therefore it supports error dependence.
|
|
156
|
+
|
|
157
|
+
The percentage error is calculated based on the ground truth if the error
|
|
158
|
+
dependence is `INDEPENDENT` or based on the accumulated sensor measurement
|
|
159
|
+
if the dependence is `DEPENDENT`.
|
|
160
|
+
|
|
161
|
+
Implements the `IErrSimulator` interface.
|
|
162
|
+
"""
|
|
163
|
+
__slots__ = ("_generator","_err_dep")
|
|
164
|
+
|
|
165
|
+
def __init__(self,
|
|
166
|
+
generator: IGenRandom,
|
|
167
|
+
err_dep: EErrDep = EErrDep.INDEPENDENT) -> None:
|
|
168
|
+
"""
|
|
169
|
+
Parameters
|
|
170
|
+
----------
|
|
171
|
+
generator : IGenRandom
|
|
172
|
+
Random generator which returns a percentage error in the range
|
|
173
|
+
(0,100)
|
|
174
|
+
err_dep : EErrDep, optional
|
|
175
|
+
Error calculation dependence, by default EErrDep.INDEPENDENT
|
|
176
|
+
"""
|
|
177
|
+
self._generator = generator
|
|
178
|
+
self._err_dep = err_dep
|
|
179
|
+
|
|
180
|
+
def get_error_dep(self) -> EErrDep:
|
|
181
|
+
return self._err_dep
|
|
182
|
+
|
|
183
|
+
def set_error_dep(self, dependence: EErrDep) -> None:
|
|
184
|
+
self._err_dep = dependence
|
|
185
|
+
|
|
186
|
+
def get_error_type(self) -> EErrType:
|
|
187
|
+
return EErrType.SYSTEMATIC
|
|
188
|
+
|
|
189
|
+
def reseed(self, seed: int | None = None) -> None:
|
|
190
|
+
self._generator.reseed(seed)
|
|
191
|
+
|
|
192
|
+
def sim_errs(self,
|
|
193
|
+
err_basis: np.ndarray,
|
|
194
|
+
sens_data: SensorData,
|
|
195
|
+
) -> tuple[np.ndarray, SensorData]:
|
|
196
|
+
err_shape = np.array(err_basis.shape)
|
|
197
|
+
err_shape[-1] = 1
|
|
198
|
+
|
|
199
|
+
sys_errs = self._generator.generate(shape=err_shape)
|
|
200
|
+
# Convert percent to decimal
|
|
201
|
+
sys_errs = sys_errs/100.0
|
|
202
|
+
|
|
203
|
+
tile_shape = np.array(err_basis.shape)
|
|
204
|
+
tile_shape[0:-1] = 1
|
|
205
|
+
sys_errs = np.tile(sys_errs,tuple(tile_shape))
|
|
206
|
+
sys_errs = err_basis * sys_errs
|
|
207
|
+
|
|
208
|
+
return (sys_errs,sens_data)
|
|
209
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
class VisError(Exception):
|
|
8
|
+
pass
|
|
9
|
+
|
|
10
|
+
class Collapse2Dto3DError(Exception):
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
class ExpSimError(Exception):
|
|
14
|
+
pass
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# pyvale: the python validation engine
|
|
3
|
+
# License: MIT
|
|
4
|
+
# Copyright (C) 2025 The Computer Aided Validation Team
|
|
5
|
+
# ==============================================================================
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
This module contains functions for saving/loading the results of simulated
|
|
9
|
+
experiments with virtual sensor arrays.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def save_exp_sim_data(save_file: Path,
|
|
17
|
+
exp_data: dict[tuple[str,...],np.ndarray]) -> None:
|
|
18
|
+
"""Saves the results of a simulated experiment to disk.
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
save_file : Path
|
|
23
|
+
Path including file name to where the simulated experiment data should
|
|
24
|
+
be saved.
|
|
25
|
+
exp_data : dict[tuple[str,...],np.ndarray]
|
|
26
|
+
The simulated experiment data dictionary to save.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
flat_keys = []
|
|
30
|
+
key_lens = []
|
|
31
|
+
save_dict = {}
|
|
32
|
+
for kk,vv in exp_data.items():
|
|
33
|
+
key_lens.append(len(kk))
|
|
34
|
+
for ss in kk:
|
|
35
|
+
flat_keys.append(ss)
|
|
36
|
+
|
|
37
|
+
new_key = "-".join(kk)
|
|
38
|
+
save_dict[new_key] = vv
|
|
39
|
+
|
|
40
|
+
save_dict["keys"] = np.array(flat_keys,dtype='U')
|
|
41
|
+
save_dict["key_lens"] = np.array(key_lens,dtype=np.uint8)
|
|
42
|
+
|
|
43
|
+
# exp_data:
|
|
44
|
+
# dict[tuple[str,...],shape=(n_exps,n_sens,n_comps,n_time_steps)]
|
|
45
|
+
# The ** operator unpacks the dictionary into function keyword arguments
|
|
46
|
+
np.savez(save_file,**save_dict,allow_pickle=False)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def load_exp_sim_data(load_file: Path) -> dict[str,np.ndarray]:
|
|
50
|
+
"""Loads the results of a simulated experiment from disk.
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
load_file : Path
|
|
55
|
+
Path and file name for the file where the data should be loaded from.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
dict[tuple[str,...],np.ndarray]
|
|
60
|
+
The simulated experiment data dictionary loaded from disk.
|
|
61
|
+
"""
|
|
62
|
+
# NOTE: npz files are loaded in a 'lazy' manner so we must use a context
|
|
63
|
+
# manager here and convert to a dictionary which forces everything in the
|
|
64
|
+
# npz to be directly loaded into memory.
|
|
65
|
+
flat_data = {}
|
|
66
|
+
with np.load(load_file) as npzfile:
|
|
67
|
+
flat_data = dict(npzfile)
|
|
68
|
+
|
|
69
|
+
flat_keys = flat_data["keys"]
|
|
70
|
+
key_lens = flat_data["key_lens"]
|
|
71
|
+
flat_data.pop("keys")
|
|
72
|
+
flat_data.pop("key_lens")
|
|
73
|
+
|
|
74
|
+
exp_data = {}
|
|
75
|
+
key_ind: int = 0
|
|
76
|
+
for key_len in key_lens:
|
|
77
|
+
tuple_key = tuple(flat_keys[key_ind:key_ind+key_len])
|
|
78
|
+
key_ind += key_len
|
|
79
|
+
|
|
80
|
+
for join_key in flat_data:
|
|
81
|
+
str_key_count: int = 0
|
|
82
|
+
|
|
83
|
+
for str_key in tuple_key:
|
|
84
|
+
if str_key in join_key:
|
|
85
|
+
str_key_count += 1
|
|
86
|
+
|
|
87
|
+
if str_key_count == key_len:
|
|
88
|
+
exp_data[tuple_key] = flat_data[join_key]
|
|
89
|
+
flat_data.pop(join_key)
|
|
90
|
+
break
|
|
91
|
+
|
|
92
|
+
# dict[tuple[str,...],shape=(n_sims,n_exps,n_sens,n_comps,n_time_steps)]
|
|
93
|
+
return exp_data
|
|
94
|
+
|