imas-python 2.3.0__tar.gz → 2.3.1__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 (227) hide show
  1. {imas_python-2.3.0 → imas_python-2.3.1}/.github/dependabot.yml +5 -0
  2. {imas_python-2.3.0 → imas_python-2.3.1}/.github/workflows/linting.yml +2 -2
  3. {imas_python-2.3.0 → imas_python-2.3.1}/.github/workflows/publish.yml +2 -2
  4. {imas_python-2.3.0 → imas_python-2.3.1}/.github/workflows/test_with_pytest.yml +2 -2
  5. {imas_python-2.3.0/imas_python.egg-info → imas_python-2.3.1}/PKG-INFO +1 -1
  6. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/changelog.rst +17 -0
  7. {imas_python-2.3.0 → imas_python-2.3.1}/imas/_version.py +3 -3
  8. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/mdsplus_model.py +11 -3
  9. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_coordinates.py +11 -10
  10. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_structure.py +1 -1
  11. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_hash.py +1 -1
  12. {imas_python-2.3.0 → imas_python-2.3.1/imas_python.egg-info}/PKG-INFO +1 -1
  13. {imas_python-2.3.0 → imas_python-2.3.1}/imas_python.egg-info/SOURCES.txt +2 -0
  14. imas_python-2.3.1/imas_python.egg-info/scm_file_list.json +221 -0
  15. imas_python-2.3.1/imas_python.egg-info/scm_version.json +8 -0
  16. {imas_python-2.3.0 → imas_python-2.3.1}/.git-blame-ignore-revs +0 -0
  17. {imas_python-2.3.0 → imas_python-2.3.1}/.git_archival.txt +0 -0
  18. {imas_python-2.3.0 → imas_python-2.3.1}/.gitattributes +0 -0
  19. {imas_python-2.3.0 → imas_python-2.3.1}/.github/CODEOWNERS +0 -0
  20. {imas_python-2.3.0 → imas_python-2.3.1}/.gitignore +0 -0
  21. {imas_python-2.3.0 → imas_python-2.3.1}/.pylintrc +0 -0
  22. {imas_python-2.3.0 → imas_python-2.3.1}/.readthedocs.yml +0 -0
  23. {imas_python-2.3.0 → imas_python-2.3.1}/CODE_OF_CONDUCT.md +0 -0
  24. {imas_python-2.3.0 → imas_python-2.3.1}/CONTRIBUTING.md +0 -0
  25. {imas_python-2.3.0 → imas_python-2.3.1}/LICENSE.txt +0 -0
  26. {imas_python-2.3.0 → imas_python-2.3.1}/MANIFEST.in +0 -0
  27. {imas_python-2.3.0 → imas_python-2.3.1}/README.md +0 -0
  28. {imas_python-2.3.0 → imas_python-2.3.1}/asv.conf.json +0 -0
  29. {imas_python-2.3.0 → imas_python-2.3.1}/benchmarks/__init__.py +0 -0
  30. {imas_python-2.3.0 → imas_python-2.3.1}/benchmarks/core_profiles.py +0 -0
  31. {imas_python-2.3.0 → imas_python-2.3.1}/benchmarks/edge_profiles.py +0 -0
  32. {imas_python-2.3.0 → imas_python-2.3.1}/benchmarks/technical.py +0 -0
  33. {imas_python-2.3.0 → imas_python-2.3.1}/benchmarks/utils.py +0 -0
  34. {imas_python-2.3.0 → imas_python-2.3.1}/conftest.py +0 -0
  35. {imas_python-2.3.0 → imas_python-2.3.1}/docs/.gitignore +0 -0
  36. {imas_python-2.3.0 → imas_python-2.3.1}/docs/Makefile +0 -0
  37. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/.gitignore +0 -0
  38. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_static/imas.css +0 -0
  39. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_static/imas_200x200.png +0 -0
  40. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/autosummary/accessor.rst +0 -0
  41. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/autosummary/accessor_attribute.rst +0 -0
  42. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/autosummary/accessor_callable.rst +0 -0
  43. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/autosummary/accessor_method.rst +0 -0
  44. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/autosummary/base.rst +0 -0
  45. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/custom-class-template.rst +0 -0
  46. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/custom-module-template.rst +0 -0
  47. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/_templates/layout.html +0 -0
  48. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/api-hidden.rst +0 -0
  49. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/api.rst +0 -0
  50. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/benchmarking.rst +0 -0
  51. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/ci_config.rst +0 -0
  52. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/cli.rst +0 -0
  53. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/code_style.rst +0 -0
  54. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/conf.py +0 -0
  55. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/configuring.rst +0 -0
  56. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/dd_versions.rst +0 -0
  57. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/explore.rst +0 -0
  58. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/hashing.rst +0 -0
  59. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/alternative_coordinates.py +0 -0
  60. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/autoconvert_get.py +0 -0
  61. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/autoconvert_put.py +0 -0
  62. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/calc_with_units.py +0 -0
  63. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/coordinates.py +0 -0
  64. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/dd_versions.py +0 -0
  65. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/explore_data.py +0 -0
  66. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/explore_structures.py +0 -0
  67. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/hashing.py +0 -0
  68. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/ids_convert.py +0 -0
  69. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/ids_to_xarray.py +0 -0
  70. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/imas_snippets/tensorized_ids_to_xarray.py +0 -0
  71. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/metadata.rst +0 -0
  72. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced/xarray.rst +0 -0
  73. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/advanced_user_training.rst +0 -0
  74. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/analyze.rst +0 -0
  75. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/core_profiles_ne_timeslice.png +0 -0
  76. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/core_profiles_te.png +0 -0
  77. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/create.rst +0 -0
  78. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/explore.rst +0 -0
  79. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_inspect.png +0 -0
  80. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/create_core_profiles.py +0 -0
  81. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/explore_data_entry.py +0 -0
  82. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/explore_public_ec_launchers.py +0 -0
  83. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/explore_public_pf_active.py +0 -0
  84. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/explore_training_data.py +0 -0
  85. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/find_paths.py +0 -0
  86. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/iterate_core_profiles.py +0 -0
  87. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/plot_core_profiles_ne_timeslice.py +0 -0
  88. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/plot_core_profiles_te.py +0 -0
  89. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/print_idss.py +0 -0
  90. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/read_core_profiles_ne_timeslice.py +0 -0
  91. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/read_equilibrium_time_array.py +0 -0
  92. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/read_whole_equilibrium.py +0 -0
  93. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/imas_snippets/transform_grid.py +0 -0
  94. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/interactive_tab_core_profiles_toplevel.png +0 -0
  95. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/print_tree_ids_properties.png +0 -0
  96. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/setup.rst +0 -0
  97. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic/transform.rst +0 -0
  98. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/courses/basic_user_training.rst +0 -0
  99. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/examples/custom_conversion_em_coupling.py +0 -0
  100. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/examples/custom_conversion_em_coupling.rst +0 -0
  101. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/examples.rst +0 -0
  102. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/identifiers.rst +0 -0
  103. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/imas_architecture.rst +0 -0
  104. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/imas_structure.png +0 -0
  105. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/index.rst +0 -0
  106. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/installing.rst +0 -0
  107. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/intro.rst +0 -0
  108. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/lazy_loading.rst +0 -0
  109. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/mdsplus.rst +0 -0
  110. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/metadata.rst +0 -0
  111. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/multi-dd.rst +0 -0
  112. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/netcdf/conventions.rst +0 -0
  113. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/netcdf.rst +0 -0
  114. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/release_imas.rst +0 -0
  115. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/resampling.rst +0 -0
  116. {imas_python-2.3.0 → imas_python-2.3.1}/docs/source/validation.rst +0 -0
  117. {imas_python-2.3.0 → imas_python-2.3.1}/imas/__init__.py +0 -0
  118. {imas_python-2.3.0 → imas_python-2.3.1}/imas/__main__.py +0 -0
  119. {imas_python-2.3.0 → imas_python-2.3.1}/imas/_to_xarray.py +0 -0
  120. {imas_python-2.3.0 → imas_python-2.3.1}/imas/_util.py +0 -0
  121. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDSDef2MDSpreTree.xsl +0 -0
  122. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDS_fake_toplevel.xml +0 -0
  123. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDS_minimal.xml +0 -0
  124. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDS_minimal_2.xml +0 -0
  125. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDS_minimal_struct_array.xml +0 -0
  126. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/IDS_minimal_types.xml +0 -0
  127. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/ITER_134173_106_core_profiles.ids +0 -0
  128. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/ITER_134173_106_equilibrium.ids +0 -0
  129. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/README.md +0 -0
  130. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/core_profiles.ids +0 -0
  131. {imas_python-2.3.0 → imas_python-2.3.1}/imas/assets/equilibrium.ids +0 -0
  132. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/__init__.py +0 -0
  133. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/db_entry_impl.py +0 -0
  134. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/__init__.py +0 -0
  135. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/al_context.py +0 -0
  136. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/db_entry_al.py +0 -0
  137. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/db_entry_helpers.py +0 -0
  138. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/imas_interface.py +0 -0
  139. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/imas_core/uda_support.py +0 -0
  140. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/__init__.py +0 -0
  141. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/db_entry_nc.py +0 -0
  142. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/ids2nc.py +0 -0
  143. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/ids_tensorizer.py +0 -0
  144. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/iterators.py +0 -0
  145. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/nc2ids.py +0 -0
  146. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/nc_metadata.py +0 -0
  147. {imas_python-2.3.0 → imas_python-2.3.1}/imas/backends/netcdf/nc_validate.py +0 -0
  148. {imas_python-2.3.0 → imas_python-2.3.1}/imas/command/cli.py +0 -0
  149. {imas_python-2.3.0 → imas_python-2.3.1}/imas/command/db_analysis.py +0 -0
  150. {imas_python-2.3.0 → imas_python-2.3.1}/imas/command/helpers.py +0 -0
  151. {imas_python-2.3.0 → imas_python-2.3.1}/imas/command/timer.py +0 -0
  152. {imas_python-2.3.0 → imas_python-2.3.1}/imas/convert_core_edge_plasma.py +0 -0
  153. {imas_python-2.3.0 → imas_python-2.3.1}/imas/db_entry.py +0 -0
  154. {imas_python-2.3.0 → imas_python-2.3.1}/imas/dd_zip.py +0 -0
  155. {imas_python-2.3.0 → imas_python-2.3.1}/imas/exception.py +0 -0
  156. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_base.py +0 -0
  157. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_convert.py +0 -0
  158. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_data_type.py +0 -0
  159. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_defs.py +0 -0
  160. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_factory.py +0 -0
  161. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_identifiers.py +0 -0
  162. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_metadata.py +0 -0
  163. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_path.py +0 -0
  164. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_primitive.py +0 -0
  165. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_struct_array.py +0 -0
  166. {imas_python-2.3.0 → imas_python-2.3.1}/imas/ids_toplevel.py +0 -0
  167. {imas_python-2.3.0 → imas_python-2.3.1}/imas/setup_logging.py +0 -0
  168. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_all_dd_versions.py +0 -0
  169. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_cli.py +0 -0
  170. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_convert_core_edge_plasma.py +0 -0
  171. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_dbentry.py +0 -0
  172. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_dbentry_uda.py +0 -0
  173. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_dd_zip.py +0 -0
  174. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_deepcopy.py +0 -0
  175. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_exception.py +0 -0
  176. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_get_sample.py +0 -0
  177. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_helpers.py +0 -0
  178. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_identifiers.py +0 -0
  179. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids2nc.py +0 -0
  180. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_ascii_data.py +0 -0
  181. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_convert.py +0 -0
  182. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_coordinates.py +0 -0
  183. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_data_type.py +0 -0
  184. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_factory.py +0 -0
  185. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_metadata.py +0 -0
  186. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_mixin.py +0 -0
  187. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_path.py +0 -0
  188. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_primitive.py +0 -0
  189. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_struct_array.py +0 -0
  190. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_structure.py +0 -0
  191. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_toplevel.py +0 -0
  192. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_ids_validate.py +0 -0
  193. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_latest_dd_autofill.py +0 -0
  194. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_latest_dd_manual.py +0 -0
  195. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_latest_dd_resample.py +0 -0
  196. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_lazy_loading.py +0 -0
  197. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_list_filled_paths.py +0 -0
  198. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_list_occurrences.py +0 -0
  199. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal.py +0 -0
  200. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_conversion.py +0 -0
  201. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_io.py +0 -0
  202. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_struct_array_io.py +0 -0
  203. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_types.py +0 -0
  204. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_types_io.py +0 -0
  205. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_minimal_types_io_automatic.py +0 -0
  206. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_nbc_change.py +0 -0
  207. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_nc_autofill.py +0 -0
  208. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_nc_entry.py +0 -0
  209. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_nc_metadata.py +0 -0
  210. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_nc_validation.py +0 -0
  211. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_snippets.py +0 -0
  212. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_static_ids.py +0 -0
  213. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_str_1d.py +0 -0
  214. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_time_slicing.py +0 -0
  215. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_to_xarray.py +0 -0
  216. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_uda_support.py +0 -0
  217. {imas_python-2.3.0 → imas_python-2.3.1}/imas/test/test_util.py +0 -0
  218. {imas_python-2.3.0 → imas_python-2.3.1}/imas/training.py +0 -0
  219. {imas_python-2.3.0 → imas_python-2.3.1}/imas/util.py +0 -0
  220. {imas_python-2.3.0 → imas_python-2.3.1}/imas_python.egg-info/dependency_links.txt +0 -0
  221. {imas_python-2.3.0 → imas_python-2.3.1}/imas_python.egg-info/entry_points.txt +0 -0
  222. {imas_python-2.3.0 → imas_python-2.3.1}/imas_python.egg-info/requires.txt +0 -0
  223. {imas_python-2.3.0 → imas_python-2.3.1}/imas_python.egg-info/top_level.txt +0 -0
  224. {imas_python-2.3.0 → imas_python-2.3.1}/pyproject.toml +0 -0
  225. {imas_python-2.3.0 → imas_python-2.3.1}/setup.cfg +0 -0
  226. {imas_python-2.3.0 → imas_python-2.3.1}/tools/compare_lowlevel_access_patterns.py +0 -0
  227. {imas_python-2.3.0 → imas_python-2.3.1}/tools/get_tagnames.py +0 -0
@@ -7,4 +7,9 @@ updates:
7
7
  # Check for updates once a week
8
8
  schedule:
9
9
  interval: "weekly"
10
+ # Group actions version bumps into a single PR
11
+ groups:
12
+ actions-deps:
13
+ patterns:
14
+ - "*"
10
15
 
@@ -12,10 +12,10 @@ jobs:
12
12
 
13
13
  steps:
14
14
  - name: Checkout IMAS-Python sources
15
- uses: actions/checkout@v6
15
+ uses: actions/checkout@v7
16
16
 
17
17
  - name: Set up Python
18
- uses: actions/setup-python@v6
18
+ uses: actions/setup-python@v7
19
19
  with:
20
20
  # until saxonche is available in 3.13
21
21
  # https://saxonica.plan.io/issues/6561
@@ -10,11 +10,11 @@ jobs:
10
10
  name: Build distribution
11
11
  runs-on: ubuntu-22.04
12
12
  steps:
13
- - uses: actions/checkout@v6
13
+ - uses: actions/checkout@v7
14
14
  with:
15
15
  fetch-depth: 0
16
16
  - name: Set up Python
17
- uses: actions/setup-python@v6
17
+ uses: actions/setup-python@v7
18
18
  with:
19
19
  # until saxonche is available in 3.13
20
20
  # https://saxonica.plan.io/issues/6561
@@ -14,11 +14,11 @@ jobs:
14
14
 
15
15
  steps:
16
16
  - name: Checkout repository
17
- uses: actions/checkout@v6
17
+ uses: actions/checkout@v7
18
18
 
19
19
  - name: Set up Python ${{ matrix.python-version }}
20
20
 
21
- uses: actions/setup-python@v6
21
+ uses: actions/setup-python@v7
22
22
  with:
23
23
  python-version: ${{ matrix.python-version }}
24
24
  - name: Display Python version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imas-python
3
- Version: 2.3.0
3
+ Version: 2.3.1
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
@@ -3,6 +3,23 @@
3
3
  Changelog
4
4
  =========
5
5
 
6
+ What's new in IMAS-Python 2.3.1
7
+ -------------------------------
8
+
9
+ Improvements
10
+ ''''''''''''
11
+
12
+ - :merge:`140`: improve performance of ``hasattr()`` on IDS structures
13
+ - :merge:`139`: improve performance of :py:meth:`~imas.ids_toplevel.IDSToplevel.validate` for large arrays of structures
14
+
15
+ Bugs
16
+ ''''
17
+
18
+ - :issue:`146`: Fix creation of MDSplus models, regression since 2.2.0 when used together with IMAS-Core >= 5.6
19
+ - Fix broken test (due to breaking change in xxhash>=4 dep)
20
+
21
+
22
+
6
23
  What's new in IMAS-Python 2.3.0
7
24
  -------------------------------
8
25
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.3.0'
22
- __version_tuple__ = version_tuple = (2, 3, 0)
21
+ __version__ = version = '2.3.1'
22
+ __version_tuple__ = version_tuple = (2, 3, 1)
23
23
 
24
- __commit_id__ = commit_id = 'g474bc8bbe'
24
+ __commit_id__ = commit_id = 'gdc78cc36c'
@@ -12,7 +12,7 @@ import tempfile
12
12
  import time
13
13
  import uuid
14
14
  from pathlib import Path
15
- from subprocess import CalledProcessError, check_output
15
+ from subprocess import STDOUT, CalledProcessError, check_output
16
16
  from zlib import crc32
17
17
  from packaging.version import Version
18
18
 
@@ -324,12 +324,19 @@ def create_mdsplus_model(cache_dir_path: Path) -> None:
324
324
  "Could not determine CompileTree class in jTraverser.jar."
325
325
  )
326
326
  compiletree = compiletree_class.rpartition(".class")[0].replace("/", ".")
327
+ # only add option to suppress warning if the JVM supports it
328
+ native_access = ["--enable-native-access=ALL-UNNAMED"]
329
+ try:
330
+ check_output(["java", *native_access, "-version"], stderr=STDOUT)
331
+ except CalledProcessError:
332
+ native_access = []
327
333
  check_output(
328
334
  [
329
335
  "java",
330
336
  "-Xms1g", # what do these do?
331
337
  "-Xmx8g", # what do these do?
332
338
  "-XX:+UseG1GC", # what do these do?
339
+ *native_access,
333
340
  "-cp",
334
341
  jarfile,
335
342
  compiletree,
@@ -339,13 +346,14 @@ def create_mdsplus_model(cache_dir_path: Path) -> None:
339
346
  env={
340
347
  "PATH": os.environ.get("PATH", ""),
341
348
  "LD_LIBRARY_PATH": os.environ.get("LD_LIBRARY_PATH", ""),
342
- get_mdsplus_model_var(): str(cache_dir_path),
349
+ # MDSplus locates models through '<tree>_path' (tree='ids')
350
+ "ids_path": str(cache_dir_path),
343
351
  },
344
352
  )
345
353
  # Touch a file to show that we have finished the model
346
354
  (cache_dir_path / "done.txt").touch()
347
355
  except CalledProcessError as e:
348
- logger.error("Error making MDSPlus model in {path}", cache_dir_path)
356
+ logger.error("Error making MDSPlus model in %s", cache_dir_path)
349
357
  raise e
350
358
 
351
359
 
@@ -81,7 +81,7 @@ class IDSCoordinate:
81
81
  logger.debug(
82
82
  f"Ignoring invalid coordinate specifier {spec}", exc_info=True
83
83
  )
84
- self.references: "tuple[IDSPath]" = tuple(refs)
84
+ self.references: "tuple[IDSPath, ...]" = tuple(refs)
85
85
  """A tuple paths that this coordinate refers to.
86
86
  """
87
87
 
@@ -357,7 +357,6 @@ class IDSCoordinates:
357
357
  IDSPath.goto().
358
358
  """
359
359
  did_capture = []
360
- path = self._node._path
361
360
  try:
362
361
  yield did_capture
363
362
  except CoordinateLookupError as exc:
@@ -365,6 +364,7 @@ class IDSCoordinates:
365
364
  except IndexError as exc:
366
365
  # Can happen in IDSPath.goto when an invalid index is encountered.
367
366
  coordinate_refs = coordinate.format_refs(self._node)
367
+ path = self._node._path
368
368
  raise ValidationError(
369
369
  f"Error while validating element `{path}`: dimension {dim + 1} has an "
370
370
  f"invalid index for coordinate(s) {coordinate_refs}."
@@ -372,13 +372,14 @@ class IDSCoordinates:
372
372
  except Exception as exc:
373
373
  # Ignore all other exceptions and log them
374
374
  if "Unexpected index" in str(exc):
375
- logger.debug(
376
- "Ignored AoS coordinate outside our tree (see IMAS-4675) of "
377
- "element `%s`, dimension %s, coordinate `%s`",
378
- path,
379
- dim,
380
- coordinate.references,
381
- )
375
+ if logger.isEnabledFor(logging.DEBUG):
376
+ logger.debug(
377
+ "Ignored AoS coordinate outside our tree (see IMAS-4675) "
378
+ "of element `%s`, dimension %s, coordinate `%s`",
379
+ self._node._path,
380
+ dim,
381
+ coordinate.references,
382
+ )
382
383
  else:
383
384
  if self._node._version <= "3.38.1":
384
385
  version_error = (
@@ -395,7 +396,7 @@ class IDSCoordinates:
395
396
  coordinate.references,
396
397
  dim,
397
398
  version_error,
398
- exc_info=1,
399
+ exc_info=True,
399
400
  )
400
401
  # Flag to the caller that an error was suppressed
401
402
  did_capture.append(1)
@@ -57,7 +57,7 @@ class IDSStructure(IDSBase):
57
57
  def __getattr__(self, name):
58
58
  if name not in self._children:
59
59
  raise AttributeError(
60
- f"IDS structure '{self._path}' has no attribute '{name}'"
60
+ f"IDS structure '{self.metadata.path_string}' has no attribute '{name}'"
61
61
  )
62
62
  # Create child node
63
63
  child_meta = self._children[name]
@@ -27,7 +27,7 @@ def test_hash_str1d(minimal):
27
27
  "multiple entries to test!",
28
28
  ]
29
29
  minimal.str_1d = string_list
30
- hashes = list(map(xxh3_64_digest, string_list))
30
+ hashes = [xxh3_64_digest(s.encode("utf-8")) for s in string_list]
31
31
  expected = xxh3_64_digest(struct.pack("<Q", len(string_list)) + b"".join(hashes))
32
32
  assert expected == b"\x98\x011\x9dx+\x0e\xc0"
33
33
  assert imas.util.calc_hash(minimal.str_1d) == expected
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: imas-python
3
- Version: 2.3.0
3
+ Version: 2.3.1
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
@@ -219,6 +219,8 @@ imas_python.egg-info/SOURCES.txt
219
219
  imas_python.egg-info/dependency_links.txt
220
220
  imas_python.egg-info/entry_points.txt
221
221
  imas_python.egg-info/requires.txt
222
+ imas_python.egg-info/scm_file_list.json
223
+ imas_python.egg-info/scm_version.json
222
224
  imas_python.egg-info/top_level.txt
223
225
  tools/compare_lowlevel_access_patterns.py
224
226
  tools/get_tagnames.py
@@ -0,0 +1,221 @@
1
+ {
2
+ "files": [
3
+ ".git-blame-ignore-revs",
4
+ ".git_archival.txt",
5
+ ".gitattributes",
6
+ ".github/CODEOWNERS",
7
+ ".github/dependabot.yml",
8
+ ".github/workflows/linting.yml",
9
+ ".github/workflows/publish.yml",
10
+ ".github/workflows/test_with_pytest.yml",
11
+ ".gitignore",
12
+ ".pylintrc",
13
+ ".readthedocs.yml",
14
+ "CODE_OF_CONDUCT.md",
15
+ "CONTRIBUTING.md",
16
+ "LICENSE.txt",
17
+ "MANIFEST.in",
18
+ "README.md",
19
+ "asv.conf.json",
20
+ "benchmarks/__init__.py",
21
+ "benchmarks/core_profiles.py",
22
+ "benchmarks/edge_profiles.py",
23
+ "benchmarks/technical.py",
24
+ "benchmarks/utils.py",
25
+ "conftest.py",
26
+ "docs/.gitignore",
27
+ "docs/Makefile",
28
+ "docs/source/.gitignore",
29
+ "docs/source/_static/imas.css",
30
+ "docs/source/_static/imas_200x200.png",
31
+ "docs/source/_templates/autosummary/accessor.rst",
32
+ "docs/source/_templates/autosummary/accessor_attribute.rst",
33
+ "docs/source/_templates/autosummary/accessor_callable.rst",
34
+ "docs/source/_templates/autosummary/accessor_method.rst",
35
+ "docs/source/_templates/autosummary/base.rst",
36
+ "docs/source/_templates/custom-class-template.rst",
37
+ "docs/source/_templates/custom-module-template.rst",
38
+ "docs/source/_templates/layout.html",
39
+ "docs/source/api-hidden.rst",
40
+ "docs/source/api.rst",
41
+ "docs/source/benchmarking.rst",
42
+ "docs/source/changelog.rst",
43
+ "docs/source/ci_config.rst",
44
+ "docs/source/cli.rst",
45
+ "docs/source/code_style.rst",
46
+ "docs/source/conf.py",
47
+ "docs/source/configuring.rst",
48
+ "docs/source/courses/advanced/dd_versions.rst",
49
+ "docs/source/courses/advanced/explore.rst",
50
+ "docs/source/courses/advanced/hashing.rst",
51
+ "docs/source/courses/advanced/imas_snippets/alternative_coordinates.py",
52
+ "docs/source/courses/advanced/imas_snippets/autoconvert_get.py",
53
+ "docs/source/courses/advanced/imas_snippets/autoconvert_put.py",
54
+ "docs/source/courses/advanced/imas_snippets/calc_with_units.py",
55
+ "docs/source/courses/advanced/imas_snippets/coordinates.py",
56
+ "docs/source/courses/advanced/imas_snippets/dd_versions.py",
57
+ "docs/source/courses/advanced/imas_snippets/explore_data.py",
58
+ "docs/source/courses/advanced/imas_snippets/explore_structures.py",
59
+ "docs/source/courses/advanced/imas_snippets/hashing.py",
60
+ "docs/source/courses/advanced/imas_snippets/ids_convert.py",
61
+ "docs/source/courses/advanced/imas_snippets/ids_to_xarray.py",
62
+ "docs/source/courses/advanced/imas_snippets/tensorized_ids_to_xarray.py",
63
+ "docs/source/courses/advanced/metadata.rst",
64
+ "docs/source/courses/advanced/xarray.rst",
65
+ "docs/source/courses/advanced_user_training.rst",
66
+ "docs/source/courses/basic/analyze.rst",
67
+ "docs/source/courses/basic/core_profiles_ne_timeslice.png",
68
+ "docs/source/courses/basic/core_profiles_te.png",
69
+ "docs/source/courses/basic/create.rst",
70
+ "docs/source/courses/basic/explore.rst",
71
+ "docs/source/courses/basic/imas_inspect.png",
72
+ "docs/source/courses/basic/imas_snippets/create_core_profiles.py",
73
+ "docs/source/courses/basic/imas_snippets/explore_data_entry.py",
74
+ "docs/source/courses/basic/imas_snippets/explore_public_ec_launchers.py",
75
+ "docs/source/courses/basic/imas_snippets/explore_public_pf_active.py",
76
+ "docs/source/courses/basic/imas_snippets/explore_training_data.py",
77
+ "docs/source/courses/basic/imas_snippets/find_paths.py",
78
+ "docs/source/courses/basic/imas_snippets/iterate_core_profiles.py",
79
+ "docs/source/courses/basic/imas_snippets/plot_core_profiles_ne_timeslice.py",
80
+ "docs/source/courses/basic/imas_snippets/plot_core_profiles_te.py",
81
+ "docs/source/courses/basic/imas_snippets/print_idss.py",
82
+ "docs/source/courses/basic/imas_snippets/read_core_profiles_ne_timeslice.py",
83
+ "docs/source/courses/basic/imas_snippets/read_equilibrium_time_array.py",
84
+ "docs/source/courses/basic/imas_snippets/read_whole_equilibrium.py",
85
+ "docs/source/courses/basic/imas_snippets/transform_grid.py",
86
+ "docs/source/courses/basic/interactive_tab_core_profiles_toplevel.png",
87
+ "docs/source/courses/basic/print_tree_ids_properties.png",
88
+ "docs/source/courses/basic/setup.rst",
89
+ "docs/source/courses/basic/transform.rst",
90
+ "docs/source/courses/basic_user_training.rst",
91
+ "docs/source/examples.rst",
92
+ "docs/source/examples/custom_conversion_em_coupling.py",
93
+ "docs/source/examples/custom_conversion_em_coupling.rst",
94
+ "docs/source/identifiers.rst",
95
+ "docs/source/imas_architecture.rst",
96
+ "docs/source/imas_structure.png",
97
+ "docs/source/index.rst",
98
+ "docs/source/installing.rst",
99
+ "docs/source/intro.rst",
100
+ "docs/source/lazy_loading.rst",
101
+ "docs/source/mdsplus.rst",
102
+ "docs/source/metadata.rst",
103
+ "docs/source/multi-dd.rst",
104
+ "docs/source/netcdf.rst",
105
+ "docs/source/netcdf/conventions.rst",
106
+ "docs/source/release_imas.rst",
107
+ "docs/source/resampling.rst",
108
+ "docs/source/validation.rst",
109
+ "imas/__init__.py",
110
+ "imas/__main__.py",
111
+ "imas/_to_xarray.py",
112
+ "imas/_util.py",
113
+ "imas/assets/IDSDef2MDSpreTree.xsl",
114
+ "imas/assets/IDS_fake_toplevel.xml",
115
+ "imas/assets/IDS_minimal.xml",
116
+ "imas/assets/IDS_minimal_2.xml",
117
+ "imas/assets/IDS_minimal_struct_array.xml",
118
+ "imas/assets/IDS_minimal_types.xml",
119
+ "imas/assets/ITER_134173_106_core_profiles.ids",
120
+ "imas/assets/ITER_134173_106_equilibrium.ids",
121
+ "imas/assets/README.md",
122
+ "imas/assets/core_profiles.ids",
123
+ "imas/assets/equilibrium.ids",
124
+ "imas/backends/__init__.py",
125
+ "imas/backends/db_entry_impl.py",
126
+ "imas/backends/imas_core/__init__.py",
127
+ "imas/backends/imas_core/al_context.py",
128
+ "imas/backends/imas_core/db_entry_al.py",
129
+ "imas/backends/imas_core/db_entry_helpers.py",
130
+ "imas/backends/imas_core/imas_interface.py",
131
+ "imas/backends/imas_core/mdsplus_model.py",
132
+ "imas/backends/imas_core/uda_support.py",
133
+ "imas/backends/netcdf/__init__.py",
134
+ "imas/backends/netcdf/db_entry_nc.py",
135
+ "imas/backends/netcdf/ids2nc.py",
136
+ "imas/backends/netcdf/ids_tensorizer.py",
137
+ "imas/backends/netcdf/iterators.py",
138
+ "imas/backends/netcdf/nc2ids.py",
139
+ "imas/backends/netcdf/nc_metadata.py",
140
+ "imas/backends/netcdf/nc_validate.py",
141
+ "imas/command/cli.py",
142
+ "imas/command/db_analysis.py",
143
+ "imas/command/helpers.py",
144
+ "imas/command/timer.py",
145
+ "imas/convert_core_edge_plasma.py",
146
+ "imas/db_entry.py",
147
+ "imas/dd_zip.py",
148
+ "imas/exception.py",
149
+ "imas/ids_base.py",
150
+ "imas/ids_convert.py",
151
+ "imas/ids_coordinates.py",
152
+ "imas/ids_data_type.py",
153
+ "imas/ids_defs.py",
154
+ "imas/ids_factory.py",
155
+ "imas/ids_identifiers.py",
156
+ "imas/ids_metadata.py",
157
+ "imas/ids_path.py",
158
+ "imas/ids_primitive.py",
159
+ "imas/ids_struct_array.py",
160
+ "imas/ids_structure.py",
161
+ "imas/ids_toplevel.py",
162
+ "imas/setup_logging.py",
163
+ "imas/test/test_all_dd_versions.py",
164
+ "imas/test/test_cli.py",
165
+ "imas/test/test_convert_core_edge_plasma.py",
166
+ "imas/test/test_dbentry.py",
167
+ "imas/test/test_dbentry_uda.py",
168
+ "imas/test/test_dd_zip.py",
169
+ "imas/test/test_deepcopy.py",
170
+ "imas/test/test_exception.py",
171
+ "imas/test/test_get_sample.py",
172
+ "imas/test/test_hash.py",
173
+ "imas/test/test_helpers.py",
174
+ "imas/test/test_identifiers.py",
175
+ "imas/test/test_ids2nc.py",
176
+ "imas/test/test_ids_ascii_data.py",
177
+ "imas/test/test_ids_convert.py",
178
+ "imas/test/test_ids_coordinates.py",
179
+ "imas/test/test_ids_data_type.py",
180
+ "imas/test/test_ids_factory.py",
181
+ "imas/test/test_ids_metadata.py",
182
+ "imas/test/test_ids_mixin.py",
183
+ "imas/test/test_ids_path.py",
184
+ "imas/test/test_ids_primitive.py",
185
+ "imas/test/test_ids_struct_array.py",
186
+ "imas/test/test_ids_structure.py",
187
+ "imas/test/test_ids_toplevel.py",
188
+ "imas/test/test_ids_validate.py",
189
+ "imas/test/test_latest_dd_autofill.py",
190
+ "imas/test/test_latest_dd_manual.py",
191
+ "imas/test/test_latest_dd_resample.py",
192
+ "imas/test/test_lazy_loading.py",
193
+ "imas/test/test_list_filled_paths.py",
194
+ "imas/test/test_list_occurrences.py",
195
+ "imas/test/test_minimal.py",
196
+ "imas/test/test_minimal_conversion.py",
197
+ "imas/test/test_minimal_io.py",
198
+ "imas/test/test_minimal_struct_array_io.py",
199
+ "imas/test/test_minimal_types.py",
200
+ "imas/test/test_minimal_types_io.py",
201
+ "imas/test/test_minimal_types_io_automatic.py",
202
+ "imas/test/test_nbc_change.py",
203
+ "imas/test/test_nc_autofill.py",
204
+ "imas/test/test_nc_entry.py",
205
+ "imas/test/test_nc_metadata.py",
206
+ "imas/test/test_nc_validation.py",
207
+ "imas/test/test_snippets.py",
208
+ "imas/test/test_static_ids.py",
209
+ "imas/test/test_str_1d.py",
210
+ "imas/test/test_time_slicing.py",
211
+ "imas/test/test_to_xarray.py",
212
+ "imas/test/test_uda_support.py",
213
+ "imas/test/test_util.py",
214
+ "imas/training.py",
215
+ "imas/util.py",
216
+ "pyproject.toml",
217
+ "setup.cfg",
218
+ "tools/compare_lowlevel_access_patterns.py",
219
+ "tools/get_tagnames.py"
220
+ ]
221
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.3.1",
3
+ "distance": 0,
4
+ "node": "gdc78cc36c6a86445b06af88890d144a045de91da",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-11-02"
8
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes