imas-python 1.1.2.dev42__tar.gz → 1.1.2.dev55__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.

Potentially problematic release.


This version of imas-python might be problematic. Click here for more details.

Files changed (329) hide show
  1. {imas_python-1.1.2.dev42/imas_python.egg-info → imas_python-1.1.2.dev55}/PKG-INFO +2 -2
  2. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/ci/build_dd_zip.sh +13 -3
  3. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/ci/build_docs_and_dist.sh +5 -3
  4. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/ci/linting.sh +10 -3
  5. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/ci/run_benchmark.sh +8 -2
  6. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/ci/run_pytest.sh +12 -5
  7. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/conftest.py +9 -0
  8. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/_version.py +2 -2
  9. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDSDef.zip +0 -0
  10. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/db_entry_nc.py +8 -0
  11. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/ids2nc.py +14 -1
  12. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/nc_validate.py +5 -4
  13. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_primitive.py +4 -1
  14. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_cli.py +8 -2
  15. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_dbentry.py +1 -1
  16. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_helpers.py +22 -8
  17. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_toplevel.py +1 -1
  18. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_types.py +11 -2
  19. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_nbc_change.py +1 -1
  20. imas_python-1.1.2.dev55/imas/test/test_nc_autofill.py +54 -0
  21. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_static_ids.py +1 -1
  22. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_util.py +3 -3
  23. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55/imas_python.egg-info}/PKG-INFO +2 -2
  24. imas_python-1.1.2.dev55/imas_python.egg-info/SOURCES.txt +220 -0
  25. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas_python.egg-info/requires.txt +1 -1
  26. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/pyproject.toml +1 -1
  27. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/core_instant_changes/core_instant_changes_identifier.xml +0 -15
  28. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/core_sources/core_source_identifier.xml +0 -76
  29. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/core_transport/core_transport_identifier.xml +0 -25
  30. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/edge_sources/edge_source_identifier.xml +0 -31
  31. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/edge_transport/edge_transport_identifier.xml +0 -25
  32. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/em_coupling/em_coupling_quantity_identifier.xml +0 -27
  33. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/equilibrium/equilibrium_profiles_2d_identifier.xml +0 -21
  34. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/magnetics/magnetics_flux_loop_type_identifier.xml +0 -14
  35. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/magnetics/magnetics_probe_type_identifier.xml +0 -16
  36. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/magnetics/magnetics_rogowski_measured_identifier.xml +0 -13
  37. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/mhd_linear/mhd_linear_ballooning_identifier.xml +0 -13
  38. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/mhd_linear/mhd_linear_equations_identifier.xml +0 -15
  39. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/mhd_linear/mhd_linear_model_identifier.xml +0 -14
  40. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/mhd_linear/mhd_linear_perturbation_identifier.xml +0 -24
  41. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/neutron_diagnostic/neutron_event_identifier.xml +0 -18
  42. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/neutron_diagnostic/neutron_mode_identifier.xml +0 -15
  43. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/operational_instrumentation/operational_sensor_type_identifier.xml +0 -15
  44. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/pf_active/pf_active_coil_function_identifier.xml +0 -10
  45. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/plasma_sources/plasma_source_identifier.xml +0 -70
  46. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/plasma_transport/plasma_transport_identifier.xml +0 -38
  47. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/radiation/radiation_identifier.xml +0 -23
  48. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/refractometer/refractometer_formula_identifier.xml +0 -12
  49. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/runaway_electrons/e_field_critical_identifier.xml +0 -12
  50. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/runaway_electrons/momentum_critical_avalanche_identifier.xml +0 -11
  51. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/runaway_electrons/momentum_critical_hot_tail_identifier.xml +0 -11
  52. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/spectrometer_visible/spectrometer_visible_method_identifier.xml +0 -13
  53. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/spectrometer_x_ray_crystal/crystal_mesh_identifier.xml +0 -12
  54. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/spectrometer_x_ray_crystal/spectro_x_instrument_function_identifier.xml +0 -14
  55. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/spi/shatter_cone_identifier.xml +0 -11
  56. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/coordinate_identifier.xml +0 -51
  57. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/curved_object_curvature_identifier.xml +0 -16
  58. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/curved_object_geometry_identifier.xml +0 -14
  59. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/data_type_identifier.xml +0 -12
  60. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/distribution_source_identifier.xml +0 -36
  61. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/emission_grid_identifier.xml +0 -9
  62. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/ggd_geometry_content_identifier.xml +0 -21
  63. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/ggd_identifier.xml +0 -29
  64. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/ggd_space_identifier.xml +0 -18
  65. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/ggd_subset_identifier.xml +0 -70
  66. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/materials_identifier.xml +0 -43
  67. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/midplane_identifier.xml +0 -14
  68. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/neutrals_identifier.xml +0 -20
  69. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/occurrence_type_identifier.xml +0 -11
  70. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/optical_element_identifier.xml +0 -13
  71. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/optical_element_material_identifier.xml +0 -12
  72. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/orbit_type_identifier.xml +0 -20
  73. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/poloidal_plane_coordinates_identifier.xml +0 -119
  74. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/species_reference_identifier.xml +0 -19
  75. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/statistics_type_identifier.xml +0 -17
  76. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/surface_geometry_identifier.xml +0 -16
  77. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/utilities/wave_identifier.xml +0 -15
  78. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/wall/wall_component_identifier.xml +0 -18
  79. imas_python-1.1.2.dev42/imas/assets/IDSDef/identifiers/wall/wall_description_2d_type_identifier.xml +0 -13
  80. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/core_instant_changes/core_instant_changes_identifier.xml +0 -15
  81. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/core_sources/core_source_identifier.xml +0 -76
  82. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/core_transport/core_transport_identifier.xml +0 -25
  83. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/edge_sources/edge_source_identifier.xml +0 -31
  84. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/edge_transport/edge_transport_identifier.xml +0 -25
  85. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/em_coupling/em_coupling_quantity_identifier.xml +0 -27
  86. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/equilibrium/equilibrium_profiles_2d_identifier.xml +0 -21
  87. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/magnetics/magnetics_flux_loop_type_identifier.xml +0 -14
  88. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/magnetics/magnetics_probe_type_identifier.xml +0 -16
  89. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/magnetics/magnetics_rogowski_measured_identifier.xml +0 -13
  90. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/mhd_linear/mhd_linear_ballooning_identifier.xml +0 -13
  91. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/mhd_linear/mhd_linear_equations_identifier.xml +0 -15
  92. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/mhd_linear/mhd_linear_model_identifier.xml +0 -14
  93. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/mhd_linear/mhd_linear_perturbation_identifier.xml +0 -24
  94. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/neutron_diagnostic/neutron_event_identifier.xml +0 -18
  95. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/neutron_diagnostic/neutron_mode_identifier.xml +0 -15
  96. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/operational_instrumentation/operational_sensor_type_identifier.xml +0 -15
  97. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/pf_active/pf_active_coil_function_identifier.xml +0 -10
  98. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/plasma_sources/plasma_source_identifier.xml +0 -70
  99. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/plasma_transport/plasma_transport_identifier.xml +0 -38
  100. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/radiation/radiation_identifier.xml +0 -23
  101. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/refractometer/refractometer_formula_identifier.xml +0 -12
  102. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/runaway_electrons/e_field_critical_identifier.xml +0 -12
  103. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/runaway_electrons/momentum_critical_avalanche_identifier.xml +0 -11
  104. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/runaway_electrons/momentum_critical_hot_tail_identifier.xml +0 -11
  105. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/spectrometer_visible/spectrometer_visible_method_identifier.xml +0 -13
  106. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/spectrometer_x_ray_crystal/crystal_mesh_identifier.xml +0 -12
  107. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/spectrometer_x_ray_crystal/spectro_x_instrument_function_identifier.xml +0 -14
  108. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/spi/shatter_cone_identifier.xml +0 -11
  109. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/coordinate_identifier.xml +0 -51
  110. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/curved_object_curvature_identifier.xml +0 -16
  111. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/curved_object_geometry_identifier.xml +0 -14
  112. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/data_type_identifier.xml +0 -12
  113. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/distribution_source_identifier.xml +0 -36
  114. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/emission_grid_identifier.xml +0 -9
  115. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/ggd_geometry_content_identifier.xml +0 -21
  116. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/ggd_identifier.xml +0 -29
  117. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/ggd_space_identifier.xml +0 -18
  118. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/ggd_subset_identifier.xml +0 -70
  119. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/materials_identifier.xml +0 -43
  120. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/midplane_identifier.xml +0 -14
  121. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/neutrals_identifier.xml +0 -20
  122. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/occurrence_type_identifier.xml +0 -11
  123. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/optical_element_identifier.xml +0 -13
  124. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/optical_element_material_identifier.xml +0 -12
  125. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/orbit_type_identifier.xml +0 -20
  126. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/poloidal_plane_coordinates_identifier.xml +0 -119
  127. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/species_reference_identifier.xml +0 -19
  128. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/statistics_type_identifier.xml +0 -17
  129. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/surface_geometry_identifier.xml +0 -16
  130. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/utilities/wave_identifier.xml +0 -15
  131. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/wall/wall_component_identifier.xml +0 -18
  132. imas_python-1.1.2.dev42/imas/assets/IDSDef_correct/identifiers/wall/wall_description_2d_type_identifier.xml +0 -13
  133. imas_python-1.1.2.dev42/imas/test/test_nc_autofill.py +0 -13
  134. imas_python-1.1.2.dev42/imas_python.egg-info/SOURCES.txt +0 -326
  135. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.git-blame-ignore-revs +0 -0
  136. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.git_archival.txt +0 -0
  137. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.gitattributes +0 -0
  138. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.github/workflows/linting.yml +0 -0
  139. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.github/workflows/publish.yml +0 -0
  140. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.gitignore +0 -0
  141. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.pylintrc +0 -0
  142. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/.readthedocs.yml +0 -0
  143. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/CODE_OF_CONDUCT.md +0 -0
  144. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/CONTRIBUTING.md +0 -0
  145. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/LICENSE.txt +0 -0
  146. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/MANIFEST.in +0 -0
  147. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/README.md +0 -0
  148. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/asv.conf.json +0 -0
  149. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/benchmarks/__init__.py +0 -0
  150. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/benchmarks/core_profiles.py +0 -0
  151. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/benchmarks/edge_profiles.py +0 -0
  152. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/benchmarks/technical.py +0 -0
  153. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/benchmarks/utils.py +0 -0
  154. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/.gitignore +0 -0
  155. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/Makefile +0 -0
  156. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/.gitignore +0 -0
  157. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_static/imas.css +0 -0
  158. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_static/imas_200x200.png +0 -0
  159. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/autosummary/accessor.rst +0 -0
  160. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/autosummary/accessor_attribute.rst +0 -0
  161. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/autosummary/accessor_callable.rst +0 -0
  162. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/autosummary/accessor_method.rst +0 -0
  163. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/autosummary/base.rst +0 -0
  164. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/custom-class-template.rst +0 -0
  165. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/custom-module-template.rst +0 -0
  166. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/_templates/layout.html +0 -0
  167. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/api-hidden.rst +0 -0
  168. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/api.rst +0 -0
  169. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/benchmarking.rst +0 -0
  170. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/changelog.rst +0 -0
  171. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/ci_config.rst +0 -0
  172. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/cli.rst +0 -0
  173. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/code_style.rst +0 -0
  174. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/conf.py +0 -0
  175. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/configuring.rst +0 -0
  176. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/dd_versions.rst +0 -0
  177. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/explore.rst +0 -0
  178. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/hashing.rst +0 -0
  179. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/alternative_coordinates.py +0 -0
  180. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/autoconvert_get.py +0 -0
  181. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/autoconvert_put.py +0 -0
  182. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/calc_with_units.py +0 -0
  183. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/coordinates.py +0 -0
  184. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/dd_versions.py +0 -0
  185. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/explore_data.py +0 -0
  186. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/explore_structures.py +0 -0
  187. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/hashing.py +0 -0
  188. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/ids_convert.py +0 -0
  189. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/ids_to_xarray.py +0 -0
  190. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/imas_snippets/tensorized_ids_to_xarray.py +0 -0
  191. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/metadata.rst +0 -0
  192. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced/xarray.rst +0 -0
  193. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/advanced_user_training.rst +0 -0
  194. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/analyze.rst +0 -0
  195. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/core_profiles_ne_timeslice.png +0 -0
  196. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/core_profiles_te.png +0 -0
  197. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/create.rst +0 -0
  198. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/explore.rst +0 -0
  199. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_inspect.png +0 -0
  200. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/create_core_profiles.py +0 -0
  201. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/explore_public_ec_launchers.py +0 -0
  202. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/explore_public_pf_active.py +0 -0
  203. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/explore_training_data.py +0 -0
  204. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/find_paths.py +0 -0
  205. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/iterate_core_profiles.py +0 -0
  206. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/plot_core_profiles_ne_timeslice.py +0 -0
  207. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/plot_core_profiles_te.py +0 -0
  208. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/print_idss.py +0 -0
  209. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/read_core_profiles_ne_timeslice.py +0 -0
  210. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/read_equilibrium_time_array.py +0 -0
  211. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/read_whole_equilibrium.py +0 -0
  212. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/imas_snippets/transform_grid.py +0 -0
  213. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/interactive_tab_core_profiles_toplevel.png +0 -0
  214. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/print_tree_ids_properties.png +0 -0
  215. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/setup.rst +0 -0
  216. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic/transform.rst +0 -0
  217. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/courses/basic_user_training.rst +0 -0
  218. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/identifiers.rst +0 -0
  219. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/imas_architecture.rst +0 -0
  220. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/imas_structure.png +0 -0
  221. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/index.rst +0 -0
  222. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/installing.rst +0 -0
  223. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/intro.rst +0 -0
  224. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/lazy_loading.rst +0 -0
  225. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/mdsplus.rst +0 -0
  226. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/metadata.rst +0 -0
  227. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/multi-dd.rst +0 -0
  228. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/netcdf/conventions.rst +0 -0
  229. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/netcdf.rst +0 -0
  230. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/release_imas.rst +0 -0
  231. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/resampling.rst +0 -0
  232. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/docs/source/validation.rst +0 -0
  233. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/__init__.py +0 -0
  234. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/__main__.py +0 -0
  235. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/_util.py +0 -0
  236. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDSDef2MDSpreTree.xsl +0 -0
  237. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDS_fake_toplevel.xml +0 -0
  238. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDS_minimal.xml +0 -0
  239. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDS_minimal_2.xml +0 -0
  240. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDS_minimal_struct_array.xml +0 -0
  241. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/IDS_minimal_types.xml +0 -0
  242. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/ITER_134173_106_core_profiles.ids +0 -0
  243. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/ITER_134173_106_equilibrium.ids +0 -0
  244. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/README.md +0 -0
  245. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/core_profiles.ids +0 -0
  246. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/assets/equilibrium.ids +0 -0
  247. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/__init__.py +0 -0
  248. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/db_entry_impl.py +0 -0
  249. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/__init__.py +0 -0
  250. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/al_context.py +0 -0
  251. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/db_entry_al.py +0 -0
  252. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/db_entry_helpers.py +0 -0
  253. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/imas_interface.py +0 -0
  254. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/mdsplus_model.py +0 -0
  255. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/imas_core/uda_support.py +0 -0
  256. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/__init__.py +0 -0
  257. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/nc2ids.py +0 -0
  258. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/backends/netcdf/nc_metadata.py +0 -0
  259. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/command/cli.py +0 -0
  260. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/command/db_analysis.py +0 -0
  261. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/command/helpers.py +0 -0
  262. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/command/timer.py +0 -0
  263. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/db_entry.py +0 -0
  264. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/dd_helpers.py +0 -0
  265. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/dd_zip.py +0 -0
  266. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/exception.py +0 -0
  267. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_base.py +0 -0
  268. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_convert.py +0 -0
  269. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_coordinates.py +0 -0
  270. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_data_type.py +0 -0
  271. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_defs.py +0 -0
  272. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_factory.py +0 -0
  273. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_identifiers.py +0 -0
  274. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_metadata.py +0 -0
  275. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_path.py +0 -0
  276. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_struct_array.py +0 -0
  277. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_structure.py +0 -0
  278. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/ids_toplevel.py +0 -0
  279. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/setup_logging.py +0 -0
  280. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_all_dd_versions.py +0 -0
  281. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_dd_helpers.py +0 -0
  282. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_dd_zip.py +0 -0
  283. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_deepcopy.py +0 -0
  284. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_exception.py +0 -0
  285. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_get_sample.py +0 -0
  286. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_hash.py +0 -0
  287. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_identifiers.py +0 -0
  288. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids2nc.py +0 -0
  289. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_ascii_data.py +0 -0
  290. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_convert.py +0 -0
  291. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_coordinates.py +0 -0
  292. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_data_type.py +0 -0
  293. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_factory.py +0 -0
  294. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_metadata.py +0 -0
  295. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_mixin.py +0 -0
  296. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_path.py +0 -0
  297. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_primitive.py +0 -0
  298. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_struct_array.py +0 -0
  299. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_structure.py +0 -0
  300. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_ids_validate.py +0 -0
  301. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_latest_dd_autofill.py +0 -0
  302. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_latest_dd_manual.py +0 -0
  303. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_latest_dd_resample.py +0 -0
  304. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_lazy_loading.py +0 -0
  305. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_list_occurrences.py +0 -0
  306. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal.py +0 -0
  307. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_conversion.py +0 -0
  308. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_io.py +0 -0
  309. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_struct_array_io.py +0 -0
  310. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_types_io.py +0 -0
  311. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_minimal_types_io_automatic.py +0 -0
  312. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_nc_entry.py +0 -0
  313. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_nc_metadata.py +0 -0
  314. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_nc_validation.py +0 -0
  315. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_snippets.py +0 -0
  316. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_str_1d.py +0 -0
  317. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_time_slicing.py +0 -0
  318. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/test/test_uda_support.py +0 -0
  319. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/training.py +0 -0
  320. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas/util.py +0 -0
  321. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas_python.egg-info/dependency_links.txt +0 -0
  322. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas_python.egg-info/entry_points.txt +0 -0
  323. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas_python.egg-info/not-zip-safe +0 -0
  324. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/imas_python.egg-info/top_level.txt +0 -0
  325. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/setup.cfg +0 -0
  326. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/setup.py +0 -0
  327. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/tools/compare_lowlevel_access_patterns.py +0 -0
  328. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/tools/extract_test_data.py +0 -0
  329. {imas_python-1.1.2.dev42 → imas_python-1.1.2.dev55}/tools/get_tagnames.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: imas-python
3
- Version: 1.1.2.dev42
3
+ Version: 1.1.2.dev55
4
4
  Summary: Pythonic wrappers for the IMAS Access Layer
5
5
  Author: ITER Organization
6
6
  Author-email: Karel Lucas van de Plassche <karelvandeplassche@gmail.com>, Daan van Vugt <dvanvugt@ignitioncomputing.com>, Maarten Sebregts <msebregts@ignitioncomputing.com>, imas-support@iter.org
@@ -222,7 +222,7 @@ Requires-Dist: sphinx-autosummary-accessors>=0.1.2; extra == "docs"
222
222
  Requires-Dist: sphinx-immaterial<0.12,>=0.11.0; extra == "docs"
223
223
  Requires-Dist: sphinx-click; extra == "docs"
224
224
  Provides-Extra: netcdf
225
- Requires-Dist: netCDF4>=1.7.0; extra == "netcdf"
225
+ Requires-Dist: netCDF4>=1.4.1; extra == "netcdf"
226
226
  Provides-Extra: h5py
227
227
  Requires-Dist: h5py; extra == "h5py"
228
228
  Provides-Extra: test
@@ -3,18 +3,28 @@
3
3
  # Note: this script should be run from the root of the git repository
4
4
 
5
5
  # Debuggging:
6
- set -e -o pipefail
6
+ if [[ "$(uname -n)" == *"bamboo"* ]]; then
7
+ set -e -o pipefail
8
+ fi
7
9
  echo "Loading modules..."
8
10
 
9
11
  # Set up environment such that module files can be loaded
10
12
  source /etc/profile.d/modules.sh
11
13
  module purge
12
14
  # Modules are supplied as arguments in the CI job:
13
- module load $@
15
+ if [ -z "$@" ]; then
16
+ module load Python
17
+ else
18
+ module load $@
19
+ fi
14
20
 
15
21
  # Debuggging:
16
22
  echo "Done loading modules"
17
- set -x
18
23
 
19
24
  # Build the DD zip
25
+ rm -rf venv # Environment should be clean, but remove directory to be sure
26
+ python -m venv venv
27
+ source venv/bin/activate
28
+ pip install gitpython saxonche packaging
20
29
  python imas/dd_helpers.py
30
+ deactivate
@@ -3,7 +3,9 @@
3
3
  # Note: this script should be run from the root of the git repository
4
4
 
5
5
  # Debuggging:
6
- set -e -o pipefail
6
+ if [[ "$(uname -n)" == *"bamboo"* ]]; then
7
+ set -e -o pipefail
8
+ fi
7
9
  echo "Loading modules:" $@
8
10
 
9
11
  # Set up environment such that module files can be loaded
@@ -14,8 +16,6 @@ module load $@
14
16
 
15
17
  # Debuggging:
16
18
  echo "Done loading modules"
17
- set -x
18
-
19
19
 
20
20
  # Set up the testing venv
21
21
  rm -rf venv # Environment should be clean, but remove directory to be sure
@@ -41,3 +41,5 @@ export SPHINXOPTS='-W -n --keep-going'
41
41
 
42
42
  # Run sphinx to create the documentation
43
43
  make -C docs clean html
44
+
45
+ deactivate
@@ -3,18 +3,23 @@
3
3
  # Note: this script should be run from the root of the git repository
4
4
 
5
5
  # Debuggging:
6
- set -e -o pipefail
6
+ if [[ "$(uname -n)" == *"bamboo"* ]]; then
7
+ set -e -o pipefail
8
+ fi
7
9
  echo "Loading modules..."
8
10
 
9
11
  # Set up environment such that module files can be loaded
10
12
  source /etc/profile.d/modules.sh
11
13
  module purge
12
14
  # Modules are supplied as arguments in the CI job:
13
- module load $@
15
+ if [ -z "$@" ]; then
16
+ module load Python
17
+ else
18
+ module load $@
19
+ fi
14
20
 
15
21
  # Debuggging:
16
22
  echo "Done loading modules"
17
- set -x
18
23
 
19
24
  # Create a venv
20
25
  rm -rf venv
@@ -26,3 +31,5 @@ pip install --upgrade 'black >=24,<25' flake8
26
31
 
27
32
  black --check imas
28
33
  flake8 imas
34
+
35
+ deactivate
@@ -17,12 +17,16 @@ source /etc/profile.d/modules.sh
17
17
  module purge
18
18
  # Modules are supplied as arguments in the CI job:
19
19
  # IMAS-AL-Python/5.2.1-intel-2023b-DD-3.41.0 Saxon-HE/12.4-Java-21
20
- module load IMAS-AL-Core/5.4.3-intel-2023b Saxon-HE/12.4-Java-21
20
+ if [ -z "$@" ]; then
21
+ module load IMAS-AL-Core
22
+ else
23
+ module load $@
24
+ fi
25
+
21
26
 
22
27
 
23
28
  # Debuggging:
24
29
  echo "Done loading modules"
25
- set -x
26
30
 
27
31
  # Export current PYTHONPATH so ASV benchmarks can import imas
28
32
  export ASV_PYTHONPATH="$PYTHONPATH"
@@ -71,3 +75,5 @@ asv publish
71
75
  # And persistently store them
72
76
  cp -rf .asv/{results,html} "$BENCHMARKS_DIR"
73
77
 
78
+ deactivate
79
+
@@ -3,19 +3,23 @@
3
3
  # Note: this script should be run from the root of the git repository
4
4
 
5
5
  # Debuggging:
6
- set -e -o pipefail
6
+ if [[ "$(uname -n)" == *"bamboo"* ]]; then
7
+ set -e -o pipefail
8
+ fi
7
9
  echo "Loading modules:" $@
8
10
 
9
11
  # Set up environment such that module files can be loaded
10
12
  source /etc/profile.d/modules.sh
11
13
  module purge
12
14
  # Modules are supplied as arguments in the CI job:
13
- module load $@
15
+ if [ -z "$@" ]; then
16
+ module load IMAS-AL-Core
17
+ else
18
+ module load $@
19
+ fi
14
20
 
15
21
  # Debuggging:
16
22
  echo "Done loading modules"
17
- set -x
18
-
19
23
 
20
24
  # Set up the testing venv
21
25
  rm -rf venv # Environment should be clean, but remove directory to be sure
@@ -33,5 +37,8 @@ pip freeze
33
37
  # Clean artifacts created by pytest
34
38
  rm -f junit.xml
35
39
  rm -rf htmlcov
40
+ mkdir -p ~/tmp
41
+ export PYTEST_DEBUG_TEMPROOT=~/tmp
42
+ python -m pytest -n=auto --cov=imas --cov-report=term-missing --cov-report=html --junit-xml=junit.xml -x
36
43
 
37
- python -m pytest -n=auto --cov=imas --cov-report=term-missing --cov-report=html --junit-xml=junit.xml
44
+ deactivate
@@ -72,6 +72,15 @@ _BACKENDS = {
72
72
  }
73
73
 
74
74
 
75
+ try:
76
+ import pytest_xdist
77
+ except ImportError:
78
+ # If pytest-xdist is not available we provide a dummy worker_id fixture.
79
+ @pytest.fixture()
80
+ def worker_id():
81
+ return "master"
82
+
83
+
75
84
  @pytest.fixture(params=_BACKENDS)
76
85
  def backend(pytestconfig: pytest.Config, request: pytest.FixtureRequest):
77
86
  backends_provided = any(map(pytestconfig.getoption, _BACKENDS))
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.1.2.dev42'
16
- __version_tuple__ = version_tuple = (1, 1, 2, 'dev42')
15
+ __version__ = version = '1.1.2.dev55'
16
+ __version_tuple__ = version_tuple = (1, 1, 2, 'dev55')
@@ -33,12 +33,20 @@ class NCDBEntryImpl(DBEntryImpl):
33
33
  "The `netCDF4` python module is not available. Please install this "
34
34
  "module to read/write IMAS netCDF files with imas-python."
35
35
  )
36
+ # To support netcdf v1.4 (which has no mode "x") we map it to "w" with
37
+ # `clobber=True`.
38
+ if mode == "x":
39
+ mode = "w"
40
+ clobber = False
41
+ else:
42
+ clobber = True
36
43
 
37
44
  self._dataset = netCDF4.Dataset(
38
45
  fname,
39
46
  mode,
40
47
  format="NETCDF4",
41
48
  auto_complex=True,
49
+ clobber=clobber,
42
50
  )
43
51
  """NetCDF4 dataset."""
44
52
  self._factory = factory
@@ -7,8 +7,10 @@ from typing import Iterator, Tuple
7
7
 
8
8
  import netCDF4
9
9
  import numpy
10
+ from packaging import version
10
11
 
11
12
  from imas.backends.netcdf.nc_metadata import NCMetadata
13
+ from imas.exception import InvalidNetCDFEntry
12
14
  from imas.ids_base import IDSBase
13
15
  from imas.ids_data_type import IDSDataType
14
16
  from imas.ids_defs import IDS_TIME_MODE_HOMOGENEOUS
@@ -185,9 +187,20 @@ class IDS2NC:
185
187
 
186
188
  else:
187
189
  dtype = dtypes[metadata.data_type]
190
+ if (
191
+ version.parse(netCDF4.__version__) < version.parse("1.7.0")
192
+ and dtype is dtypes[IDSDataType.CPX]
193
+ ):
194
+ raise InvalidNetCDFEntry(
195
+ f"Found complex data in {var_name}, NetCDF 1.7.0 or"
196
+ f" later is required for complex data types"
197
+ )
188
198
  kwargs = {}
189
199
  if dtype is not str: # Enable compression:
190
- kwargs.update(compression="zlib", complevel=1)
200
+ if version.parse(netCDF4.__version__) > version.parse("1.4.1"):
201
+ kwargs.update(compression="zlib", complevel=1)
202
+ else:
203
+ kwargs.update(zlib=True, complevel=1)
191
204
  if dtype is not dtypes[IDSDataType.CPX]: # Set fillvalue
192
205
  kwargs.update(fill_value=default_fillvals[metadata.data_type])
193
206
  # Create variable
@@ -23,23 +23,24 @@ def validate_netcdf_file(filename: str) -> None:
23
23
  # additional variables are smuggled inside:
24
24
  groups = [dataset] + [dataset[group] for group in dataset.groups]
25
25
  for group in groups:
26
+ group_name = group.path.split("/")[-1]
26
27
  if group.variables or group.dimensions:
27
28
  raise InvalidNetCDFEntry(
28
29
  "NetCDF file should not have variables or dimensions in the "
29
- f"{group.name} group."
30
+ f"{group_name} group."
30
31
  )
31
32
  if group is dataset:
32
33
  continue
33
- if group.name not in ids_names:
34
+ if group_name not in ids_names:
34
35
  raise InvalidNetCDFEntry(
35
- f"Invalid group name {group.name}: there is no IDS with this name."
36
+ f"Invalid group name {group_name}: there is no IDS with this name."
36
37
  )
37
38
  for subgroup in group.groups:
38
39
  try:
39
40
  int(subgroup)
40
41
  except ValueError:
41
42
  raise InvalidNetCDFEntry(
42
- f"Invalid group name {group.name}/{subgroup}: "
43
+ f"Invalid group name {group_name}/{subgroup}: "
43
44
  f"{subgroup} is not a valid occurrence number."
44
45
  )
45
46
 
@@ -481,7 +481,10 @@ class IDSNumericArray(IDSPrimitive, np.lib.mixins.NDArrayOperatorsMixin):
481
481
  value = np.asanyarray(value)
482
482
  if value.dtype != dtype:
483
483
  logger.info(_CONVERT_MSG, value.dtype, self)
484
- value = np.array(value, dtype=dtype, copy=False)
484
+ value = np.asarray(
485
+ value,
486
+ dtype=dtype,
487
+ )
485
488
  if value.ndim != self.metadata.ndim:
486
489
  raise ValueError(f"Trying to assign a {value.ndim}D value to {self!r}.")
487
490
  return value
@@ -4,6 +4,7 @@ import pytest
4
4
  from click.testing import CliRunner
5
5
  from packaging.version import Version
6
6
 
7
+ from imas.backends.imas_core.imas_interface import has_imas
7
8
  from imas.backends.imas_core.imas_interface import ll_interface
8
9
  from imas.command.cli import print_version
9
10
  from imas.command.db_analysis import analyze_db, process_db_analysis
@@ -19,8 +20,13 @@ def test_imas_version():
19
20
 
20
21
 
21
22
  @pytest.mark.cli
22
- @pytest.mark.skipif(ll_interface._al_version < Version("5.0"), reason="Needs AL >= 5")
23
- def test_db_analysis(tmp_path):
23
+ @pytest.mark.skipif(
24
+ not has_imas or ll_interface._al_version < Version("5.0"),
25
+ reason="Needs AL >= 5 AND Requires IMAS Core.",
26
+ )
27
+ def test_db_analysis(
28
+ tmp_path,
29
+ ):
24
30
  # This only tests the happy flow, error handling is not tested
25
31
  db_path = tmp_path / "test_db_analysis"
26
32
  with DBEntry(f"imas:hdf5?path={db_path}", "w") as entry:
@@ -82,7 +82,7 @@ def test_dbentry_constructor():
82
82
  assert get_entry_attrs(entry) == (1, 2, 3, 4, None, 6)
83
83
 
84
84
 
85
- def test_ignore_unknown_dd_version(monkeypatch, worker_id, tmp_path):
85
+ def test_ignore_unknown_dd_version(monkeypatch, worker_id, tmp_path, requires_imas):
86
86
  entry = open_dbentry(imas.ids_defs.MEMORY_BACKEND, "w", worker_id, tmp_path)
87
87
  ids = entry.factory.core_profiles()
88
88
  ids.ids_properties.homogeneous_time = 0
@@ -93,7 +93,9 @@ def fill_with_random_data(structure, max_children=3):
93
93
  child.value = random_data(child.metadata.data_type, child.metadata.ndim)
94
94
 
95
95
 
96
- def maybe_set_random_value(primitive: IDSPrimitive, leave_empty: float) -> None:
96
+ def maybe_set_random_value(
97
+ primitive: IDSPrimitive, leave_empty: float, skip_complex: bool
98
+ ) -> None:
97
99
  """Set the value of an IDS primitive with a certain chance.
98
100
 
99
101
  If the IDSPrimitive has coordinates, then the size of the coordinates is taken into
@@ -153,7 +155,7 @@ def maybe_set_random_value(primitive: IDSPrimitive, leave_empty: float) -> None:
153
155
  # Scale chance of not setting a coordinate by our number of dimensions,
154
156
  # such that overall there is roughly a 50% chance that any coordinate
155
157
  # remains empty
156
- maybe_set_random_value(coordinate_element, 0.5**ndim)
158
+ maybe_set_random_value(coordinate_element, 0.5**ndim, skip_complex)
157
159
  size = coordinate_element.shape[0 if coordinate.references else dim]
158
160
 
159
161
  if coordinate.size: # coordinateX = <path> OR 1...1
@@ -176,13 +178,18 @@ def maybe_set_random_value(primitive: IDSPrimitive, leave_empty: float) -> None:
176
178
  elif primitive.metadata.data_type is IDSDataType.FLT:
177
179
  primitive.value = np.random.random_sample(size=shape)
178
180
  elif primitive.metadata.data_type is IDSDataType.CPX:
181
+ if skip_complex:
182
+ # If we are skipping complex numbers then leave the value empty.
183
+ return
179
184
  val = np.random.random_sample(shape) + 1j * np.random.random_sample(shape)
180
185
  primitive.value = val
181
186
  else:
182
187
  raise ValueError(f"Invalid IDS data type: {primitive.metadata.data_type}")
183
188
 
184
189
 
185
- def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
190
+ def fill_consistent(
191
+ structure: IDSStructure, leave_empty: float = 0.2, skip_complex: bool = False
192
+ ):
186
193
  """Fill a structure with random data, such that coordinate sizes are consistent.
187
194
 
188
195
  Sets homogeneous_time to heterogeneous (always).
@@ -196,6 +203,9 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
196
203
  exclusive_coordinates: list of IDSPrimitives that have exclusive alternative
197
204
  coordinates. These are initially not filled, and only at the very end of
198
205
  filling an IDSToplevel, a choice is made between the exclusive coordinates.
206
+ skip_complex: Whether to skip over populating complex numbers. This is
207
+ useful for maintaining compatibility with older versions of netCDF4
208
+ (<1.7.0) where complex numbers are not supported.
199
209
  """
200
210
  if isinstance(structure, IDSToplevel):
201
211
  unsupported_ids_name = (
@@ -218,7 +228,9 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
218
228
 
219
229
  for child in structure:
220
230
  if isinstance(child, IDSStructure):
221
- exclusive_coordinates.extend(fill_consistent(child, leave_empty))
231
+ exclusive_coordinates.extend(
232
+ fill_consistent(child, leave_empty, skip_complex)
233
+ )
222
234
 
223
235
  elif isinstance(child, IDSStructArray):
224
236
  if child.metadata.coordinates[0].references:
@@ -230,7 +242,7 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
230
242
  if isinstance(coor, IDSPrimitive):
231
243
  # maybe fill with random data:
232
244
  try:
233
- maybe_set_random_value(coor, leave_empty)
245
+ maybe_set_random_value(coor, leave_empty, skip_complex)
234
246
  except (RuntimeError, ValueError):
235
247
  pass
236
248
  child.resize(len(coor))
@@ -244,7 +256,9 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
244
256
  else:
245
257
  child.resize(child.metadata.coordinates[0].size or 1)
246
258
  for ele in child:
247
- exclusive_coordinates.extend(fill_consistent(ele, leave_empty))
259
+ exclusive_coordinates.extend(
260
+ fill_consistent(ele, leave_empty, skip_complex)
261
+ )
248
262
 
249
263
  else: # IDSPrimitive
250
264
  coordinates = child.metadata.coordinates
@@ -256,7 +270,7 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
256
270
  exclusive_coordinates.append(child)
257
271
  else:
258
272
  try:
259
- maybe_set_random_value(child, leave_empty)
273
+ maybe_set_random_value(child, leave_empty, skip_complex)
260
274
  except (RuntimeError, ValueError):
261
275
  pass
262
276
 
@@ -278,7 +292,7 @@ def fill_consistent(structure: IDSStructure, leave_empty: float = 0.2):
278
292
  coor = filled_refs.pop()
279
293
  unset_coordinate(coor)
280
294
 
281
- maybe_set_random_value(element, leave_empty)
295
+ maybe_set_random_value(element, leave_empty, skip_complex)
282
296
  else:
283
297
  return exclusive_coordinates
284
298
 
@@ -46,7 +46,7 @@ def test_pretty_print(ids):
46
46
  assert pprint.pformat(ids) == "<IDSToplevel (IDS:gyrokinetics)>"
47
47
 
48
48
 
49
- def test_serialize_nondefault_dd_version():
49
+ def test_serialize_nondefault_dd_version(requires_imas):
50
50
  ids = IDSFactory("3.31.0").core_profiles()
51
51
  fill_with_random_data(ids)
52
52
  data = ids.serialize()
@@ -1,5 +1,6 @@
1
1
  # A minimal testcase loading an IDS file and checking that the structure built is ok
2
2
  from numbers import Complex, Integral, Number, Real
3
+ from packaging import version
3
4
 
4
5
  import numpy as np
5
6
  import pytest
@@ -61,7 +62,11 @@ def test_assign_str_1d(minimal, caplog):
61
62
 
62
63
 
63
64
  # Prevent the expected numpy ComplexWarnings from cluttering pytest output
64
- @pytest.mark.filterwarnings("ignore::numpy.ComplexWarning")
65
+ @pytest.mark.filterwarnings(
66
+ "ignore::numpy.ComplexWarning"
67
+ if version.parse(np.__version__) < version.parse("1.25")
68
+ else "ignore::numpy.exceptions.ComplexWarning"
69
+ )
65
70
  @pytest.mark.parametrize("typ, max_dim", [("flt", 6), ("cpx", 6), ("int", 3)])
66
71
  def test_assign_numeric_types(minimal, caplog, typ, max_dim):
67
72
  caplog.set_level("INFO", "imas")
@@ -87,7 +92,11 @@ def test_assign_numeric_types(minimal, caplog, typ, max_dim):
87
92
  len(caplog.records) == 1
88
93
  elif dim == other_ndim >= 1 and other_typ == "cpx":
89
94
  # np allows casting of complex to float or int, but warns:
90
- with pytest.warns(np.ComplexWarning):
95
+ with pytest.warns(
96
+ np.ComplexWarning
97
+ if version.parse(np.__version__) < version.parse("1.25")
98
+ else np.exceptions.ComplexWarning
99
+ ):
91
100
  caplog.clear()
92
101
  minimal[name].value = value
93
102
  assert len(caplog.records) == 1
@@ -54,7 +54,7 @@ def test_nbc_structure_to_aos(caplog):
54
54
  assert caplog.record_tuples[0][:2] == ("imas.ids_convert", logging.WARNING)
55
55
 
56
56
 
57
- def test_nbc_0d_to_1d(caplog):
57
+ def test_nbc_0d_to_1d(caplog, requires_imas):
58
58
  # channel/filter_spectrometer/radiance_calibration in spectrometer visible changed
59
59
  # from FLT_0D to FLT_1D in DD 3.39.0
60
60
  ids = IDSFactory("3.32.0").spectrometer_visible()
@@ -0,0 +1,54 @@
1
+ from imas.db_entry import DBEntry
2
+ from imas.exception import InvalidNetCDFEntry
3
+ from imas.test.test_helpers import compare_children, fill_consistent
4
+ import re
5
+ import pytest
6
+ import netCDF4
7
+ from packaging import version
8
+
9
+
10
+ def test_nc_latest_dd_autofill_put_get_skip_complex(ids_name, tmp_path):
11
+ with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
12
+ ids = entry.factory.new(ids_name)
13
+ fill_consistent(ids, leave_empty=0.5, skip_complex=True)
14
+
15
+ entry.put(ids)
16
+ ids2 = entry.get(ids_name)
17
+
18
+ compare_children(ids, ids2)
19
+
20
+
21
+ @pytest.mark.skipif(
22
+ version.parse(netCDF4.__version__) >= version.parse("1.7.0"),
23
+ reason="NetCDF4 versions < 1.7.0 do not support complex numbers",
24
+ )
25
+ def test_nc_latest_dd_autofill_put_get_with_complex_older_netCDF4(ids_name, tmp_path):
26
+ with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
27
+ ids = entry.factory.new(ids_name)
28
+ fill_consistent(ids, leave_empty=0.5, skip_complex=False)
29
+ try:
30
+ entry.put(ids)
31
+ ids2 = entry.get(ids_name)
32
+ compare_children(ids, ids2)
33
+ except InvalidNetCDFEntry as e:
34
+ # This is expected, as these versions of NetCDF4 do not support
35
+ # complex numbers.
36
+ if not re.search(
37
+ r".*NetCDF 1.7.0 or later is required for complex data types", str(e)
38
+ ):
39
+ raise InvalidNetCDFEntry(e) from e
40
+
41
+
42
+ @pytest.mark.skipif(
43
+ version.parse(netCDF4.__version__) < version.parse("1.7.0"),
44
+ reason="NetCDF4 versions >= 1.7.0 support complex numbers",
45
+ )
46
+ def test_nc_latest_dd_autofill_put_get_with_complex_newer_netCDF4(ids_name, tmp_path):
47
+ with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
48
+ ids = entry.factory.new(ids_name)
49
+ fill_consistent(ids, leave_empty=0.5, skip_complex=False)
50
+
51
+ entry.put(ids)
52
+ ids2 = entry.get(ids_name)
53
+
54
+ compare_children(ids, ids2)
@@ -21,7 +21,7 @@ def test_ids_valid_type():
21
21
  assert ids_types in ({IDSType.NONE}, {IDSType.CONSTANT, IDSType.DYNAMIC})
22
22
 
23
23
 
24
- def test_constant_ids(caplog):
24
+ def test_constant_ids(caplog, requires_imas):
25
25
  ids = imas.IDSFactory().new("amns_data")
26
26
  if ids.metadata.type is IDSType.NONE:
27
27
  pytest.skip("IDS definition has no constant IDSs")
@@ -54,7 +54,7 @@ def test_inspect():
54
54
  inspect(cp.profiles_1d[1].grid.rho_tor_norm) # IDSPrimitive
55
55
 
56
56
 
57
- def test_inspect_lazy():
57
+ def test_inspect_lazy(requires_imas):
58
58
  with get_training_db_entry() as entry:
59
59
  cp = entry.get("core_profiles", lazy=True)
60
60
  inspect(cp)
@@ -141,7 +141,7 @@ def test_idsdiffgen():
141
141
  assert diff[0] == ("profiles_1d/time", -1, 0)
142
142
 
143
143
 
144
- def test_idsdiff():
144
+ def test_idsdiff(requires_imas):
145
145
  # Test the diff rendering for two sample IDSs
146
146
  with get_training_db_entry() as entry:
147
147
  imas.util.idsdiff(entry.get("core_profiles"), entry.get("equilibrium"))
@@ -179,7 +179,7 @@ def test_get_toplevel():
179
179
  assert get_toplevel(cp) is cp
180
180
 
181
181
 
182
- def test_is_lazy_loaded():
182
+ def test_is_lazy_loaded(requires_imas):
183
183
  with get_training_db_entry() as entry:
184
184
  assert is_lazy_loaded(entry.get("core_profiles")) is False
185
185
  assert is_lazy_loaded(entry.get("core_profiles", lazy=True)) is True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: imas-python
3
- Version: 1.1.2.dev42
3
+ Version: 1.1.2.dev55
4
4
  Summary: Pythonic wrappers for the IMAS Access Layer
5
5
  Author: ITER Organization
6
6
  Author-email: Karel Lucas van de Plassche <karelvandeplassche@gmail.com>, Daan van Vugt <dvanvugt@ignitioncomputing.com>, Maarten Sebregts <msebregts@ignitioncomputing.com>, imas-support@iter.org
@@ -222,7 +222,7 @@ Requires-Dist: sphinx-autosummary-accessors>=0.1.2; extra == "docs"
222
222
  Requires-Dist: sphinx-immaterial<0.12,>=0.11.0; extra == "docs"
223
223
  Requires-Dist: sphinx-click; extra == "docs"
224
224
  Provides-Extra: netcdf
225
- Requires-Dist: netCDF4>=1.7.0; extra == "netcdf"
225
+ Requires-Dist: netCDF4>=1.4.1; extra == "netcdf"
226
226
  Provides-Extra: h5py
227
227
  Requires-Dist: h5py; extra == "h5py"
228
228
  Provides-Extra: test