Merge virtual dataset into regular dataset.
(file, task_name, overwrite=False)
| 844 | |
| 845 | @staticmethod |
| 846 | def merge_task(file, task_name, overwrite=False): |
| 847 | """Merge virtual dataset into regular dataset.""" |
| 848 | # Create new dataset |
| 849 | old_dset = file['tasks'][task_name] |
| 850 | if not old_dset.is_virtual: |
| 851 | raise ValueError("Specified dataset is not a virtual dataset.") |
| 852 | new_name = f"{task_name}_merged" |
| 853 | new_shape = (1,) + old_dset.shape[1:] # shape[0] = 1 to automatically chunk within writes |
| 854 | new_dset = file['tasks'].create_dataset(name=new_name, shape=new_shape, maxshape=old_dset.maxshape, dtype=old_dset.dtype) |
| 855 | new_dset.resize(old_dset.shape[0], axis=0) |
| 856 | # Copy attributes and scales |
| 857 | new_dset.attrs.update(old_dset.attrs) |
| 858 | # Copy data chunk by chunk |
| 859 | for chunk in new_dset.iter_chunks(): |
| 860 | new_dset[chunk] = old_dset[chunk] |
| 861 | # Overwrite old dataset if requested |
| 862 | if overwrite: |
| 863 | del file['tasks'][task_name] |
| 864 | file['tasks'].move(new_name, task_name) |
| 865 |