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.
Files changed (550) hide show
  1. PyOpenMagnetics/AGENTS.md +905 -0
  2. PyOpenMagnetics/KirchhoffApi.dll +0 -0
  3. PyOpenMagnetics/PyOpenMagnetics.cp314-win_amd64.pyd +0 -0
  4. PyOpenMagnetics/PyOpenMagnetics.pyi +1017 -0
  5. PyOpenMagnetics/__init__.py +5 -0
  6. PyOpenMagnetics/_build_info.py +5 -0
  7. PyOpenMagnetics/include/eigen3/Eigen/Cholesky +45 -0
  8. PyOpenMagnetics/include/eigen3/Eigen/CholmodSupport +48 -0
  9. PyOpenMagnetics/include/eigen3/Eigen/Core +384 -0
  10. PyOpenMagnetics/include/eigen3/Eigen/Dense +7 -0
  11. PyOpenMagnetics/include/eigen3/Eigen/Eigen +2 -0
  12. PyOpenMagnetics/include/eigen3/Eigen/Eigenvalues +60 -0
  13. PyOpenMagnetics/include/eigen3/Eigen/Geometry +59 -0
  14. PyOpenMagnetics/include/eigen3/Eigen/Householder +29 -0
  15. PyOpenMagnetics/include/eigen3/Eigen/IterativeLinearSolvers +48 -0
  16. PyOpenMagnetics/include/eigen3/Eigen/Jacobi +32 -0
  17. PyOpenMagnetics/include/eigen3/Eigen/KLUSupport +41 -0
  18. PyOpenMagnetics/include/eigen3/Eigen/LU +47 -0
  19. PyOpenMagnetics/include/eigen3/Eigen/MetisSupport +35 -0
  20. PyOpenMagnetics/include/eigen3/Eigen/OrderingMethods +70 -0
  21. PyOpenMagnetics/include/eigen3/Eigen/PaStiXSupport +49 -0
  22. PyOpenMagnetics/include/eigen3/Eigen/PardisoSupport +35 -0
  23. PyOpenMagnetics/include/eigen3/Eigen/QR +50 -0
  24. PyOpenMagnetics/include/eigen3/Eigen/QtAlignedMalloc +39 -0
  25. PyOpenMagnetics/include/eigen3/Eigen/SPQRSupport +34 -0
  26. PyOpenMagnetics/include/eigen3/Eigen/SVD +50 -0
  27. PyOpenMagnetics/include/eigen3/Eigen/Sparse +34 -0
  28. PyOpenMagnetics/include/eigen3/Eigen/SparseCholesky +37 -0
  29. PyOpenMagnetics/include/eigen3/Eigen/SparseCore +69 -0
  30. PyOpenMagnetics/include/eigen3/Eigen/SparseLU +50 -0
  31. PyOpenMagnetics/include/eigen3/Eigen/SparseQR +36 -0
  32. PyOpenMagnetics/include/eigen3/Eigen/StdDeque +27 -0
  33. PyOpenMagnetics/include/eigen3/Eigen/StdList +26 -0
  34. PyOpenMagnetics/include/eigen3/Eigen/StdVector +27 -0
  35. PyOpenMagnetics/include/eigen3/Eigen/SuperLUSupport +64 -0
  36. PyOpenMagnetics/include/eigen3/Eigen/UmfPackSupport +40 -0
  37. PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
  38. PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
  39. PyOpenMagnetics/include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  40. PyOpenMagnetics/include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  41. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
  42. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Array.h +417 -0
  43. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  44. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
  45. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Assign.h +90 -0
  46. PyOpenMagnetics/include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
  47. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
  48. PyOpenMagnetics/include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
  49. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Block.h +448 -0
  50. PyOpenMagnetics/include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
  51. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
  52. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
  53. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
  54. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
  55. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  56. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  57. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  58. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  59. PyOpenMagnetics/include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
  60. PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
  61. PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  62. PyOpenMagnetics/include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
  63. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
  64. PyOpenMagnetics/include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
  65. PyOpenMagnetics/include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
  66. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Dot.h +318 -0
  67. PyOpenMagnetics/include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
  68. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  69. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
  70. PyOpenMagnetics/include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
  71. PyOpenMagnetics/include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
  72. PyOpenMagnetics/include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
  73. PyOpenMagnetics/include/eigen3/Eigen/src/Core/IO.h +258 -0
  74. PyOpenMagnetics/include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
  75. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Inverse.h +117 -0
  76. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Map.h +171 -0
  77. PyOpenMagnetics/include/eigen3/Eigen/src/Core/MapBase.h +310 -0
  78. PyOpenMagnetics/include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
  79. PyOpenMagnetics/include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  80. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Matrix.h +565 -0
  81. PyOpenMagnetics/include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
  82. PyOpenMagnetics/include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
  83. PyOpenMagnetics/include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
  84. PyOpenMagnetics/include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
  85. PyOpenMagnetics/include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  86. PyOpenMagnetics/include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
  87. PyOpenMagnetics/include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
  88. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Product.h +191 -0
  89. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
  90. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Random.h +218 -0
  91. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Redux.h +515 -0
  92. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Ref.h +381 -0
  93. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Replicate.h +142 -0
  94. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
  95. PyOpenMagnetics/include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
  96. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Reverse.h +217 -0
  97. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Select.h +164 -0
  98. PyOpenMagnetics/include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
  99. PyOpenMagnetics/include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  100. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Solve.h +188 -0
  101. PyOpenMagnetics/include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
  102. PyOpenMagnetics/include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
  103. PyOpenMagnetics/include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
  104. PyOpenMagnetics/include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
  105. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Stride.h +116 -0
  106. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Swap.h +68 -0
  107. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Transpose.h +464 -0
  108. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
  109. PyOpenMagnetics/include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
  110. PyOpenMagnetics/include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
  111. PyOpenMagnetics/include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
  112. PyOpenMagnetics/include/eigen3/Eigen/src/Core/Visitor.h +381 -0
  113. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  114. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  115. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  116. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  117. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  118. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  119. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  120. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  121. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  122. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  123. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  124. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  125. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  126. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  127. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  128. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  129. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  130. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  131. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  132. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
  133. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  134. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  135. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  136. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  137. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  138. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  139. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  140. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  141. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  142. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  143. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  144. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  145. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  146. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  147. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  148. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  149. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  150. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  151. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  152. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  153. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  154. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  155. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  156. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  157. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  158. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  159. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  160. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  161. PyOpenMagnetics/include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  162. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  163. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  164. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  165. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
  166. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  167. PyOpenMagnetics/include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  168. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  169. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  170. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  171. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  172. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  173. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  174. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  175. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
  176. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  177. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  178. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  179. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  180. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  181. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  182. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  183. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  184. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  185. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  186. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  187. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  188. PyOpenMagnetics/include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  189. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
  190. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  191. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
  192. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  193. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  194. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  195. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
  196. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
  197. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
  198. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
  199. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
  200. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  201. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  202. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  203. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
  204. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  205. PyOpenMagnetics/include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
  206. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  207. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  208. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  209. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  210. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  211. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  212. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  213. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  214. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  215. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  216. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  217. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  218. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  219. PyOpenMagnetics/include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  220. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
  221. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
  222. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
  223. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
  224. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
  225. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
  226. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  227. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
  228. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
  229. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  230. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
  231. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
  232. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
  233. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
  234. PyOpenMagnetics/include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  235. PyOpenMagnetics/include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
  236. PyOpenMagnetics/include/eigen3/Eigen/src/Householder/Householder.h +176 -0
  237. PyOpenMagnetics/include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
  238. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  239. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  240. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  241. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  242. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  243. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  244. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  245. PyOpenMagnetics/include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  246. PyOpenMagnetics/include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
  247. PyOpenMagnetics/include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  248. PyOpenMagnetics/include/eigen3/Eigen/src/LU/Determinant.h +117 -0
  249. PyOpenMagnetics/include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
  250. PyOpenMagnetics/include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
  251. PyOpenMagnetics/include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
  252. PyOpenMagnetics/include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  253. PyOpenMagnetics/include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
  254. PyOpenMagnetics/include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  255. PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
  256. PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  257. PyOpenMagnetics/include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
  258. PyOpenMagnetics/include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  259. PyOpenMagnetics/include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  260. PyOpenMagnetics/include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  261. PyOpenMagnetics/include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  262. PyOpenMagnetics/include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  263. PyOpenMagnetics/include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  264. PyOpenMagnetics/include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
  265. PyOpenMagnetics/include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  266. PyOpenMagnetics/include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  267. PyOpenMagnetics/include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
  268. PyOpenMagnetics/include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
  269. PyOpenMagnetics/include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  270. PyOpenMagnetics/include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
  271. PyOpenMagnetics/include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  272. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  273. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  274. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
  275. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  276. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  277. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  278. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
  279. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
  280. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  281. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  282. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  283. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  284. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  285. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  286. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
  287. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  288. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
  289. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  290. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  291. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  292. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
  293. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
  294. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
  295. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  296. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  297. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  298. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  299. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  300. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
  301. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
  302. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
  303. PyOpenMagnetics/include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  304. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
  305. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  306. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  307. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  308. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  309. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  310. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  311. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  312. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  313. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  314. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  315. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  316. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  317. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  318. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  319. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  320. PyOpenMagnetics/include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  321. PyOpenMagnetics/include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
  322. PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
  323. PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
  324. PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
  325. PyOpenMagnetics/include/eigen3/Eigen/src/StlSupport/details.h +84 -0
  326. PyOpenMagnetics/include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  327. PyOpenMagnetics/include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  328. PyOpenMagnetics/include/eigen3/Eigen/src/misc/Image.h +82 -0
  329. PyOpenMagnetics/include/eigen3/Eigen/src/misc/Kernel.h +79 -0
  330. PyOpenMagnetics/include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
  331. PyOpenMagnetics/include/eigen3/Eigen/src/misc/blas.h +440 -0
  332. PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapack.h +152 -0
  333. PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
  334. PyOpenMagnetics/include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
  335. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  336. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  337. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
  338. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  339. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  340. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  341. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  342. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  343. PyOpenMagnetics/include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
  344. PyOpenMagnetics/include/eigen3/signature_of_eigen3_matrix_library +1 -0
  345. PyOpenMagnetics/include/eigen3/unsupported/Eigen/AdolcForward +159 -0
  346. PyOpenMagnetics/include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
  347. PyOpenMagnetics/include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
  348. PyOpenMagnetics/include/eigen3/unsupported/Eigen/AutoDiff +46 -0
  349. PyOpenMagnetics/include/eigen3/unsupported/Eigen/BVH +95 -0
  350. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
  351. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
  352. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
  353. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
  354. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
  355. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
  356. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
  357. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
  358. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
  359. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
  360. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
  361. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
  362. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
  363. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
  364. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
  365. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
  366. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
  367. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
  368. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
  369. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
  370. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
  371. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
  372. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
  373. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
  374. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
  375. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
  376. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
  377. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
  378. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
  379. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
  380. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
  381. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
  382. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
  383. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
  384. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
  385. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
  386. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
  387. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
  388. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
  389. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
  390. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
  391. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
  392. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
  393. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
  394. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
  395. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
  396. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
  397. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
  398. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
  399. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
  400. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
  401. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
  402. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
  403. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
  404. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
  405. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
  406. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
  407. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
  408. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
  409. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
  410. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
  411. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
  412. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
  413. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
  414. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
  415. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
  416. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
  417. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
  418. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
  419. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
  420. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
  421. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
  422. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
  423. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
  424. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
  425. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
  426. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
  427. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
  428. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
  429. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
  430. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
  431. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
  432. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
  433. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
  434. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
  435. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
  436. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
  437. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
  438. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
  439. PyOpenMagnetics/include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
  440. PyOpenMagnetics/include/eigen3/unsupported/Eigen/EulerAngles +43 -0
  441. PyOpenMagnetics/include/eigen3/unsupported/Eigen/FFT +419 -0
  442. PyOpenMagnetics/include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
  443. PyOpenMagnetics/include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
  444. PyOpenMagnetics/include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
  445. PyOpenMagnetics/include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
  446. PyOpenMagnetics/include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
  447. PyOpenMagnetics/include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
  448. PyOpenMagnetics/include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
  449. PyOpenMagnetics/include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
  450. PyOpenMagnetics/include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
  451. PyOpenMagnetics/include/eigen3/unsupported/Eigen/Polynomials +137 -0
  452. PyOpenMagnetics/include/eigen3/unsupported/Eigen/Skyline +39 -0
  453. PyOpenMagnetics/include/eigen3/unsupported/Eigen/SparseExtra +54 -0
  454. PyOpenMagnetics/include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
  455. PyOpenMagnetics/include/eigen3/unsupported/Eigen/Splines +35 -0
  456. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
  457. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
  458. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
  459. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
  460. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
  461. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
  462. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
  463. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
  464. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
  465. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
  466. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
  467. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
  468. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
  469. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
  470. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
  471. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
  472. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
  473. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
  474. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
  475. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
  476. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
  477. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
  478. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
  479. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
  480. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
  481. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
  482. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
  483. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
  484. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
  485. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
  486. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
  487. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
  488. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
  489. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
  490. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
  491. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
  492. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
  493. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
  494. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
  495. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
  496. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
  497. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
  498. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
  499. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
  500. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
  501. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
  502. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
  503. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
  504. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
  505. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
  506. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
  507. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
  508. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
  509. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
  510. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
  511. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
  512. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
  513. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
  514. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
  515. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
  516. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
  517. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
  518. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
  519. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
  520. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
  521. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
  522. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
  523. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
  524. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
  525. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
  526. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
  527. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
  528. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
  529. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
  530. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
  531. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
  532. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
  533. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
  534. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
  535. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
  536. PyOpenMagnetics/include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
  537. PyOpenMagnetics/include/pybind11_json/pybind11_json.hpp +249 -0
  538. PyOpenMagnetics/llms.txt +815 -0
  539. PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonConfig.cmake +52 -0
  540. PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonConfigVersion.cmake +32 -0
  541. PyOpenMagnetics/share/cmake/pybind11_json/pybind11_jsonTargets.cmake +106 -0
  542. PyOpenMagnetics/share/eigen3/cmake/Eigen3Config.cmake +37 -0
  543. PyOpenMagnetics/share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
  544. PyOpenMagnetics/share/eigen3/cmake/Eigen3Targets.cmake +106 -0
  545. PyOpenMagnetics/share/eigen3/cmake/UseEigen3.cmake +6 -0
  546. PyOpenMagnetics/share/pkgconfig/pybind11_json.pc +7 -0
  547. pyopenmagnetics-1.7.5.dist-info/METADATA +487 -0
  548. pyopenmagnetics-1.7.5.dist-info/RECORD +550 -0
  549. pyopenmagnetics-1.7.5.dist-info/WHEEL +5 -0
  550. 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.