PyOpenMagnetics 1.7.5__cp314-cp314-win_amd64.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.
- PyOpenMagnetics/AGENTS.md +905 -0
- PyOpenMagnetics/KirchhoffApi.dll +0 -0
- PyOpenMagnetics/PyOpenMagnetics.cp314-win_amd64.pyd +0 -0
- PyOpenMagnetics/PyOpenMagnetics.pyi +1017 -0
- PyOpenMagnetics/__init__.py +5 -0
- PyOpenMagnetics/_build_info.py +5 -0
- PyOpenMagnetics/include/eigen3/Eigen/Cholesky +45 -0
- PyOpenMagnetics/include/eigen3/Eigen/CholmodSupport +48 -0
- PyOpenMagnetics/include/eigen3/Eigen/Core +384 -0
- PyOpenMagnetics/include/eigen3/Eigen/Dense +7 -0
- PyOpenMagnetics/include/eigen3/Eigen/Eigen +2 -0
- PyOpenMagnetics/include/eigen3/Eigen/Eigenvalues +60 -0
- PyOpenMagnetics/include/eigen3/Eigen/Geometry +59 -0
- PyOpenMagnetics/include/eigen3/Eigen/Householder +29 -0
- PyOpenMagnetics/include/eigen3/Eigen/IterativeLinearSolvers +48 -0
- PyOpenMagnetics/include/eigen3/Eigen/Jacobi +32 -0
- PyOpenMagnetics/include/eigen3/Eigen/KLUSupport +41 -0
- PyOpenMagnetics/include/eigen3/Eigen/LU +47 -0
- PyOpenMagnetics/include/eigen3/Eigen/MetisSupport +35 -0
- PyOpenMagnetics/include/eigen3/Eigen/OrderingMethods +70 -0
- PyOpenMagnetics/include/eigen3/Eigen/PaStiXSupport +49 -0
- PyOpenMagnetics/include/eigen3/Eigen/PardisoSupport +35 -0
- PyOpenMagnetics/include/eigen3/Eigen/QR +50 -0
- PyOpenMagnetics/include/eigen3/Eigen/QtAlignedMalloc +39 -0
- PyOpenMagnetics/include/eigen3/Eigen/SPQRSupport +34 -0
- PyOpenMagnetics/include/eigen3/Eigen/SVD +50 -0
- PyOpenMagnetics/include/eigen3/Eigen/Sparse +34 -0
- PyOpenMagnetics/include/eigen3/Eigen/SparseCholesky +37 -0
- PyOpenMagnetics/include/eigen3/Eigen/SparseCore +69 -0
- PyOpenMagnetics/include/eigen3/Eigen/SparseLU +50 -0
- PyOpenMagnetics/include/eigen3/Eigen/SparseQR +36 -0
- PyOpenMagnetics/include/eigen3/Eigen/StdDeque +27 -0
- PyOpenMagnetics/include/eigen3/Eigen/StdList +26 -0
- PyOpenMagnetics/include/eigen3/Eigen/StdVector +27 -0
- PyOpenMagnetics/include/eigen3/Eigen/SuperLUSupport +64 -0
- PyOpenMagnetics/include/eigen3/Eigen/UmfPackSupport +40 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Array.h +417 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Assign.h +90 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Block.h +448 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Dot.h +318 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/IO.h +258 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Inverse.h +117 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Map.h +171 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/MapBase.h +310 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Matrix.h +565 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Product.h +191 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Random.h +218 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Redux.h +515 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Ref.h +381 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Replicate.h +142 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Reverse.h +217 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Select.h +164 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Solve.h +188 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Stride.h +116 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Swap.h +68 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Transpose.h +464 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/Visitor.h +381 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Householder/Householder.h +176 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/Determinant.h +117 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/details.h +84 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/Image.h +82 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/Kernel.h +79 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/blas.h +440 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapack.h +152 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
- PyOpenMagnetics/include/eigen3/signature_of_eigen3_matrix_library +1 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/AdolcForward +159 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/AutoDiff +46 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/BVH +95 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/EulerAngles +43 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/FFT +419 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/Polynomials +137 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/Skyline +39 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/SparseExtra +54 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/Splines +35 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
- PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
- PyOpenMagnetics/include/pybind11_json/pybind11_json.hpp +249 -0
- PyOpenMagnetics/llms.txt +815 -0
- PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonConfig.cmake +52 -0
- PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonConfigVersion.cmake +32 -0
- PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonTargets.cmake +106 -0
- PyOpenMagnetics/share/eigen3/cmake/Eigen3Config.cmake +37 -0
- PyOpenMagnetics/share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
- PyOpenMagnetics/share/eigen3/cmake/Eigen3Targets.cmake +106 -0
- PyOpenMagnetics/share/eigen3/cmake/UseEigen3.cmake +6 -0
- PyOpenMagnetics/share/pkgconfig/pybind11_json.pc +7 -0
- pyopenmagnetics-1.7.5.dist-info/METADATA +487 -0
- pyopenmagnetics-1.7.5.dist-info/RECORD +550 -0
- pyopenmagnetics-1.7.5.dist-info/WHEEL +5 -0
- pyopenmagnetics-1.7.5.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,905 @@
|
|
|
1
|
+
# AGENTS.md — PyOpenMagnetics AI Assistant Guide
|
|
2
|
+
|
|
3
|
+
> **MKF is authoritative for all magnetics math.** Before implementing any
|
|
4
|
+
> magnetics calculation or assuming an API exists, consult
|
|
5
|
+
> [`../MKF/CAPABILITIES.md`](../MKF/CAPABILITIES.md). If a needed capability
|
|
6
|
+
> isn't listed there, ask — don't reinvent it here.
|
|
7
|
+
|
|
8
|
+
> **Two stub files in this repo:**
|
|
9
|
+
> - `PyOpenMagnetics.pyi` — **curated**. Authoritative on arg conventions
|
|
10
|
+
> and gotchas. Read this first.
|
|
11
|
+
> - `PyOpenMagnetics.generated.pyi` — **auto-generated** from the compiled
|
|
12
|
+
> `.so` via pybind11-stubgen. Wider coverage (every exported symbol) but
|
|
13
|
+
> raw — signatures are right, conventions may not be. Use as a discovery
|
|
14
|
+
> index; when it disagrees with the curated stub, trust the curated one.
|
|
15
|
+
|
|
16
|
+
> **This file is the SINGLE SOURCE OF TRUTH for any AI agent using PyOpenMagnetics.**
|
|
17
|
+
> Every instruction was derived from reading the C++ source code
|
|
18
|
+
> (`converter.cpp`, `magnetics.cpp`, `cores.cpp`, `wires.cpp`, `settings.cpp`,
|
|
19
|
+
> `database.cpp`, `CoreAdviser.h/.cpp`, `MagneticAdviser.h/.cpp`, `MAS.hpp`,
|
|
20
|
+
> `Flyback.h/.cpp`, all converter model headers, and all adviser files)
|
|
21
|
+
> and **validated by running the library**.
|
|
22
|
+
>
|
|
23
|
+
> When this document contradicts the `.pyi` stubs or bundled examples,
|
|
24
|
+
> **trust this document**.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🚨 STOP! READ THIS FIRST — COMMON AGENT MISTAKES
|
|
30
|
+
|
|
31
|
+
**Before writing ANY code, check these three things:**
|
|
32
|
+
|
|
33
|
+
1. **NEVER use `json.dumps()`** — Pass Python dicts directly to all functions.
|
|
34
|
+
`json.dumps()` converts your dict to a string, causing schema errors.
|
|
35
|
+
|
|
36
|
+
2. **NEVER invent your own JSON structure** — Copy the EXACT schemas from Section 5.
|
|
37
|
+
Fields like `"inputs"`, `"outputs"`, `"voltage"` are WRONG. Use `"inputVoltage"`, `"operatingPoints"`, etc.
|
|
38
|
+
|
|
39
|
+
3. **NEVER abandon Method A after an error** — If you get `"Input JSON does not conform to schema!"`,
|
|
40
|
+
the fix is to correct your JSON, NOT to fall back to manual calculations.
|
|
41
|
+
|
|
42
|
+
**See Section 13.1 for wrong vs correct code examples.**
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## ⛔ THE #1 RULE — DO NOT USE MANUAL CALCULATIONS
|
|
46
|
+
|
|
47
|
+
When a user asks you to design a magnetic component for a power converter:
|
|
48
|
+
|
|
49
|
+
1. **ALWAYS** use `design_magnetics_from_converter()` first (Method A — single call)
|
|
50
|
+
2. If Method A fails (e.g., ngspice cannot initialize), fall back to
|
|
51
|
+
`process_converter()` → `calculate_advised_magnetics()` (Method B)
|
|
52
|
+
3. **NEVER** calculate turns ratios, inductance, core sizes, or wire gauges manually
|
|
53
|
+
4. **NEVER** fall back to textbook formulas — fix the API call instead
|
|
54
|
+
|
|
55
|
+
The MKF engine handles complex magnetic field distributions, temperature-dependent
|
|
56
|
+
material properties, geometrical fringing effects, and real commercial core database
|
|
57
|
+
constraints that manual formulas cannot replicate.
|
|
58
|
+
|
|
59
|
+
### â±ï¸ TIMEOUT IS NOT A FAILURE â€" DO NOT ABANDON METHOD A!
|
|
60
|
+
|
|
61
|
+
**If Method A times out, this is NOT a reason to switch to Method B.**
|
|
62
|
+
|
|
63
|
+
The design computation is CPU-intensive:
|
|
64
|
+
- `"available cores"` searches 1301+ shapes and can take **60â€"180+ seconds**
|
|
65
|
+
- `"standard cores"` is faster (10â€"30 seconds) but has fewer options
|
|
66
|
+
|
|
67
|
+
**If your environment has a short timeout (e.g., 2â€"3 minutes):**
|
|
68
|
+
1. **First try:** Use `"standard cores"` instead of `"available cores"` â€" this is much faster
|
|
69
|
+
2. **If still timing out:** Increase your timeout to 5+ minutes, NOT switch to Method B
|
|
70
|
+
3. **Only use Method B** if Method A returns an actual error (schema error, ngspice failure, etc.)
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
# ✅ CORRECT â€" use "standard cores" for faster execution
|
|
74
|
+
result = PyOM.design_magnetics_from_converter(
|
|
75
|
+
"flyback", flyback, 3, "standard cores", True, None # faster!
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# ⌠WRONG â€" abandoning Method A just because "available cores" is slow
|
|
79
|
+
# Don't do this: "it timed out, so I'll use Method B instead"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Why this matters:** Method A computes the optimal inductance, turns ratio, and
|
|
83
|
+
operating waveforms automatically from the converter specification. Method B requires
|
|
84
|
+
you to pre-calculate these values, which can introduce errors.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 1. Installation
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pip install PyOpenMagnetics
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
If the `.whl` is provided as base64-encoded parts:
|
|
95
|
+
```python
|
|
96
|
+
import base64
|
|
97
|
+
with open("pyopenmagnetics-1.3.0.whl.base64.partaa", "rb") as f:
|
|
98
|
+
part_a = f.read()
|
|
99
|
+
with open("pyopenmagnetics-1.3.0.whl.base64.partab", "rb") as f:
|
|
100
|
+
part_b = f.read()
|
|
101
|
+
whl_data = base64.b64decode(part_a + part_b)
|
|
102
|
+
with open("pyopenmagnetics.whl", "wb") as f:
|
|
103
|
+
f.write(whl_data)
|
|
104
|
+
# Then: pip install pyopenmagnetics.whl
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 2. Import — CRITICAL (Most Agents Fail Here)
|
|
110
|
+
|
|
111
|
+
The package has **no `__init__.py`**. A bare `import PyOpenMagnetics` gives an
|
|
112
|
+
**empty namespace with 0 functions**. You MUST use `importlib`:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
import PyOpenMagnetics as PyOM
|
|
116
|
+
|
|
117
|
+
# MANDATORY - must call before any other function
|
|
118
|
+
PyOM.load_databases({})
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Verify:**
|
|
122
|
+
```python
|
|
123
|
+
assert len(dir(PyOM)) > 100, "Module not loaded properly"
|
|
124
|
+
assert hasattr(PyOM, 'design_magnetics_from_converter')
|
|
125
|
+
print(f"Materials: {len(PyOM.get_core_material_names())}") # ~409
|
|
126
|
+
print(f"Shapes: {len(PyOM.get_core_shape_names(True))}") # ~1301
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 3. Method A: `design_magnetics_from_converter()` (Preferred — Single Call)
|
|
132
|
+
|
|
133
|
+
This goes directly from converter specifications to complete, ranked magnetic
|
|
134
|
+
component designs in a single call.
|
|
135
|
+
|
|
136
|
+
### ngspice Is Bundled
|
|
137
|
+
|
|
138
|
+
ngspice is shipped inside the wheel at `.ngspice/lib/libngspice.so`. No
|
|
139
|
+
separate install needed. The C++ code **ignores** the `use_ngspice` parameter:
|
|
140
|
+
`(void)useNgspice;` — it always uses ngspice internally.
|
|
141
|
+
|
|
142
|
+
In sandboxed environments where `dlopen` is restricted, ngspice may fail to
|
|
143
|
+
initialize — use Method B with `use_ngspice=False` in that case.
|
|
144
|
+
|
|
145
|
+
### Signature (use POSITIONAL args — the .pyi has WRONG keyword names!)
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
result = PyOM.design_magnetics_from_converter(
|
|
149
|
+
topology_name, # str — REQUIRED
|
|
150
|
+
converter_json, # dict — REQUIRED (BASE class schema, see Section 5)
|
|
151
|
+
max_results, # int — 1-10
|
|
152
|
+
core_mode_json, # str — "available cores" or "standard cores"
|
|
153
|
+
use_ngspice, # bool — IGNORED (always True internally)
|
|
154
|
+
weights_json # dict or None
|
|
155
|
+
)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### âš ï¸ The .pyi Stub Has WRONG Keyword Names
|
|
159
|
+
|
|
160
|
+
`.pyi` says: `topology=`, `converter=`, `core_mode=`, `weights=`.
|
|
161
|
+
Actual pybind11: `topology_name=`, `converter_json=`, `core_mode_json=`, `weights_json=`.
|
|
162
|
+
**Safest: use positional arguments.**
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### 🚨 Pass Python Dicts — NEVER json.dumps()!
|
|
167
|
+
|
|
168
|
+
The C++ pybind11 binding accepts **Python dicts directly**. `json.dumps()` turns
|
|
169
|
+
your dict into a **string** → the C++ parser gets a string instead of an object
|
|
170
|
+
→ `"Input JSON does not conform to schema!"`.
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
# ⌠WRONG — json.dumps() causes schema error
|
|
174
|
+
result = PyOM.design_magnetics_from_converter("flyback", json.dumps(converter), ...)
|
|
175
|
+
result = PyOM.design_magnetics_from_converter("flyback", converter, 3, json.dumps("STANDARD_CORES"), ...)
|
|
176
|
+
|
|
177
|
+
# ✅ CORRECT — pass Python dict and plain string
|
|
178
|
+
result = PyOM.design_magnetics_from_converter("flyback", converter, 3, "available cores", True, None)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 🚨 NEVER Abandon Method A After a Schema Error!
|
|
182
|
+
|
|
183
|
+
If `design_magnetics_from_converter` throws `"Input JSON does not conform to schema!"`,
|
|
184
|
+
the fix is to correct the JSON — **NOT** to fall back to `calculate_advised_cores` or
|
|
185
|
+
manual math. Common fixes:
|
|
186
|
+
1. Remove `json.dumps()` from all arguments
|
|
187
|
+
2. Use `"available cores"` (lowercase + space), not `"STANDARD_CORES"`
|
|
188
|
+
3. Use positional arguments, not keyword arguments
|
|
189
|
+
4. For offline flyback: use the Advanced schema with `desiredInductance`
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 4. The THREE Things That MUST Be Correct (All Verified)
|
|
194
|
+
|
|
195
|
+
### 4.1 `core_mode_json` Must Be LOWERCASE WITH SPACE
|
|
196
|
+
|
|
197
|
+
From `CoreAdviser.h` `from_json`:
|
|
198
|
+
```cpp
|
|
199
|
+
if (j == "available cores") x = CoreAdviserModes::AVAILABLE_CORES;
|
|
200
|
+
else if (j == "standard cores") x = CoreAdviserModes::STANDARD_CORES;
|
|
201
|
+
else if (j == "custom cores") x = CoreAdviserModes::CUSTOM_CORES;
|
|
202
|
+
else throw std::runtime_error("Input JSON does not conform to schema!");
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
| ⌠WRONG | ✅ CORRECT |
|
|
206
|
+
|---|---|
|
|
207
|
+
| `"AVAILABLE_CORES"` | `"available cores"` |
|
|
208
|
+
| `"STANDARD_CORES"` | `"standard cores"` |
|
|
209
|
+
| `"Available Cores"` | `"available cores"` |
|
|
210
|
+
| `0` (integer) | `"available cores"` |
|
|
211
|
+
|
|
212
|
+
- `"available cores"` — WE commercial cores (~1301 shapes, 60–120+ sec)
|
|
213
|
+
- `"standard cores"` — generic shapes (faster, fewer options)
|
|
214
|
+
|
|
215
|
+
### 4.2 Flyback `operatingPoints[].mode` - Optional When currentRippleRatio Is Set
|
|
216
|
+
|
|
217
|
+
The `mode` field is **optional** if `currentRippleRatio` is provided. The C++ code
|
|
218
|
+
will auto-infer the mode: CCM if ripple < 1.0, DCM if ripple >= 1.0.
|
|
219
|
+
|
|
220
|
+
If you omit both `mode` AND `currentRippleRatio`, you'll get an error:
|
|
221
|
+
`"Either current ripple ratio or mode is needed for the Flyback OperatingPoint Mode"`
|
|
222
|
+
|
|
223
|
+
Valid mode values:
|
|
224
|
+
- `"Continuous Conduction Mode"` (CCM — most common for >20W)
|
|
225
|
+
- `"Discontinuous Conduction Mode"` (DCM)
|
|
226
|
+
- `"Boundary Mode Operation"` (BCM)
|
|
227
|
+
- `"Quasi Resonant Mode"` (QR)
|
|
228
|
+
|
|
229
|
+
Other topologies (Buck, Boost, Forward, LLC) do **NOT** need a mode field.
|
|
230
|
+
|
|
231
|
+
### 4.3 Use BASE Class Schema (NOT AdvancedFlyback)
|
|
232
|
+
|
|
233
|
+
`design_magnetics_from_converter()` uses `OpenMagnetics::Flyback` (base).
|
|
234
|
+
`process_converter()` uses `OpenMagnetics::AdvancedFlyback`.
|
|
235
|
+
|
|
236
|
+
| Field | Method A (Base) | Method B (Advanced) |
|
|
237
|
+
|---|---|---|
|
|
238
|
+
| `desiredInductance` | ⌠Causes schema error | ✅ Required |
|
|
239
|
+
| `desiredTurnsRatios` | ⌠Causes schema error | ✅ Required |
|
|
240
|
+
| `desiredDutyCycle` | ⌠Causes schema error | ✅ Optional |
|
|
241
|
+
| `currentRippleRatio` | ✅ REQUIRED (Flyback/Boost/Forward) | ✅ Optional |
|
|
242
|
+
| `mode` in operatingPoints | Optional (auto-inferred if currentRippleRatio set) | Not needed |
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 5. Converter JSON Schemas — All Topologies (Verified from MAS.hpp)
|
|
247
|
+
|
|
248
|
+
### 5.1 Flyback — Method A (BASE class)
|
|
249
|
+
|
|
250
|
+
```python
|
|
251
|
+
flyback_base = {
|
|
252
|
+
"currentRippleRatio": 0.4, # REQUIRED (j.at)
|
|
253
|
+
"diodeVoltageDrop": 0.5, # REQUIRED (j.at)
|
|
254
|
+
"efficiency": 0.88, # REQUIRED (j.at)
|
|
255
|
+
"inputVoltage": { # REQUIRED (j.at)
|
|
256
|
+
"minimum": 185.0,
|
|
257
|
+
"nominal": 220.0, # recommended
|
|
258
|
+
"maximum": 265.0
|
|
259
|
+
},
|
|
260
|
+
"operatingPoints": [{ # REQUIRED (j.at)
|
|
261
|
+
"ambientTemperature": 25.0, # REQUIRED (j.at)
|
|
262
|
+
"outputVoltages": [12.0], # REQUIRED (j.at) — PLURAL
|
|
263
|
+
"outputCurrents": [2.0], # REQUIRED (j.at) — PLURAL
|
|
264
|
+
"switchingFrequency": 100000.0, # optional (get_stack_optional)
|
|
265
|
+
"mode": "Continuous Conduction Mode" # Optional if currentRippleRatio is set (auto-inferred)
|
|
266
|
+
}],
|
|
267
|
+
"maximumDutyCycle": 0.45, # optional
|
|
268
|
+
"maximumDrainSourceVoltage": 800.0 # optional
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### 5.2 Flyback — Method B (AdvancedFlyback)
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
flyback_advanced = {
|
|
276
|
+
"inputVoltage": {"minimum": 185, "maximum": 265},
|
|
277
|
+
"desiredInductance": 800e-6, # AdvancedFlyback only
|
|
278
|
+
"desiredTurnsRatios": [13.5], # AdvancedFlyback only
|
|
279
|
+
"desiredDutyCycle": [[0.45, 0.45]], # AdvancedFlyback only
|
|
280
|
+
"maximumDutyCycle": 0.45,
|
|
281
|
+
"efficiency": 0.88,
|
|
282
|
+
"diodeVoltageDrop": 0.5,
|
|
283
|
+
"currentRippleRatio": 0.4,
|
|
284
|
+
"operatingPoints": [{
|
|
285
|
+
"outputVoltages": [12.0],
|
|
286
|
+
"outputCurrents": [2.0],
|
|
287
|
+
"switchingFrequency": 100000,
|
|
288
|
+
"ambientTemperature": 25
|
|
289
|
+
}]
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 5.3 Buck — Method A (BASE class)
|
|
294
|
+
|
|
295
|
+
```python
|
|
296
|
+
buck_base = {
|
|
297
|
+
"diodeVoltageDrop": 0.5, # REQUIRED (j.at)
|
|
298
|
+
"inputVoltage": {"minimum": 10.0, "maximum": 14.0}, # REQUIRED
|
|
299
|
+
"operatingPoints": [{
|
|
300
|
+
"ambientTemperature": 25.0, # REQUIRED
|
|
301
|
+
"outputVoltage": 3.3, # REQUIRED — âš ï¸ SINGULAR!
|
|
302
|
+
"outputCurrent": 5.0, # REQUIRED — âš ï¸ SINGULAR!
|
|
303
|
+
"switchingFrequency": 500000.0 # REQUIRED (j.at)
|
|
304
|
+
}]
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### 5.4 Boost — Method A (BASE class)
|
|
309
|
+
|
|
310
|
+
```python
|
|
311
|
+
boost_base = {
|
|
312
|
+
"currentRippleRatio": 0.3, # REQUIRED (j.at)
|
|
313
|
+
"diodeVoltageDrop": 0.7, # REQUIRED (j.at)
|
|
314
|
+
"efficiency": 0.92, # REQUIRED (j.at)
|
|
315
|
+
"inputVoltage": {"minimum": 5.0, "maximum": 5.0}, # REQUIRED
|
|
316
|
+
"operatingPoints": [{
|
|
317
|
+
"ambientTemperature": 25.0, # REQUIRED
|
|
318
|
+
"outputVoltage": 12.0, # REQUIRED — âš ï¸ SINGULAR!
|
|
319
|
+
"outputCurrent": 1.0, # REQUIRED — âš ï¸ SINGULAR!
|
|
320
|
+
"switchingFrequency": 100000.0 # REQUIRED (j.at)
|
|
321
|
+
}]
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### 5.5 Forward (Single-Switch, Two-Switch, Active-Clamp) — Method A
|
|
326
|
+
|
|
327
|
+
```python
|
|
328
|
+
forward_base = {
|
|
329
|
+
"currentRippleRatio": 0.4, # REQUIRED (j.at)
|
|
330
|
+
"diodeVoltageDrop": 0.5, # REQUIRED (j.at)
|
|
331
|
+
"inputVoltage": {"minimum": 36.0, "maximum": 72.0},
|
|
332
|
+
"operatingPoints": [{
|
|
333
|
+
"ambientTemperature": 25.0, # REQUIRED (j.at)
|
|
334
|
+
"outputVoltages": [5.0], # REQUIRED (j.at) — PLURAL
|
|
335
|
+
"outputCurrents": [10.0], # REQUIRED (j.at) — PLURAL
|
|
336
|
+
"switchingFrequency": 200000.0 # REQUIRED (j.at) for Forward!
|
|
337
|
+
}]
|
|
338
|
+
# optional: "efficiency", "dutyCycle", "maximumSwitchCurrent"
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
Use topology strings: `"single_switch_forward"`, `"two_switch_forward"`, `"active_clamp_forward"`.
|
|
342
|
+
|
|
343
|
+
### 5.6 LLC — Method A (BASE class)
|
|
344
|
+
|
|
345
|
+
```python
|
|
346
|
+
llc_base = {
|
|
347
|
+
"inputVoltage": {"minimum": 380.0, "maximum": 420.0}, # REQUIRED (j.at)
|
|
348
|
+
"minSwitchingFrequency": 100000.0, # REQUIRED (j.at)
|
|
349
|
+
"maxSwitchingFrequency": 300000.0, # REQUIRED (j.at)
|
|
350
|
+
"operatingPoints": [{ # REQUIRED (j.at)
|
|
351
|
+
"ambientTemperature": 25.0,
|
|
352
|
+
"outputVoltages": [12.0], # REQUIRED — PLURAL
|
|
353
|
+
"outputCurrents": [5.0], # REQUIRED — PLURAL
|
|
354
|
+
"switchingFrequency": 200000.0 # Operating frequency
|
|
355
|
+
}],
|
|
356
|
+
# optional fields:
|
|
357
|
+
"efficiency": 0.95, # optional
|
|
358
|
+
"qualityFactor": 0.5, # optional
|
|
359
|
+
"resonantFrequency": 150000.0 # optional
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
### 5.7 PushPull — Same Schema as Forward
|
|
365
|
+
|
|
366
|
+
### 5.8 Singular vs Plural Field Names (Critical!)
|
|
367
|
+
|
|
368
|
+
| Topology | outputVoltage(s) | outputCurrent(s) |
|
|
369
|
+
|---|---|---|
|
|
370
|
+
| Flyback | `outputVoltages` (PLURAL, list) | `outputCurrents` (PLURAL, list) |
|
|
371
|
+
| Forward | `outputVoltages` (PLURAL, list) | `outputCurrents` (PLURAL, list) |
|
|
372
|
+
| PushPull | `outputVoltages` (PLURAL, list) | `outputCurrents` (PLURAL, list) |
|
|
373
|
+
| LLC | `outputVoltages` (PLURAL, list) | `outputCurrents` (PLURAL, list) |
|
|
374
|
+
| Buck | `outputVoltage` (SINGULAR, float) | `outputCurrent` (SINGULAR, float) |
|
|
375
|
+
| Boost | `outputVoltage` (SINGULAR, float) | `outputCurrent` (SINGULAR, float) |
|
|
376
|
+
| DualActiveBridge | `outputVoltage` (SINGULAR) | `outputCurrent` (SINGULAR) |
|
|
377
|
+
|
|
378
|
+
### 5.9 How to Estimate Flyback Parameters
|
|
379
|
+
|
|
380
|
+
If user says "220V to 12V, 2A" without detail:
|
|
381
|
+
```
|
|
382
|
+
Vin_dc_min ≈ 185 × √2 × 0.9 ≈ 235V
|
|
383
|
+
Dmax = 0.45, η = 0.88
|
|
384
|
+
n = (12+0.5)×0.55 / (235×0.45×0.88) ≈ 0.074
|
|
385
|
+
turnsRatio = 1/n ≈ 13.5 → for desiredTurnsRatios (Method B only)
|
|
386
|
+
Lm ≈ 800 µH → for desiredInductance (Method B only)
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 6. Complete Working Examples
|
|
392
|
+
|
|
393
|
+
### Method A: `design_magnetics_from_converter()` (single call)
|
|
394
|
+
|
|
395
|
+
```python
|
|
396
|
+
import PyOpenMagnetics as PyOM
|
|
397
|
+
PyOM.load_databases({})
|
|
398
|
+
|
|
399
|
+
# Define converter (BASE Flyback schema — NO desiredInductance!)
|
|
400
|
+
flyback = {
|
|
401
|
+
"currentRippleRatio": 0.4,
|
|
402
|
+
"diodeVoltageDrop": 0.5,
|
|
403
|
+
"efficiency": 0.88,
|
|
404
|
+
"inputVoltage": {"minimum": 185.0, "nominal": 220.0, "maximum": 265.0},
|
|
405
|
+
"maximumDutyCycle": 0.45,
|
|
406
|
+
"operatingPoints": [{
|
|
407
|
+
"ambientTemperature": 25.0,
|
|
408
|
+
"outputVoltages": [12.0],
|
|
409
|
+
"outputCurrents": [2.0],
|
|
410
|
+
"switchingFrequency": 100000.0,
|
|
411
|
+
"mode": "Continuous Conduction Mode" # Optional if currentRippleRatio is set (auto-inferred)
|
|
412
|
+
}]
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
# design_magnetics_from_converter() builds MAS Inputs from the spec (the
|
|
416
|
+
# magnetic adviser is a separate step -- see Method B, which continues from
|
|
417
|
+
# here). Failures raise PyOM.EngineError (v1.7.0+).
|
|
418
|
+
try:
|
|
419
|
+
inputs = PyOM.design_magnetics_from_converter("flyback", flyback)
|
|
420
|
+
except PyOM.EngineError as e:
|
|
421
|
+
print(f"Method A failed: {e}")
|
|
422
|
+
else:
|
|
423
|
+
print(f"Turns ratios: {inputs['designRequirements']['turnsRatios']}")
|
|
424
|
+
print(f"Operating points: {len(inputs['operatingPoints'])}")
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Method B: `process_converter()` → `calculate_advised_magnetics()` (no ngspice needed)
|
|
428
|
+
|
|
429
|
+
```python
|
|
430
|
+
# Step 1: Process converter (AdvancedFlyback schema)
|
|
431
|
+
flyback_adv = {
|
|
432
|
+
"inputVoltage": {"minimum": 185, "maximum": 265},
|
|
433
|
+
"desiredInductance": 800e-6,
|
|
434
|
+
"desiredTurnsRatios": [13.5],
|
|
435
|
+
"desiredDutyCycle": [[0.45, 0.45]],
|
|
436
|
+
"maximumDutyCycle": 0.45,
|
|
437
|
+
"efficiency": 0.88,
|
|
438
|
+
"diodeVoltageDrop": 0.5,
|
|
439
|
+
"currentRippleRatio": 0.4,
|
|
440
|
+
"operatingPoints": [{
|
|
441
|
+
"outputVoltages": [12.0],
|
|
442
|
+
"outputCurrents": [2.0],
|
|
443
|
+
"switchingFrequency": 100000,
|
|
444
|
+
"ambientTemperature": 25
|
|
445
|
+
}]
|
|
446
|
+
}
|
|
447
|
+
processed = PyOM.process_converter("flyback", flyback_adv, use_ngspice=False)
|
|
448
|
+
# failures raise PyOM.EngineError -- no error-shaped return values (v1.7.0+)
|
|
449
|
+
|
|
450
|
+
# Step 2: Feed into adviser (with optional weights)
|
|
451
|
+
mas_inputs = {
|
|
452
|
+
"designRequirements": processed["designRequirements"],
|
|
453
|
+
"operatingPoints": processed["operatingPoints"]
|
|
454
|
+
}
|
|
455
|
+
# calculate_advised_magnetics takes (inputs, max_results, core_mode) -- no weights
|
|
456
|
+
# argument (that is calculate_advised_cores). Inputs must be processed first.
|
|
457
|
+
mas_inputs = PyOM.process_inputs(mas_inputs)
|
|
458
|
+
designs = PyOM.calculate_advised_magnetics(mas_inputs, 1, "available cores")
|
|
459
|
+
|
|
460
|
+
# Step 3: Parse -- result is {"data": [{"mas", "scoring", ...}]}
|
|
461
|
+
d = designs["data"][0]
|
|
462
|
+
mas_obj, score = d["mas"], d["scoring"]
|
|
463
|
+
core = mas_obj["magnetic"]["core"]["functionalDescription"]
|
|
464
|
+
coil = mas_obj["magnetic"]["coil"]["functionalDescription"]
|
|
465
|
+
print(f"Core: {core['shape'].get('name','?')}, Material: {core['material'].get('name','?')}")
|
|
466
|
+
for w in coil:
|
|
467
|
+
print(f" {w['name']}: {w['numberTurns']} turns, {w.get('numberParallels',1)} parallels")
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## 7. Weights (Priorities)
|
|
473
|
+
|
|
474
|
+
Both `design_magnetics_from_converter()` and `calculate_advised_magnetics()` accept
|
|
475
|
+
an optional weights dict. The keys must be **lowercase** MagneticFilters enum values:
|
|
476
|
+
|
|
477
|
+
```python
|
|
478
|
+
weights = {
|
|
479
|
+
"efficiency": 2.0, # prioritize low losses
|
|
480
|
+
"cost": 1.0, # consider cost
|
|
481
|
+
"dimensions": 0.5 # size is less important
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
Valid weight keys (from `MAS.hpp` `MagneticFilters` `from_json`):
|
|
486
|
+
- `"cost"` — minimize core/wire cost
|
|
487
|
+
- `"dimensions"` — minimize physical size
|
|
488
|
+
- `"efficiency"` — minimize total losses
|
|
489
|
+
|
|
490
|
+
Pass as the 4th argument to `calculate_advised_magnetics()` or 6th to
|
|
491
|
+
`design_magnetics_from_converter()`. Pass `None` for default equal weights.
|
|
492
|
+
|
|
493
|
+
---
|
|
494
|
+
|
|
495
|
+
## 8. Settings
|
|
496
|
+
|
|
497
|
+
Control global behavior with the settings API:
|
|
498
|
+
|
|
499
|
+
```python
|
|
500
|
+
# Get current settings
|
|
501
|
+
settings = PyOM.get_settings()
|
|
502
|
+
|
|
503
|
+
# Modify settings
|
|
504
|
+
PyOM.set_settings({
|
|
505
|
+
"useOnlyCoresInStock": True, # only use cores marked in stock
|
|
506
|
+
"painterNumberPointsX": 100, # plot X resolution
|
|
507
|
+
"painterNumberPointsY": 100, # plot Y resolution
|
|
508
|
+
"coilAllowMarginTape": True, # allow margin tape in coil designs
|
|
509
|
+
"coilAllowInsulatedWire": True, # allow insulated wire
|
|
510
|
+
"magneticFieldMirroringDimension": 0 # simulation accuracy (0=fast, higher=more accurate)
|
|
511
|
+
})
|
|
512
|
+
|
|
513
|
+
# Reset to defaults
|
|
514
|
+
PyOM.reset_settings()
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
---
|
|
518
|
+
|
|
519
|
+
## 9. Database Access
|
|
520
|
+
|
|
521
|
+
> âš ï¸ **Naming convention**: single-item lookup functions use the `find_*_by_name()` prefix,
|
|
522
|
+
> NOT `get_*_by_name()`. `get_core_shape_by_name()` does **not exist** and will raise `AttributeError`.
|
|
523
|
+
|
|
524
|
+
### Core Shapes
|
|
525
|
+
```python
|
|
526
|
+
names = PyOM.get_core_shape_names(True) # ✅ verified — True=include toroidal
|
|
527
|
+
families = PyOM.get_core_shape_families() # ✅ verified — NO argument (bool arg → TypeError)
|
|
528
|
+
shape = PyOM.find_core_shape_by_name("E 25/13/7") # ✅ verified
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### Core Materials
|
|
532
|
+
```python
|
|
533
|
+
mat_names = PyOM.get_core_material_names() # ✅ verified
|
|
534
|
+
material = PyOM.find_core_material_by_name("3C95") # ✅ verified (.pyi confirmed)
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Wires
|
|
538
|
+
```python
|
|
539
|
+
wire_names = PyOM.get_wire_names() # ✅ verified
|
|
540
|
+
wire = PyOM.find_wire_by_name("Round 0.5 - Grade 1") # ✅ verified (.pyi confirmed)
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
### Bobbins
|
|
544
|
+
```python
|
|
545
|
+
bobbin = PyOM.find_bobbin_by_name("Bobbin E25/7") # ✅ verified (.pyi confirmed)
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### ⌠Wrong names — do NOT use these
|
|
549
|
+
```python
|
|
550
|
+
PyOM.get_core_shape_by_name(...) # AttributeError — does not exist
|
|
551
|
+
PyOM.get_core_material_by_name(...) # AttributeError — does not exist
|
|
552
|
+
PyOM.get_wire_by_name(...) # AttributeError — does not exist
|
|
553
|
+
PyOM.get_bobbin_by_name(...) # AttributeError — does not exist
|
|
554
|
+
PyOM.get_core_shape_families(True) # TypeError — takes no arguments
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
## 10. Post-Design Analysis (All Verified)
|
|
560
|
+
|
|
561
|
+
### Inductance Calculation
|
|
562
|
+
```python
|
|
563
|
+
inductance = PyOM.calculate_inductance_from_number_turns_and_gapping(
|
|
564
|
+
core, coil, operating_point, models)
|
|
565
|
+
# Returns dict with:
|
|
566
|
+
# magnetizingInductance → {magnetizingInductance, coreReluctance, gappingReluctance, ...}
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Core Losses
|
|
570
|
+
```python
|
|
571
|
+
models = {"coreLosses": "IGSE"} # or "STEINMETZ", "ROSHEN", etc.
|
|
572
|
+
losses = PyOM.calculate_core_losses(core, coil, operating_point, models)
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### Winding Losses
|
|
576
|
+
```python
|
|
577
|
+
winding_losses = PyOM.calculate_winding_losses(magnetic, operating_point, temperature)
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### Full Simulation
|
|
581
|
+
```python
|
|
582
|
+
sim_result = PyOM.simulate(mas)
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
### Wire Utilities
|
|
586
|
+
```python
|
|
587
|
+
# Skin depth: the 2nd arg is a CURRENT SignalDescriptor (needs processed.label +
|
|
588
|
+
# processed.effectiveFrequency), NOT a bare frequency. Passing a number returns garbage.
|
|
589
|
+
current = {
|
|
590
|
+
"waveform": {"data": [-5, 5, -5], "time": [0, 5e-6, 10e-6]},
|
|
591
|
+
"processed": {"label": "triangular", "effectiveFrequency": 100000,
|
|
592
|
+
"rms": 2.9, "peak": 5, "peakToPeak": 10, "offset": 0, "dutyCycle": 0.5}
|
|
593
|
+
}
|
|
594
|
+
delta = PyOM.calculate_effective_skin_depth("copper", current, 25) # ~0.21 mm for Cu @100 kHz
|
|
595
|
+
|
|
596
|
+
# DC resistance per meter for a given wire diameter
|
|
597
|
+
wire = PyOM.find_wire_by_name("Round 0.5 - Grade 1")
|
|
598
|
+
rdc = PyOM.calculate_dc_resistance_per_meter(wire, 25) # (wire object, temperature)
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### SPICE Export
|
|
602
|
+
```python
|
|
603
|
+
subcircuit = PyOM.export_magnetic_as_subcircuit(magnetic)
|
|
604
|
+
# Returns SPICE subcircuit string
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
---
|
|
608
|
+
|
|
609
|
+
## 11. Supported Topologies
|
|
610
|
+
|
|
611
|
+
`process_converter("<topology>", json, use_ngspice)` is the universal entry
|
|
612
|
+
point and accepts every string below, plus its `"advanced_<topology>"` form
|
|
613
|
+
(the internal builds the `Advanced*` MKF class either way — "advanced" is
|
|
614
|
+
selected by the JSON payload shape, e.g. presence of `desiredInductance` /
|
|
615
|
+
`desiredMagnetizingInductance` / `desiredBoostInductance`, not by the name).
|
|
616
|
+
|
|
617
|
+
### 11.1 Per-topology API parity matrix
|
|
618
|
+
|
|
619
|
+
Every topology exposes the **same four surfaces** (✓ = present). Columns:
|
|
620
|
+
- **inputs** — `calculate_<t>_inputs(json)` (basic) and
|
|
621
|
+
`calculate_advanced_<t>_inputs(json)` (advanced)
|
|
622
|
+
- **process** — dedicated `process_<t>(json)` thin wrapper (all are also
|
|
623
|
+
reachable via the generic `process_converter`)
|
|
624
|
+
- **simulate** — `simulate_<t>_ideal_waveforms(json)` (ngspice)
|
|
625
|
+
- **ngspice** — `generate_<t>_ngspice_circuit(json, input_voltage_index=0, operating_point_index=0)`
|
|
626
|
+
|
|
627
|
+
| Topology string | inputs (basic / advanced) | process_* | simulate | generate ngspice |
|
|
628
|
+
|---|---|---|---|---|
|
|
629
|
+
| `flyback` | ✓ / ✓ | ✓ | ✓ (+`simulate_flyback_with_magnetic`) | ✓ |
|
|
630
|
+
| `buck` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
631
|
+
| `boost` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
632
|
+
| `single_switch_forward` | ✓ / ✓ | ✓ | ✓ (`simulate_forward_*`) | ✓ (`generate_forward_*`) |
|
|
633
|
+
| `two_switch_forward` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
634
|
+
| `active_clamp_forward` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
635
|
+
| `push_pull` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
636
|
+
| `isolated_buck` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
637
|
+
| `isolated_buck_boost` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
638
|
+
| `cuk` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
639
|
+
| `sepic` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
640
|
+
| `zeta` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
641
|
+
| `four_switch_buck_boost` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
642
|
+
| `weinberg` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
643
|
+
| `llc` | ✓ / ✓ | via `process_converter` | ✓ | ✓ |
|
|
644
|
+
| `cllc` | ✓ / ✓ | via `process_converter` | ✓ | ✓ |
|
|
645
|
+
| `clllc` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
646
|
+
| `src` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
647
|
+
| `dab` | ✓ / ✓ | via `process_converter` | ✓ | ✓ |
|
|
648
|
+
| `phase_shifted_full_bridge` (`psfb`) | ✓ / ✓ | via `process_converter` | ✓ | ✓ |
|
|
649
|
+
| `phase_shifted_half_bridge` (`pshb`) | ✓ / ✓ | via `process_converter` | ✓ | ✓ |
|
|
650
|
+
| `asymmetric_half_bridge` (`ahb`) | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
651
|
+
| `vienna` | ✓ / ✓ | ✓ | ✓ | ✓ |
|
|
652
|
+
| `power_factor_correction` (`pfc`) | ✓ / — ¹ | via `process_converter` | ✓ (`simulate_pfc_waveforms`) | ✓ ² |
|
|
653
|
+
| `current_transformer` | — ³ | ✓ ³ | — | — |
|
|
654
|
+
| `common_mode_choke` (`cmc`) | `calculate_cmc_inputs` / `calculate_advanced_cmc_inputs` | — | `simulate_cmc_ideal_waveforms`, `simulate_cmc_lisn_waveforms` | `generate_cmc_ngspice_circuit` |
|
|
655
|
+
| `differential_mode_choke` (`dmc`) | `calculate_dmc_inputs` | `propose_dmc_design`, `verify_dmc_attenuation` | `simulate_dmc_waveforms` | `generate_dmc_ngspice_circuit` |
|
|
656
|
+
|
|
657
|
+
¹ PFC has no `AdvancedPowerFactorCorrection` class in MKF — basic-only by design;
|
|
658
|
+
there is intentionally no `calculate_advanced_pfc_inputs`.
|
|
659
|
+
² `generate_pfc_ngspice_circuit(json, dc_resistance=0.1, simulation_time=0.02,
|
|
660
|
+
time_step=1e-8)` — PFC is a line-frequency model, so it takes circuit-damping
|
|
661
|
+
parameters instead of the `input_voltage_index` / `operating_point_index`
|
|
662
|
+
sweep indices used by the DC-DC family. Inductance comes from an explicit
|
|
663
|
+
`"inductance"` field or is derived from `"mode"` (CCM/CrCM/DCM).
|
|
664
|
+
³ Current transformer is measurement-only: `process_current_transformer(json,
|
|
665
|
+
turns_ratio, secondary_resistance=0.0)`.
|
|
666
|
+
|
|
667
|
+
### 11.2 Dedicated `process_*` thin wrappers
|
|
668
|
+
|
|
669
|
+
`process_flyback()`, `process_buck()`, `process_boost()`,
|
|
670
|
+
`process_single_switch_forward()`, `process_two_switch_forward()`,
|
|
671
|
+
`process_active_clamp_forward()`, `process_push_pull()`,
|
|
672
|
+
`process_isolated_buck()`, `process_isolated_buck_boost()`,
|
|
673
|
+
`process_cuk()`, `process_sepic()`, `process_zeta()`,
|
|
674
|
+
`process_four_switch_buck_boost()`, `process_asymmetric_half_bridge()`,
|
|
675
|
+
`process_weinberg()`, `process_vienna()`, `process_clllc()`, `process_src()`,
|
|
676
|
+
`process_current_transformer(json, turns_ratio, secondary_resistance=0.0)`.
|
|
677
|
+
Topologies without a dedicated wrapper (`llc`, `cllc`, `dab`, `psfb`, `pshb`,
|
|
678
|
+
`pfc`) are reached through `process_converter("<topology>", json)`.
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
## 12. Result Structure
|
|
683
|
+
|
|
684
|
+
Both methods return a list of `[mas_dict, score]` tuples:
|
|
685
|
+
|
|
686
|
+
```python
|
|
687
|
+
d = result[0] # First (best) design
|
|
688
|
+
mas_obj = d[0] # MAS dict
|
|
689
|
+
score = d[1] # float — higher is better
|
|
690
|
+
|
|
691
|
+
# Core info
|
|
692
|
+
core_fd = mas_obj["magnetic"]["core"]["functionalDescription"]
|
|
693
|
+
shape = core_fd["shape"] # dict with "name", dimensions, etc.
|
|
694
|
+
material = core_fd["material"] # dict with "name", properties, etc.
|
|
695
|
+
gapping = core_fd["gapping"] # list of gap dicts
|
|
696
|
+
|
|
697
|
+
# Coil info
|
|
698
|
+
coil_fd = mas_obj["magnetic"]["coil"]["functionalDescription"]
|
|
699
|
+
for winding in coil_fd:
|
|
700
|
+
name = winding["name"] # "primary", "secondary", etc.
|
|
701
|
+
turns = winding["numberTurns"] # int
|
|
702
|
+
parallels = winding.get("numberParallels", 1)
|
|
703
|
+
wire = winding.get("wire", {}) # wire specification
|
|
704
|
+
|
|
705
|
+
# Design requirements used
|
|
706
|
+
dr = mas_obj["inputs"]["designRequirements"]
|
|
707
|
+
mag_ind = dr["magnetizingInductance"] # {nominal, minimum, maximum}
|
|
708
|
+
turns_ratios = dr["turnsRatios"] # list of ratios
|
|
709
|
+
|
|
710
|
+
# Operating points used (with full waveforms)
|
|
711
|
+
ops = mas_obj["inputs"]["operatingPoints"]
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
---
|
|
715
|
+
|
|
716
|
+
## 13. Error Handling — DO NOT FALL BACK TO MANUAL MODE
|
|
717
|
+
|
|
718
|
+
| Error | Cause | Fix |
|
|
719
|
+
|---|---|---|
|
|
720
|
+
| `"Input JSON does not conform to schema!"` (instant) | Used `json.dumps()` on converter or core_mode | Pass Python dict directly — NOT `json.dumps(dict)` |
|
|
721
|
+
| `"Input JSON does not conform to schema!"` (instant) | Wrong `core_mode_json` | Use `"available cores"` (lowercase + space!) |
|
|
722
|
+
| `"Input JSON does not conform to schema!"` (instant) | Missing both `mode` and `currentRippleRatio` | Add either `mode` OR `currentRippleRatio` (mode auto-inferred if ripple set) |
|
|
723
|
+
| `"Input JSON does not conform to schema!"` (instant) | Used `desiredInductance` with Method A | Remove it — base class doesn't accept it |
|
|
724
|
+
| `"ngspice is not available"` | Sandbox restriction | Use Method B with `use_ngspice=False` |
|
|
725
|
+
| `"key 'currentRippleRatio' not found"` | Missing required field | Add to JSON |
|
|
726
|
+
| `"key 'outputVoltage' not found"` | Used plural for Buck/Boost | Use singular: `outputVoltage`, `outputCurrent` |
|
|
727
|
+
| `"key 'outputVoltages' not found"` | Used singular for Flyback/Forward | Use plural: `outputVoltages`, `outputCurrents` |
|
|
728
|
+
| `TypeError: incompatible function arguments` | Wrong keyword names | Use positional args |
|
|
729
|
+
| Empty namespace (0 functions) | Bare `import PyOpenMagnetics` | Use `importlib` (Section 2) |
|
|
730
|
+
| `get_core_shape_names()` TypeError | Missing bool arg | Use `get_core_shape_names(True)` |
|
|
731
|
+
|
|
732
|
+
### 13.1 Common Wrong Patterns vs Correct Patterns
|
|
733
|
+
|
|
734
|
+
**❌ WRONG: Using json.dumps()**
|
|
735
|
+
```python
|
|
736
|
+
# This WILL FAIL with "Input JSON does not conform to schema!"
|
|
737
|
+
result = PyOM.design_magnetics_from_converter(
|
|
738
|
+
"flyback",
|
|
739
|
+
json.dumps(converter_spec), # ❌ WRONG - json.dumps() converts dict to string!
|
|
740
|
+
3
|
|
741
|
+
)
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
**✅ CORRECT: Pass Python dict directly**
|
|
745
|
+
```python
|
|
746
|
+
# This works - pass the dict directly, no json.dumps()
|
|
747
|
+
result = PyOM.design_magnetics_from_converter(
|
|
748
|
+
"flyback",
|
|
749
|
+
converter_spec, # ✅ CORRECT - Python dict, not string
|
|
750
|
+
3,
|
|
751
|
+
"standard cores",
|
|
752
|
+
True,
|
|
753
|
+
None
|
|
754
|
+
)
|
|
755
|
+
```
|
|
756
|
+
|
|
757
|
+
---
|
|
758
|
+
|
|
759
|
+
**❌ WRONG: Inventing your own JSON structure**
|
|
760
|
+
```python
|
|
761
|
+
# This WILL FAIL - this is NOT the correct schema!
|
|
762
|
+
converter_spec = {
|
|
763
|
+
"inputs": [{
|
|
764
|
+
"name": "Primary",
|
|
765
|
+
"voltage": {"nominal": 310.0}
|
|
766
|
+
}],
|
|
767
|
+
"outputs": [{
|
|
768
|
+
"name": "Secondary",
|
|
769
|
+
"voltage": 12.0,
|
|
770
|
+
"current": 2.0
|
|
771
|
+
}],
|
|
772
|
+
"switchingFrequency": 100000.0
|
|
773
|
+
}
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
**✅ CORRECT: Use the exact schema from Section 5.1**
|
|
777
|
+
```python
|
|
778
|
+
# This is the CORRECT Flyback schema for Method A
|
|
779
|
+
flyback = {
|
|
780
|
+
"currentRippleRatio": 0.4, # REQUIRED
|
|
781
|
+
"diodeVoltageDrop": 0.5, # REQUIRED
|
|
782
|
+
"efficiency": 0.88, # REQUIRED
|
|
783
|
+
"inputVoltage": { # REQUIRED - not "inputs"!
|
|
784
|
+
"minimum": 185.0,
|
|
785
|
+
"nominal": 220.0,
|
|
786
|
+
"maximum": 265.0
|
|
787
|
+
},
|
|
788
|
+
"operatingPoints": [{ # REQUIRED - not "outputs"!
|
|
789
|
+
"ambientTemperature": 25.0,
|
|
790
|
+
"outputVoltages": [12.0], # PLURAL - list!
|
|
791
|
+
"outputCurrents": [2.0], # PLURAL - list!
|
|
792
|
+
"switchingFrequency": 100000.0
|
|
793
|
+
}],
|
|
794
|
+
"maximumDutyCycle": 0.45
|
|
795
|
+
}
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
800
|
+
**❌ WRONG: Using keyword arguments from .pyi stubs**
|
|
801
|
+
```python
|
|
802
|
+
# This WILL FAIL - .pyi has wrong keyword names!
|
|
803
|
+
result = PyOM.design_magnetics_from_converter(
|
|
804
|
+
topology="flyback", # ❌ Wrong keyword
|
|
805
|
+
converter=flyback, # ❌ Wrong keyword
|
|
806
|
+
max_results=3
|
|
807
|
+
)
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
**✅ CORRECT: Use positional arguments**
|
|
811
|
+
```python
|
|
812
|
+
# Use positional arguments - they always work
|
|
813
|
+
result = PyOM.design_magnetics_from_converter(
|
|
814
|
+
"flyback", # topology_name (positional)
|
|
815
|
+
flyback, # converter_json (positional)
|
|
816
|
+
3, # max_results (positional)
|
|
817
|
+
"standard cores", # core_mode_json (positional)
|
|
818
|
+
True, # use_ngspice (positional, ignored internally)
|
|
819
|
+
None # weights_json (positional)
|
|
820
|
+
)
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
---
|
|
824
|
+
|
|
825
|
+
**❌ WRONG: Abandoning Method A after schema error**
|
|
826
|
+
```python
|
|
827
|
+
# DON'T DO THIS!
|
|
828
|
+
try:
|
|
829
|
+
result = PyOM.design_magnetics_from_converter(...)
|
|
830
|
+
except:
|
|
831
|
+
print("Method A failed, doing manual calculations instead...")
|
|
832
|
+
# ❌ WRONG - Never fall back to manual calculations!
|
|
833
|
+
L = V * D / (f * delta_I) # ❌ NO!
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
**✅ CORRECT: Fix the JSON and retry**
|
|
837
|
+
```python
|
|
838
|
+
# If you get a schema error, FIX THE JSON, don't abandon Method A
|
|
839
|
+
# Check:
|
|
840
|
+
# 1. Did you use json.dumps()? Remove it.
|
|
841
|
+
# 2. Did you use the correct field names? Check Section 5.
|
|
842
|
+
# 3. Did you use "available cores" (lowercase with space)?
|
|
843
|
+
# 4. Did you include all REQUIRED fields?
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
---
|
|
847
|
+
|
|
848
|
+
## 14. Quick-Reference Checklists
|
|
849
|
+
|
|
850
|
+
### Method A: `design_magnetics_from_converter()`
|
|
851
|
+
|
|
852
|
+
- [ ] Used `importlib` to load `.so` (NOT bare `import`)
|
|
853
|
+
- [ ] Called `load_databases({})` after loading
|
|
854
|
+
- [ ] Topology is **lowercase** (`"flyback"`, not `"Flyback"`)
|
|
855
|
+
- [ ] `core_mode_json` is `"available cores"` (lowercase + space!)
|
|
856
|
+
- [ ] JSON uses **BASE class** schema (NO `desiredInductance`, NO `desiredTurnsRatios`)
|
|
857
|
+
- [ ] For Flyback: `currentRippleRatio` present (mode is optional, auto-inferred)
|
|
858
|
+
- [ ] For Buck/Boost: `outputVoltage`/`outputCurrent` are **SINGULAR**
|
|
859
|
+
- [ ] For Forward: `switchingFrequency` is **REQUIRED** in operatingPoints
|
|
860
|
+
- [ ] Using **positional arguments** (keyword names in .pyi are wrong)
|
|
861
|
+
- [ ] Passing **Python dicts directly** — NOT `json.dumps()` (causes schema error)
|
|
862
|
+
- [ ] If error → fix JSON and retry, then Method B — NEVER manual calculations
|
|
863
|
+
|
|
864
|
+
### Method B: `process_converter()` → `calculate_advised_magnetics()`
|
|
865
|
+
|
|
866
|
+
- [ ] JSON uses **Advanced** schema (WITH `desiredInductance`, `desiredTurnsRatios`)
|
|
867
|
+
- [ ] `use_ngspice=False` if ngspice can't init, `True` otherwise
|
|
868
|
+
- [ ] Pass `processed["designRequirements"]` + `processed["operatingPoints"]` to adviser
|
|
869
|
+
- [ ] Core mode also uses `"available cores"` (same lowercase convention)
|
|
870
|
+
- [ ] Weights use lowercase: `"efficiency"`, `"cost"`, `"dimensions"`
|
|
871
|
+
|
|
872
|
+
---
|
|
873
|
+
|
|
874
|
+
## 15. Known Issues & Notes
|
|
875
|
+
|
|
876
|
+
1. **`use_ngspice` is ignored by `design_magnetics_from_converter`** — `(void)useNgspice;`
|
|
877
|
+
in source. ngspice is bundled in the wheel. In restricted sandboxes, use Method B.
|
|
878
|
+
|
|
879
|
+
2. **`.pyi` has wrong keyword names** — use positional args or `topology_name=`,
|
|
880
|
+
`converter_json=`, `core_mode_json=`, `weights_json=`.
|
|
881
|
+
|
|
882
|
+
3. **Two different Flyback classes** — `Flyback` (base, Method A) vs
|
|
883
|
+
`AdvancedFlyback` (Method B). Different JSON schemas. Never mix them.
|
|
884
|
+
|
|
885
|
+
4. **`get_core_shape_names()`** requires boolean arg: `True`=include toroidal.
|
|
886
|
+
|
|
887
|
+
5. **Design computation is CPU-intensive** — `"available cores"` searches 1301+
|
|
888
|
+
shapes (60–180+ sec). Use `"standard cores"` for speed (10–30 sec).
|
|
889
|
+
**A timeout is NOT a failure — use "standard cores" or increase timeout, do NOT switch to Method B.**
|
|
890
|
+
|
|
891
|
+
6. **All enum string values are lowercase** — `"available cores"`, `"standard cores"`,
|
|
892
|
+
`"efficiency"`, `"cost"`, `"dimensions"`, etc. The only exception is
|
|
893
|
+
`FlybackModes` which uses Title Case: `"Continuous Conduction Mode"`.
|
|
894
|
+
|
|
895
|
+
7. **`process_converter` returns two keys** — `designRequirements` (with
|
|
896
|
+
`magnetizingInductance`, `turnsRatios`, `name`, `topology`) and
|
|
897
|
+
`operatingPoints` (with full excitation waveforms per winding).
|
|
898
|
+
|
|
899
|
+
8. **Do NOT `json.dumps()` the arguments** — the pybind11 binding accepts Python
|
|
900
|
+
dicts directly. `json.dumps(converter)` turns the dict into a string, which
|
|
901
|
+
the C++ JSON parser rejects with a schema error.
|
|
902
|
+
|
|
903
|
+
9. **NEVER abandon Method A after a schema error** — the error means your JSON
|
|
904
|
+
is wrong, not that the function is broken. Fix the JSON and retry. Do NOT
|
|
905
|
+
fall back to `calculate_advised_cores` or manual textbook formulas.
|