imas-python 1.1.2.dev42__py3-none-any.whl → 1.1.2.dev54__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

imas/_version.py CHANGED
@@ -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.dev54'
16
+ __version_tuple__ = version_tuple = (1, 1, 2, 'dev54')
imas/assets/IDSDef.zip CHANGED
Binary file
@@ -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,6 +7,7 @@ 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
12
13
  from imas.ids_base import IDSBase
@@ -185,9 +186,20 @@ class IDS2NC:
185
186
 
186
187
  else:
187
188
  dtype = dtypes[metadata.data_type]
189
+ if (
190
+ version.parse(netCDF4.__version__) < version.parse("1.7.0")
191
+ and dtype is dtypes[IDSDataType.CPX]
192
+ ):
193
+ raise InvalidNetCDFEntry(
194
+ f"Found complex data in {var_name}, NetCDF 1.7.0 or"
195
+ f" later is required for complex data types"
196
+ )
188
197
  kwargs = {}
189
198
  if dtype is not str: # Enable compression:
190
- kwargs.update(compression="zlib", complevel=1)
199
+ if version.parse(netCDF4.__version__) > version.parse("1.4.1"):
200
+ kwargs.update(compression="zlib", complevel=1)
201
+ else:
202
+ kwargs.update(zlib=True, complevel=1)
191
203
  if dtype is not dtypes[IDSDataType.CPX]: # Set fillvalue
192
204
  kwargs.update(fill_value=default_fillvals[metadata.data_type])
193
205
  # 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
 
imas/ids_primitive.py CHANGED
@@ -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
imas/test/test_cli.py CHANGED
@@ -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:
imas/test/test_dbentry.py CHANGED
@@ -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
imas/test/test_helpers.py CHANGED
@@ -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()
@@ -1,11 +1,56 @@
1
1
  from imas.db_entry import DBEntry
2
+ from imas.exception import InvalidNetCDFEntry
2
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
3
8
 
4
9
 
5
- def test_nc_latest_dd_autofill_put_get(ids_name, tmp_path):
10
+ def test_nc_latest_dd_autofill_put_get_skip_complex(ids_name, tmp_path):
6
11
  with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
7
12
  ids = entry.factory.new(ids_name)
8
- fill_consistent(ids, 0.5)
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(
26
+ ids_name, tmp_path
27
+ ):
28
+ with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
29
+ ids = entry.factory.new(ids_name)
30
+ fill_consistent(ids, leave_empty=0.5, skip_complex=False)
31
+ try:
32
+ entry.put(ids)
33
+ ids2 = entry.get(ids_name)
34
+ compare_children(ids, ids2)
35
+ except InvalidNetCDFEntry as e:
36
+ # This is expected, as these versions of NetCDF4 do not support
37
+ # complex numbers.
38
+ if not re.search(
39
+ r".*NetCDF 1.7.0 or later is required for complex data types", str(e)
40
+ ):
41
+ raise InvalidNetCDFEntry(e) from e
42
+
43
+
44
+ @pytest.mark.skipif(
45
+ version.parse(netCDF4.__version__) < version.parse("1.7.0"),
46
+ reason="NetCDF4 versions >= 1.7.0 support complex numbers",
47
+ )
48
+ def test_nc_latest_dd_autofill_put_get_with_complex_newer_netCDF4(
49
+ ids_name, tmp_path
50
+ ):
51
+ with DBEntry(f"{tmp_path}/test-{ids_name}.nc", "x") as entry:
52
+ ids = entry.factory.new(ids_name)
53
+ fill_consistent(ids, leave_empty=0.5, skip_complex=False)
9
54
 
10
55
  entry.put(ids)
11
56
  ids2 = entry.get(ids_name)
@@ -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")
imas/test/test_util.py CHANGED
@@ -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.dev54
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
@@ -1,7 +1,7 @@
1
1
  imas/__init__.py,sha256=9OHpTf8gCl7BJVU7U2bf9kWatBNNAhFZdgoFPcHeNQU,878
2
2
  imas/__main__.py,sha256=2qXoC0HzV4xkPQAvdubHC4rnK3G6f_2PT9TkkCHYXk8,418
3
3
  imas/_util.py,sha256=FXX13glhmgSiw-0LtjH0xv3YlM3Pa9X4jl9yz9Uv7Vs,9484
4
- imas/_version.py,sha256=fw8IW4WzXy8wfIEN8hm8d7l3Y6ZbYtDc57G36cJyiFI,426
4
+ imas/_version.py,sha256=dlu9cvo5Bpcfh3Mo-XwK4dRhITGZtmORNka2hoJn3P0,426
5
5
  imas/db_entry.py,sha256=OnAgz0c97gbEizrDcuO909VFUzOzeU1OIwWe50PCCxw,31755
6
6
  imas/dd_helpers.py,sha256=IFRmOWw0VyLuR9Xpe9VeVy1ANq5XpFF4m1rj9RtETKI,6275
7
7
  imas/dd_zip.py,sha256=6gQ91rlVsDaU1U6XXaEnaGyvI3ZgQ659GOgIYJLZH6M,10322
@@ -15,14 +15,14 @@ imas/ids_factory.py,sha256=t55O1PB2Nj1vQ1EroC-7dQyB1Va_iSTCCUFINjUKnos,3774
15
15
  imas/ids_identifiers.py,sha256=YwDjNu7M2kYrEJY5dcOCG0w5OKsWhqzQqCjQzX71HBI,4164
16
16
  imas/ids_metadata.py,sha256=kpyNKXB9-aQpjdj1df10qKZIJ7-HC5BuDOhGyhX9YMI,12258
17
17
  imas/ids_path.py,sha256=rqucboH8wO4-njy8d6lUffnfHA6L2b81wh8AJ6Y_gbU,10446
18
- imas/ids_primitive.py,sha256=3s0y0nxPSXjAoXEYUvsmevWOqmfCBnct-ySr_f2oU9k,16810
18
+ imas/ids_primitive.py,sha256=3ALc0RvqF1y6_nCgMiszEtTlxwufdqT2YmpAybh8PUs,16835
19
19
  imas/ids_struct_array.py,sha256=BFBa1wSZFAlZguExCTA56D8RfnaLv-nbxDIz9fMhcGE,8292
20
20
  imas/ids_structure.py,sha256=0DRudIturYE2Aw_Jb22zBZCd_zyA0-lg8YOEI7Y_iso,13107
21
21
  imas/ids_toplevel.py,sha256=YHWZewK8JYf34pYzF_oooMILZAHgnuWCFtr0_JFjmzI,14915
22
22
  imas/setup_logging.py,sha256=McfIYupRQDxtL-lasTjH5F8BxBvncuZhcpzSDEwKtJQ,1872
23
23
  imas/training.py,sha256=JGYjpCubUJDb_Rg0QaaDhNkBHc4Qc376U9fRq24NVXc,1576
24
24
  imas/util.py,sha256=dG282-l7m2U_VhjZ0VnQ-BpsWrzgKSxUZ1AZf-_wDOY,17822
25
- imas/assets/IDSDef.zip,sha256=6OngXhByHExIv4u6sP2EKS7WGTGzBsTs9LFvcxKcz4I,27383258
25
+ imas/assets/IDSDef.zip,sha256=P0tyXS3Z0SlCHfqdd9e8XUHAljaxMl3b4Qz4friss30,27383258
26
26
  imas/assets/IDSDef2MDSpreTree.xsl,sha256=V9eDmDnxe6oYhDP81gmdYip8cF2yST9dGxmZBaATLdA,7296
27
27
  imas/assets/IDS_fake_toplevel.xml,sha256=TJhukQuDHHVTW2U7fK_-KmTQiYOFZMY-ECZXBHQE2mk,18683
28
28
  imas/assets/IDS_minimal.xml,sha256=5B6c0J-WPzSChHWwpLPRkNawx9m6v8BM5nC0OQFnWcQ,1740
@@ -150,25 +150,25 @@ imas/backends/imas_core/imas_interface.py,sha256=c4OHvhw-aCO4O9sDSmYdcZcgeeBwu0-
150
150
  imas/backends/imas_core/mdsplus_model.py,sha256=_l8z4vKI-o_27VOK778NOAGp6QWAV61dEnwNkuy8z5s,14795
151
151
  imas/backends/imas_core/uda_support.py,sha256=lxHzby6Fkkpn5j6yWpQrlqlwng-gA9O_hVK03Wf_Ij8,1770
152
152
  imas/backends/netcdf/__init__.py,sha256=pyETe19IpVVezOS7mNzF_Zbt_eGoK8IWnQfG8P7V4CA,191
153
- imas/backends/netcdf/db_entry_nc.py,sha256=xx3GDeRbTpbsi2GW2wyaUFmrUKXjFJ0q4sSbMI_-WrQ,6828
154
- imas/backends/netcdf/ids2nc.py,sha256=rjF6L-JHrwFnOjI-NRBTv15JbHRk2moGukNUCaL_FKc,12742
153
+ imas/backends/netcdf/db_entry_nc.py,sha256=KCVQmKM7o5Sicf0hv08ksm_qAUHajIloJZD7vnD-uq0,7078
154
+ imas/backends/netcdf/ids2nc.py,sha256=0YUB0WZ-rQsk2ppTK1K0bQHUgig3SjK7vaFHd0t8skg,13339
155
155
  imas/backends/netcdf/nc2ids.py,sha256=rAEzJCqcZfFTy_co75TmpoXN42O4LIuv0yjxnjBm-bo,11879
156
156
  imas/backends/netcdf/nc_metadata.py,sha256=pTOff1Zzk7uT1BGUV1cnDLVNo4WeTT-7JETR_9LvVIs,16175
157
- imas/backends/netcdf/nc_validate.py,sha256=gO6jpLsxfIv5hbtIi5MYtN1KtU9yQCVPgG8pHdK7iHQ,2256
157
+ imas/backends/netcdf/nc_validate.py,sha256=4ixuTWeIEEwUFuCFdvPxZBXN-_boupzZCfeDQ0eD1io,2307
158
158
  imas/command/cli.py,sha256=lzVV_PMXBd88J7DmDwaiWiiqMj_2rs5V8dc6kkbUDGw,8401
159
159
  imas/command/db_analysis.py,sha256=8ETLMzEgS8z17MEeB10NR28wiQO3TdjEGQHlmbkTjBw,10454
160
160
  imas/command/helpers.py,sha256=Hf9Y0Owm9woJklQ6UzwHHum96YgI7R_SKRlksUqnCIs,1499
161
161
  imas/command/timer.py,sha256=wvjHJBgkY1VRaRvCFuDDORzZOUV-Q7IxiTxlGzjXBz4,2328
162
162
  imas/test/test_all_dd_versions.py,sha256=8T9q9S7Vhwa96y6KUDv7HoeuOPlc6RovEhPZEseDoDs,790
163
- imas/test/test_cli.py,sha256=pBuAE4ICrCY920CqvHODgJ7Yr2uT1hiGCDQ1HPSTllU,1559
164
- imas/test/test_dbentry.py,sha256=xfC33VPHIb_B1hGcaLc5rELboeebGbGL_ptN2zZyAkA,4010
163
+ imas/test/test_cli.py,sha256=ZSQdO5t4n0wa2ohJNsRQEVftJOxyDIHsj_IUZxKuszA,1677
164
+ imas/test/test_dbentry.py,sha256=fq49bh7fa2O7ocLiXiDSB5EEVII6Cx3zeoiU5uzjyo8,4025
165
165
  imas/test/test_dd_helpers.py,sha256=HBzPuIlEv0FM5qz_w9-BpX0R_T2cnC0b5cGt8sw_kpQ,1679
166
166
  imas/test/test_dd_zip.py,sha256=SgKPufIvk3tK_Q4JpHKq57g0lKthEj1IgcdZ2c-IzwI,820
167
167
  imas/test/test_deepcopy.py,sha256=vYTwpEqRpi-G-xVSRWVIwLL_jBY7f6v31QPOU0e_FKs,606
168
168
  imas/test/test_exception.py,sha256=bL_JlWsdtT-emKkSHx1yFbDKLqWOx8piCFBNHJ4osig,408
169
169
  imas/test/test_get_sample.py,sha256=BMoVJS4PgtV3S-AUnH6MJO2F8og1TZQk3KzOxGVa0as,16031
170
170
  imas/test/test_hash.py,sha256=eMg3IF5IAfcOIbai1HF2PT2mikDyIlnbORQJ553brMk,6122
171
- imas/test/test_helpers.py,sha256=FqkZhWdBFt36h_pkIRw_Z5VWDgjcryQ6W74N0n9ouV4,14093
171
+ imas/test/test_helpers.py,sha256=ynhwAW5lotJfbscub_S2cppHWyruxDiT304ELyjjFIA,14647
172
172
  imas/test/test_identifiers.py,sha256=UXjgZJBRYQVnHejpdug6umNcnutdgQkAnWuTNduxgig,3895
173
173
  imas/test/test_ids2nc.py,sha256=zLp0F6GW04gU6HYp63bWivFS3Let_dwMohYy6Rgbis0,6040
174
174
  imas/test/test_ids_ascii_data.py,sha256=qfXoSAl0TJawDMVZCbbbbjb89uVaGnK6pkAQ8fbHm3s,1116
@@ -182,7 +182,7 @@ imas/test/test_ids_path.py,sha256=z9OS8SY4ytzJF70aEs8m6Y9pdfP_Y2p1q5gLIa55mVI,61
182
182
  imas/test/test_ids_primitive.py,sha256=4ab9GCvtYB5Jyh2kCNMZRhvvFH-vy1QTpcWAHhgAlp8,4272
183
183
  imas/test/test_ids_struct_array.py,sha256=oK09V2GzqAEaJW1taFxRMzrxF_B79boBLjdm8JQY_lM,2863
184
184
  imas/test/test_ids_structure.py,sha256=PpqStc0RQKk9olJOdkxIBao6WXb9k6WNCrnJX-Se1eo,2240
185
- imas/test/test_ids_toplevel.py,sha256=DSwRH63hF0Bo1jHkVt8monyPiUw8guR_CKgSeJ-NSAM,1444
185
+ imas/test/test_ids_toplevel.py,sha256=x53HlA4__xLoS5v2QY_8_vcmh-65xdfYNQMjOMQoKPk,1457
186
186
  imas/test/test_ids_validate.py,sha256=0tRwmId61JFLlFmz-17DRKxntQtsKn_kRZULznt4d-g,11903
187
187
  imas/test/test_latest_dd_autofill.py,sha256=3SZD9J4jm_NQznJYT7ypnrmJCRAMV2iM8IJZnymrfJQ,2052
188
188
  imas/test/test_latest_dd_manual.py,sha256=XINCYCw3ZtbRch6Ug_gSPRyYXIg0dAorM7Y270kSYvI,1428
@@ -193,23 +193,23 @@ imas/test/test_minimal.py,sha256=NWfzH_zWOGzNmQ8lVTr-FyLTdadrnI82L6eRZJ26eWQ,141
193
193
  imas/test/test_minimal_conversion.py,sha256=4wufUlbLZzAgh57VJVSgpjqd2ybrcaxcmgsmL7aJV4M,1678
194
194
  imas/test/test_minimal_io.py,sha256=vy1cC68BxZATarAuchhB57cyN9cSpVWAbtxpmVkrcHo,904
195
195
  imas/test/test_minimal_struct_array_io.py,sha256=AHNLH6Ic6XDQT97GXZrYQ3-_ApnYhYduc6PFZmnOXhI,2245
196
- imas/test/test_minimal_types.py,sha256=FNRy_HZzKlCOLAcEH16tRVw20PSmuSfgr6DALDPGHDs,14707
196
+ imas/test/test_minimal_types.py,sha256=l8jp1ZNj_Hzio3g98gqzfuJRtKzz0oYd8WLOYO8NGM4,15040
197
197
  imas/test/test_minimal_types_io.py,sha256=wWhtzTo7Yoxu9Tx5h5s0V_pIfxSWwX4wuz5LXTS13TA,2330
198
198
  imas/test/test_minimal_types_io_automatic.py,sha256=eSk14249rCx67sOIoWqhWf85HkzcLnhP27LmfINM5fY,2476
199
- imas/test/test_nbc_change.py,sha256=hQtObkyHEspsPcB2ELHdU1SetoLBKCoH48eJo_Pge_c,15983
200
- imas/test/test_nc_autofill.py,sha256=X5ZlZGjrRKKhDtv9LFya5uniixO61V4ci5M7iLujr9E,399
199
+ imas/test/test_nbc_change.py,sha256=ul_LTT0AqcolcEfiEgRYaHh7DO5PKbHCx7z3q2VE_vk,15998
200
+ imas/test/test_nc_autofill.py,sha256=Sz3JWeCaPTIHvHJAdfMdn93i2c3xRynSFD26utm9DU8,1947
201
201
  imas/test/test_nc_entry.py,sha256=GWEGFppU_YwPnOnelFuOIXCPJpYfD9Or6Vl8uEsMkkk,1032
202
202
  imas/test/test_nc_metadata.py,sha256=P-DYd_4e4j-RfhgyenXU-BBcgzaGKD2_isGduIuM-eQ,6180
203
203
  imas/test/test_nc_validation.py,sha256=ul2lMWOw5ne2O-YheAYZkvAlR9DfjmFLEefC7jk98ok,7269
204
204
  imas/test/test_snippets.py,sha256=Gxe7rU9nVuvnAzPr9eGyqCtpNqKUoBbqU9uOjz3HwH8,979
205
- imas/test/test_static_ids.py,sha256=NLwbK2F7FkbSYE28TqOEX86PhCCZeViaAObL4BiTJbo,1287
205
+ imas/test/test_static_ids.py,sha256=p6sDOzUz30FT_-s4RettoRmpfpqNOa26ThfdF8F4QNI,1302
206
206
  imas/test/test_str_1d.py,sha256=d6GrmV4OYG9f4ludjZBmuqyKOM9XIExTqMh8aQ1UJcQ,3453
207
207
  imas/test/test_time_slicing.py,sha256=FwbdggRJ75Suc268-89daCSaVXhzl8pZZm3Od13EiR4,6959
208
208
  imas/test/test_uda_support.py,sha256=AmakuexebZfJ2-vk_DHfNRPwHmNM2RnwzXqT0eWwWJ0,338
209
- imas/test/test_util.py,sha256=BW5EbL-QDIrJNH7tjBgqOacJY0TXvMidXVKpIVZlv1I,6775
210
- imas_python-1.1.2.dev42.dist-info/LICENSE.txt,sha256=RzxtV7MG0zbF6dDvQsaZ1OKsHZ7CRyeILenjUIol5rs,7651
211
- imas_python-1.1.2.dev42.dist-info/METADATA,sha256=i3GTZNHpbgW5F9_9fUDMytRJdySLK4ePhNB613hGR7M,13630
212
- imas_python-1.1.2.dev42.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
213
- imas_python-1.1.2.dev42.dist-info/entry_points.txt,sha256=e8oXj2SLwyFEiBeJRaAXRc9EYQ8eHWWn7NWdjixjeDM,99
214
- imas_python-1.1.2.dev42.dist-info/top_level.txt,sha256=_WFOlA1rmpYm0T73sNo5Ntvs7S3x4cR7UE8Oy5I5eJA,5
215
- imas_python-1.1.2.dev42.dist-info/RECORD,,
209
+ imas/test/test_util.py,sha256=Dbl07LhaBZiabm7yh9cfkSS4VkEFsBNoo3fmhQPAC1g,6814
210
+ imas_python-1.1.2.dev54.dist-info/LICENSE.txt,sha256=RzxtV7MG0zbF6dDvQsaZ1OKsHZ7CRyeILenjUIol5rs,7651
211
+ imas_python-1.1.2.dev54.dist-info/METADATA,sha256=6lnhHao6fGSJJukDqrn9TZqFQG1YNcJUPyq9ND-wTRM,13630
212
+ imas_python-1.1.2.dev54.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
213
+ imas_python-1.1.2.dev54.dist-info/entry_points.txt,sha256=e8oXj2SLwyFEiBeJRaAXRc9EYQ8eHWWn7NWdjixjeDM,99
214
+ imas_python-1.1.2.dev54.dist-info/top_level.txt,sha256=_WFOlA1rmpYm0T73sNo5Ntvs7S3x4cR7UE8Oy5I5eJA,5
215
+ imas_python-1.1.2.dev54.dist-info/RECORD,,