Skip to content

Commit 45e2152

Browse files
committed
Fill cache with empty data when no data provided
1 parent 207b6a9 commit 45e2152

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

src/qcodes/dataset/data_set_cache.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def _merge_data(
325325
shape: tuple[int, ...] | None,
326326
single_tree_write_status: int | None,
327327
meas_parameter: str,
328-
) -> tuple[dict[str, npt.NDArray], int | None]:
328+
) -> tuple[dict[str, npt.NDArray], int]:
329329
subtree_merged_data = {}
330330
subtree_parameters = existing_data.keys()
331331

@@ -335,20 +335,19 @@ def _merge_data(
335335
"The following keys were unexpected: "
336336
f"{set(new_data.keys() - existing_data.keys())}"
337337
)
338-
339-
new_write_status: int | None
340-
single_param_merged_data, new_write_status = _merge_data_single_param(
338+
single_param_merged_data, data_written = _merge_data_single_param(
341339
existing_data.get(meas_parameter),
342340
new_data.get(meas_parameter),
343341
shape,
344342
single_tree_write_status,
345343
)
344+
new_write_status = data_written if data_written is not None else 0
346345
if single_param_merged_data is not None:
347346
subtree_merged_data[meas_parameter] = single_param_merged_data
348347

349348
for subtree_param in subtree_parameters:
350349
if subtree_param != meas_parameter:
351-
single_param_merged_data, new_write_status = _merge_data_single_param(
350+
single_param_merged_data, data_written = _merge_data_single_param(
352351
existing_data.get(subtree_param),
353352
new_data.get(subtree_param),
354353
shape,
@@ -357,6 +356,9 @@ def _merge_data(
357356
if single_param_merged_data is not None:
358357
subtree_merged_data[subtree_param] = single_param_merged_data
359358

359+
if data_written is not None and data_written > new_write_status:
360+
new_write_status = data_written
361+
360362
return subtree_merged_data, new_write_status
361363

362364

@@ -373,22 +375,33 @@ def _merge_data_single_param(
373375
(merged_data, new_write_status) = _insert_into_data_dict(
374376
existing_values, new_values, single_tree_write_status, shape=shape
375377
)
376-
elif new_values is not None:
377-
(merged_data, new_write_status) = _create_new_data_dict(new_values, shape)
378-
elif existing_values is not None:
378+
elif (
379+
existing_values is not None and existing_values.size != 0 and new_values is None
380+
):
379381
merged_data = existing_values
380382
new_write_status = single_tree_write_status
383+
elif shape is not None:
384+
(merged_data, new_write_status) = _create_new_data_dict(new_values, shape)
381385
else:
382386
merged_data = None
383387
new_write_status = None
384388
return merged_data, new_write_status
385389

386390

387391
def _create_new_data_dict(
388-
new_values: npt.NDArray, shape: tuple[int, ...] | None
389-
) -> tuple[npt.NDArray, int]:
390-
if shape is None:
392+
new_values: npt.NDArray | None, shape: tuple[int, ...] | None
393+
) -> tuple[npt.NDArray, int | None]:
394+
if shape is None and new_values is None:
395+
raise RuntimeError("Cannot create new data dict without new values")
396+
elif shape is None:
397+
assert new_values is not None
391398
return new_values, new_values.size
399+
elif new_values is None:
400+
# we don't know the datatype so use float which can hold NaN
401+
# since that is the most common?
402+
data = np.zeros(shape)
403+
data[:] = np.nan
404+
return data, None
392405
elif new_values.size > 0:
393406
n_values = new_values.size
394407
data = np.zeros(shape, dtype=new_values.dtype)

tests/dataset/test_dataset_in_memory.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,4 +722,10 @@ def test_dataset_in_mem_with_inferred_parameters(
722722
)
723723
ds = datasaver.dataset
724724

725-
assert DeepDiff(ds.get_parameter_data(), ds.cache.data()) == {}
725+
param_data = ds.get_parameter_data()
726+
cache_data = ds.cache.data()
727+
728+
assert set(param_data.keys()) == set(cache_data.keys())
729+
assert set(param_data["dependent"].keys()) == set(cache_data["dependent"].keys())
730+
731+
assert DeepDiff(param_data, cache_data, ignore_nan_inequality=True) == {}

0 commit comments

Comments
 (0)