nmag-python-3 0.0.4__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.4/src/nmag_python_3.egg-info → nmag_python_3-0.0.6}/PKG-INFO +4 -4
  2. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/pyproject.toml +11 -3
  3. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/__init__.py +16 -12
  4. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/vtk_export.py +3 -2
  5. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6/src/nmag_python_3.egg-info}/PKG-INFO +4 -4
  6. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/requires.txt +3 -3
  7. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesh_io.py +9 -0
  8. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/LICENSE +0 -0
  9. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/README.md +0 -0
  10. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/setup.cfg +0 -0
  11. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/__init__.py +0 -0
  12. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/anisotropy.py +0 -0
  13. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/evaluation.py +0 -0
  14. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/model.py +0 -0
  15. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/predefined.py +0 -0
  16. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/py.typed +0 -0
  17. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/anisotropy/values.py +0 -0
  18. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/mag_material/__init__.py +0 -0
  19. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/mag_material/mag_material.py +0 -0
  20. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/mag_material/parameters.py +0 -0
  21. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/mag_material/py.typed +0 -0
  22. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/__init__.py +0 -0
  23. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/backends.py +0 -0
  24. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/checkpoint.py +0 -0
  25. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/cli/__init__.py +0 -0
  26. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/cli/nmagpp.py +0 -0
  27. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/config.py +0 -0
  28. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/__init__.py +0 -0
  29. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/bem_operator.py +0 -0
  30. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/geometry.py +0 -0
  31. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/lindholm.py +0 -0
  32. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/lindholm_fast.py +0 -0
  33. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/demag/linear.py +0 -0
  34. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/dynamics/__init__.py +0 -0
  35. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/output.py +0 -0
  36. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/parallel.py +0 -0
  37. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/py.typed +0 -0
  38. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/resources.py +0 -0
  39. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/__init__.py +0 -0
  40. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/fields.py +0 -0
  41. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/anisotropy/materials.py +0 -0
  42. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/__init__.py +0 -0
  43. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/__init__.py +0 -0
  44. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/diagnostics.py +0 -0
  45. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/dirichlet.py +0 -0
  46. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/hierarchical.py +0 -0
  47. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/bem/operator.py +0 -0
  48. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/__init__.py +0 -0
  49. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/assembly.py +0 -0
  50. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/charges.py +0 -0
  51. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fem/geometry.py +0 -0
  52. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/__init__.py +0 -0
  53. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/auxiliary.py +0 -0
  54. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/probe.py +0 -0
  55. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/fields/recovery.py +0 -0
  56. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/demag/solver.py +0 -0
  57. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/__init__.py +0 -0
  58. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/advance.py +0 -0
  59. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/dynamics/integrator.py +0 -0
  60. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/__init__.py +0 -0
  61. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/coefficients.py +0 -0
  62. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/fields.py +0 -0
  63. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/exchange/llg_rhs.py +0 -0
  64. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/__init__.py +0 -0
  65. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/arrays.py +0 -0
  66. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/availability.py +0 -0
  67. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/averages.py +0 -0
  68. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/derived.py +0 -0
  69. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/maxangle.py +0 -0
  70. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/fields/probes.py +0 -0
  71. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/implicit_dynamics.py +0 -0
  72. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/__init__.py +0 -0
  73. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/geometry.py +0 -0
  74. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/materials.py +0 -0
  75. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/mesh/probe.py +0 -0
  76. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/restart.py +0 -0
  77. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag/simulation/support.py +0 -0
  78. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/SOURCES.txt +0 -0
  79. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/dependency_links.txt +0 -0
  80. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/entry_points.txt +0 -0
  81. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmag_python_3.egg-info/top_level.txt +0 -0
  82. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/__init__.py +0 -0
  83. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/backend.py +0 -0
  84. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/cli/__init__.py +0 -0
  85. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/cli/nmeshimport.py +0 -0
  86. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/geometry/__init__.py +0 -0
  87. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/geometry/boolean_operations.py +0 -0
  88. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/geometry/primitives.py +0 -0
  89. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/geometry/transform.py +0 -0
  90. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/io/__init__.py +0 -0
  91. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/io/ascii.py +0 -0
  92. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/io/legacy_nmesh_hdf5.py +0 -0
  93. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/io/meshio_support.py +0 -0
  94. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/io/netgen.py +0 -0
  95. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesh_generation.py +0 -0
  96. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesh_model.py +0 -0
  97. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesh_utilities.py +0 -0
  98. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/__init__.py +0 -0
  99. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/driver.py +0 -0
  100. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/meshing_defaults.py +0 -0
  101. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/meshing_parameters.py +0 -0
  102. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity.py +0 -0
  103. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_canonical.py +0 -0
  104. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_comparison.py +0 -0
  105. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/parity_metrics.py +0 -0
  106. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/periodic.py +0 -0
  107. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/__init__.py +0 -0
  108. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/_constants.py +0 -0
  109. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/_types.py +0 -0
  110. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/density.py +0 -0
  111. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/__init__.py +0 -0
  112. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/state.py +0 -0
  113. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/steps.py +0 -0
  114. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/engine/topology.py +0 -0
  115. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/__init__.py +0 -0
  116. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/jit.py +0 -0
  117. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/neighbors.py +0 -0
  118. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/simplex.py +0 -0
  119. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/summary.py +0 -0
  120. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/forces/types.py +0 -0
  121. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/__init__.py +0 -0
  122. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/builder.py +0 -0
  123. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/geometry/model.py +0 -0
  124. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/__init__.py +0 -0
  125. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/periodic.py +0 -0
  126. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/points.py +0 -0
  127. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/seeding/sampling.py +0 -0
  128. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/__init__.py +0 -0
  129. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/finalize.py +0 -0
  130. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/relaxation/topology/recovery.py +0 -0
  131. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/mesher/sectioned_config.py +0 -0
  132. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/nmesh.py +0 -0
  133. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/py.typed +0 -0
  134. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/utils/__init__.py +0 -0
  135. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/utils/array_list_utils.py +0 -0
  136. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/utils/constants.py +0 -0
  137. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/utils/timing_memory_utils.py +0 -0
  138. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/nmesh/utils/types.py +0 -0
  139. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/si/constants.py +0 -0
  140. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/si/physical.py +0 -0
  141. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/si/py.typed +0 -0
  142. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/__init__.py +0 -0
  143. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/clock.py +0 -0
  144. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/data_writer.py +0 -0
  145. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/data_writer_collection.py +0 -0
  146. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/hysteresis.py +0 -0
  147. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/hysteresis_runner.py +0 -0
  148. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/hysteresis_schedule.py +0 -0
  149. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/inference/__init__.py +0 -0
  150. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/inference/inference.py +0 -0
  151. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/py.typed +0 -0
  152. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/quantity.py +0 -0
  153. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/simulation/simulation_core.py +0 -0
  154. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/throttler/__init__.py +0 -0
  155. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/throttler/py.typed +0 -0
  156. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/throttler/throttler.py +0 -0
  157. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/when/__init__.py +0 -0
  158. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/when/py.typed +0 -0
  159. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/src/when/when.py +0 -0
  160. {nmag_python_3-0.0.4 → nmag_python_3-0.0.6}/tests/test_docs_examples.py +0 -0
  161. {nmag_python_3-0.0.4 → 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.4
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
@@ -9,9 +9,9 @@ Requires-Python: >=3.10
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
11
  Requires-Dist: pint
12
- Requires-Dist: numpy
12
+ Requires-Dist: numpy<2.6,>=1.22
13
13
  Requires-Dist: scipy
14
- Requires-Dist: numba
14
+ Requires-Dist: numba>=0.67
15
15
  Requires-Dist: tabulate
16
16
  Requires-Dist: meshio
17
17
  Requires-Dist: h5py
@@ -25,7 +25,7 @@ Provides-Extra: docs
25
25
  Requires-Dist: mkdocs==1.6.1; extra == "docs"
26
26
  Requires-Dist: mkdocs-material==9.7.7; extra == "docs"
27
27
  Requires-Dist: mkdocstrings==1.0.6; extra == "docs"
28
- Requires-Dist: mkdocstrings-python==2.0.5; extra == "docs"
28
+ Requires-Dist: mkdocstrings-python==2.0.8; extra == "docs"
29
29
  Provides-Extra: dev
30
30
  Requires-Dist: maturin<2,>=1.14; extra == "dev"
31
31
  Requires-Dist: h5py-stubs<0.2,>=0.1.2; extra == "dev"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "nmag-python-3"
7
- version = "0.0.4"
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"
@@ -12,7 +12,15 @@ requires-python = ">=3.10"
12
12
  classifiers = [
13
13
  "Programming Language :: Python :: 3",
14
14
  "Operating System :: OS Independent" ]
15
- dependencies = ["pint", "numpy", "scipy", "numba", "tabulate", "meshio", "h5py"]
15
+ dependencies = [
16
+ "pint",
17
+ "numpy>=1.22,<2.6",
18
+ "scipy",
19
+ "numba>=0.67",
20
+ "tabulate",
21
+ "meshio",
22
+ "h5py",
23
+ ]
16
24
 
17
25
  [project.scripts]
18
26
  nmeshimport = "nmesh.cli.nmeshimport:main"
@@ -25,7 +33,7 @@ docs = [
25
33
  "mkdocs==1.6.1",
26
34
  "mkdocs-material==9.7.7",
27
35
  "mkdocstrings==1.0.6",
28
- "mkdocstrings-python==2.0.5",
36
+ "mkdocstrings-python==2.0.8",
29
37
  ]
30
38
  dev = [
31
39
  "maturin>=1.14,<2",
@@ -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:
@@ -8,6 +8,7 @@ from pathlib import Path
8
8
  import h5py
9
9
  import meshio
10
10
  import numpy as np
11
+ from numpy.typing import ArrayLike
11
12
 
12
13
  import nmesh
13
14
 
@@ -77,7 +78,7 @@ def export_vtk(
77
78
  if np.any(simplices < 0) or np.any(simplices >= len(points)):
78
79
  raise ValueError("Mesh cell indices are outside the snapshot point range.")
79
80
 
80
- point_data: dict[str, np.ndarray] = {}
81
+ point_data: dict[str, ArrayLike] = {}
81
82
  field_group = handle.get("fields")
82
83
  if not isinstance(field_group, h5py.Group):
83
84
  raise ValueError("Snapshot is missing the /fields group.")
@@ -97,7 +98,7 @@ def export_vtk(
97
98
  )
98
99
  point_data[field_name] = np.asarray(values, dtype=float)
99
100
 
100
- cell_data: dict[str, list[np.ndarray]] = {}
101
+ cell_data: dict[str, list[ArrayLike]] = {}
101
102
  if regions is not None:
102
103
  cell_data["region"] = [regions]
103
104
  mesh = meshio.Mesh(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nmag-python-3
3
- Version: 0.0.4
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
@@ -9,9 +9,9 @@ Requires-Python: >=3.10
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
11
  Requires-Dist: pint
12
- Requires-Dist: numpy
12
+ Requires-Dist: numpy<2.6,>=1.22
13
13
  Requires-Dist: scipy
14
- Requires-Dist: numba
14
+ Requires-Dist: numba>=0.67
15
15
  Requires-Dist: tabulate
16
16
  Requires-Dist: meshio
17
17
  Requires-Dist: h5py
@@ -25,7 +25,7 @@ Provides-Extra: docs
25
25
  Requires-Dist: mkdocs==1.6.1; extra == "docs"
26
26
  Requires-Dist: mkdocs-material==9.7.7; extra == "docs"
27
27
  Requires-Dist: mkdocstrings==1.0.6; extra == "docs"
28
- Requires-Dist: mkdocstrings-python==2.0.5; extra == "docs"
28
+ Requires-Dist: mkdocstrings-python==2.0.8; extra == "docs"
29
29
  Provides-Extra: dev
30
30
  Requires-Dist: maturin<2,>=1.14; extra == "dev"
31
31
  Requires-Dist: h5py-stubs<0.2,>=0.1.2; extra == "dev"
@@ -1,7 +1,7 @@
1
1
  pint
2
- numpy
2
+ numpy<2.6,>=1.22
3
3
  scipy
4
- numba
4
+ numba>=0.67
5
5
  tabulate
6
6
  meshio
7
7
  h5py
@@ -19,7 +19,7 @@ ruff<1,>=0.12
19
19
  mkdocs==1.6.1
20
20
  mkdocs-material==9.7.7
21
21
  mkdocstrings==1.0.6
22
- mkdocstrings-python==2.0.5
22
+ mkdocstrings-python==2.0.8
23
23
 
24
24
  [rust]
25
25
  maturin<2,>=1.14
@@ -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