nmag-python-3 0.0.5__tar.gz → 0.0.6__tar.gz

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 (161) hide show
  1. {nmag_python_3-0.0.5/src/nmag_python_3.egg-info → nmag_python_3-0.0.6}/PKG-INFO +1 -1
  2. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/pyproject.toml +1 -1
  3. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/__init__.py +16 -12
  4. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6/src/nmag_python_3.egg-info}/PKG-INFO +1 -1
  5. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesh_io.py +9 -0
  6. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/LICENSE +0 -0
  7. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/README.md +0 -0
  8. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/setup.cfg +0 -0
  9. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/__init__.py +0 -0
  10. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/anisotropy.py +0 -0
  11. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/evaluation.py +0 -0
  12. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/model.py +0 -0
  13. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/predefined.py +0 -0
  14. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/py.typed +0 -0
  15. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/anisotropy/values.py +0 -0
  16. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/mag_material/__init__.py +0 -0
  17. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/mag_material/mag_material.py +0 -0
  18. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/mag_material/parameters.py +0 -0
  19. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/mag_material/py.typed +0 -0
  20. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/__init__.py +0 -0
  21. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/backends.py +0 -0
  22. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/checkpoint.py +0 -0
  23. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/cli/__init__.py +0 -0
  24. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/cli/nmagpp.py +0 -0
  25. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/config.py +0 -0
  26. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/__init__.py +0 -0
  27. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/bem_operator.py +0 -0
  28. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/geometry.py +0 -0
  29. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/lindholm.py +0 -0
  30. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/lindholm_fast.py +0 -0
  31. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/demag/linear.py +0 -0
  32. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/dynamics/__init__.py +0 -0
  33. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/output.py +0 -0
  34. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/parallel.py +0 -0
  35. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/py.typed +0 -0
  36. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/resources.py +0 -0
  37. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/__init__.py +0 -0
  38. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/fields.py +0 -0
  39. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/materials.py +0 -0
  40. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/__init__.py +0 -0
  41. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/__init__.py +0 -0
  42. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/diagnostics.py +0 -0
  43. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/dirichlet.py +0 -0
  44. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/hierarchical.py +0 -0
  45. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/operator.py +0 -0
  46. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/__init__.py +0 -0
  47. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/assembly.py +0 -0
  48. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/charges.py +0 -0
  49. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/geometry.py +0 -0
  50. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/__init__.py +0 -0
  51. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/auxiliary.py +0 -0
  52. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/probe.py +0 -0
  53. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/recovery.py +0 -0
  54. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/solver.py +0 -0
  55. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/__init__.py +0 -0
  56. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/advance.py +0 -0
  57. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/integrator.py +0 -0
  58. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/__init__.py +0 -0
  59. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/coefficients.py +0 -0
  60. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/fields.py +0 -0
  61. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/llg_rhs.py +0 -0
  62. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/__init__.py +0 -0
  63. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/arrays.py +0 -0
  64. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/availability.py +0 -0
  65. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/averages.py +0 -0
  66. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/derived.py +0 -0
  67. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/maxangle.py +0 -0
  68. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/probes.py +0 -0
  69. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/implicit_dynamics.py +0 -0
  70. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/__init__.py +0 -0
  71. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/geometry.py +0 -0
  72. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/materials.py +0 -0
  73. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/probe.py +0 -0
  74. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/restart.py +0 -0
  75. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/simulation/support.py +0 -0
  76. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag/vtk_export.py +0 -0
  77. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/SOURCES.txt +0 -0
  78. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/dependency_links.txt +0 -0
  79. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/entry_points.txt +0 -0
  80. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/requires.txt +0 -0
  81. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/top_level.txt +0 -0
  82. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/__init__.py +0 -0
  83. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/backend.py +0 -0
  84. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/cli/__init__.py +0 -0
  85. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/cli/nmeshimport.py +0 -0
  86. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/geometry/__init__.py +0 -0
  87. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/geometry/boolean_operations.py +0 -0
  88. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/geometry/primitives.py +0 -0
  89. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/geometry/transform.py +0 -0
  90. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/io/__init__.py +0 -0
  91. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/io/ascii.py +0 -0
  92. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/io/legacy_nmesh_hdf5.py +0 -0
  93. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/io/meshio_support.py +0 -0
  94. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/io/netgen.py +0 -0
  95. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesh_generation.py +0 -0
  96. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesh_model.py +0 -0
  97. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesh_utilities.py +0 -0
  98. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/__init__.py +0 -0
  99. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/driver.py +0 -0
  100. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/meshing_defaults.py +0 -0
  101. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/meshing_parameters.py +0 -0
  102. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity.py +0 -0
  103. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_canonical.py +0 -0
  104. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_comparison.py +0 -0
  105. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_metrics.py +0 -0
  106. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/periodic.py +0 -0
  107. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/__init__.py +0 -0
  108. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/_constants.py +0 -0
  109. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/_types.py +0 -0
  110. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/density.py +0 -0
  111. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/__init__.py +0 -0
  112. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/state.py +0 -0
  113. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/steps.py +0 -0
  114. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/topology.py +0 -0
  115. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/__init__.py +0 -0
  116. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/jit.py +0 -0
  117. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/neighbors.py +0 -0
  118. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/simplex.py +0 -0
  119. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/summary.py +0 -0
  120. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/types.py +0 -0
  121. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/__init__.py +0 -0
  122. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/builder.py +0 -0
  123. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/model.py +0 -0
  124. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/__init__.py +0 -0
  125. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/periodic.py +0 -0
  126. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/points.py +0 -0
  127. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/sampling.py +0 -0
  128. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/__init__.py +0 -0
  129. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/finalize.py +0 -0
  130. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/recovery.py +0 -0
  131. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/mesher/sectioned_config.py +0 -0
  132. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/nmesh.py +0 -0
  133. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/py.typed +0 -0
  134. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/utils/__init__.py +0 -0
  135. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/utils/array_list_utils.py +0 -0
  136. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/utils/constants.py +0 -0
  137. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/utils/timing_memory_utils.py +0 -0
  138. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/nmesh/utils/types.py +0 -0
  139. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/si/constants.py +0 -0
  140. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/si/physical.py +0 -0
  141. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/si/py.typed +0 -0
  142. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/__init__.py +0 -0
  143. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/clock.py +0 -0
  144. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/data_writer.py +0 -0
  145. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/data_writer_collection.py +0 -0
  146. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/hysteresis.py +0 -0
  147. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/hysteresis_runner.py +0 -0
  148. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/hysteresis_schedule.py +0 -0
  149. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/inference/__init__.py +0 -0
  150. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/inference/inference.py +0 -0
  151. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/py.typed +0 -0
  152. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/quantity.py +0 -0
  153. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/simulation/simulation_core.py +0 -0
  154. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/throttler/__init__.py +0 -0
  155. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/throttler/py.typed +0 -0
  156. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/throttler/throttler.py +0 -0
  157. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/when/__init__.py +0 -0
  158. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/when/py.typed +0 -0
  159. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/src/when/when.py +0 -0
  160. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/tests/test_docs_examples.py +0 -0
  161. {nmag_python_3-0.0.5 → nmag_python_3-0.0.6}/tests/test_packaging_hygiene.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nmag-python-3
3
- Version: 0.0.5
3
+ Version: 0.0.6
4
4
  Summary: Standalone Python 3 implementation of the Nmag micromagnetic simulation interface
5
5
  Author-email: TriMagnetix <info@trimagnetix.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nmag-python-3"
7
- version = "0.0.5"
7
+ version = "0.0.6"
8
8
  authors = [{ name = "TriMagnetix", email = "info@trimagnetix.com" }]
9
9
  description = "Standalone Python 3 implementation of the Nmag micromagnetic simulation interface"
10
10
  readme = "README.md"
@@ -264,7 +264,8 @@ class Simulation(
264
264
  Args:
265
265
  filename: Legacy Nmesh or Meshio-supported mesh file.
266
266
  region_names_and_mag_mats: ``(region_name, material)`` pairs in
267
- ascending mesh-region order, starting at region 1.
267
+ ascending mesh-region order. Mesh region IDs do not need to be
268
+ contiguous or start at region 1.
268
269
  unit_length: Physical length represented by one mesh coordinate
269
270
  unit.
270
271
  do_reorder: Request legacy node reordering. Reordering is currently
@@ -298,21 +299,24 @@ class Simulation(
298
299
  if manual_distribution is not None:
299
300
  self.mesh.set_vertex_distribution(manual_distribution)
300
301
 
301
- self.region_name_list = [name for name, _ in region_names_and_mag_mats]
302
- self.region_name_of_id = {
303
- index: name for index, name in enumerate(self.region_name_list, start=1)
304
- }
305
- self.region_id_of_name = {name: index for index, name in self.region_name_of_id.items()}
306
-
307
- mesh_region_ids = {int(region_id) for region_id in self.mesh.regions}
308
- configured_region_ids = set(self.region_name_of_id)
309
- if mesh_region_ids != configured_region_ids:
302
+ mesh_region_ids = sorted({int(region_id) for region_id in self.mesh.regions})
303
+ if len(mesh_region_ids) != len(region_names_and_mag_mats):
304
+ configured_names = [name for name, _ in region_names_and_mag_mats]
310
305
  raise ValueError(
311
306
  "Mesh material regions do not match the configured region list: "
312
- f"mesh={sorted(mesh_region_ids)}, configured={sorted(configured_region_ids)}. "
313
- "Materials must be supplied in ascending mesh-region order."
307
+ f"mesh={mesh_region_ids}, configured={configured_names}. "
308
+ "Supply one material per mesh region, in ascending mesh-region order."
314
309
  )
315
310
 
311
+ self.region_name_list = [name for name, _ in region_names_and_mag_mats]
312
+ self.region_name_of_id = {
313
+ region_id: name
314
+ for region_id, name in zip(mesh_region_ids, self.region_name_list, strict=True)
315
+ }
316
+ self.region_id_of_name = {
317
+ name: region_id for region_id, name in self.region_name_of_id.items()
318
+ }
319
+
316
320
  self.mats_of_region_name = {}
317
321
  self.mat_of_mat_name = {}
318
322
  for name, materials in region_names_and_mag_mats:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nmag-python-3
3
- Version: 0.0.5
3
+ Version: 0.0.6
4
4
  Summary: Standalone Python 3 implementation of the Nmag micromagnetic simulation interface
5
5
  Author-email: TriMagnetix <info@trimagnetix.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -28,6 +28,11 @@ def _is_nmesh_hdf5_file(filename: str | Path) -> bool:
28
28
  return is_legacy_nmesh_hdf5(filename)
29
29
 
30
30
 
31
+ def _is_netgen_neutral_file(filename: str | Path) -> bool:
32
+ name = Path(filename).name.lower()
33
+ return name.endswith((".neutral", ".neutral.gz"))
34
+
35
+
31
36
  def hdf5_mesh_get_permutation(filename: str | Path) -> list[int] | None:
32
37
  """Stub for retrieving permutation from HDF5."""
33
38
  log.warning("hdf5_mesh_get_permutation: HDF5 support is stubbed.")
@@ -62,6 +67,10 @@ class MeshFromFile(MeshBase):
62
67
  from .io.legacy_nmesh_hdf5 import load_raw_mesh_from_legacy_nmesh_hdf5
63
68
 
64
69
  raw = load_raw_mesh_from_legacy_nmesh_hdf5(path)
70
+ elif _is_netgen_neutral_file(path):
71
+ from .io.netgen import read_netgen_neutral
72
+
73
+ raw = read_netgen_neutral(path)
65
74
  else:
66
75
  from .io import load_raw_mesh_with_meshio
67
76
 
File without changes
File without changes
File without changes