Skip to content

Commit ac1c134

Browse files
committed
Allow chunking on zero-sized extents
1 parent 66515f1 commit ac1c134

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

hdf5/src/hl/dataset.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,8 @@ impl DatasetBuilderInner {
414414
chunk.clone()
415415
} else if chunking_required && chunking_allowed {
416416
Chunk::MinKB(DEFAULT_CHUNK_SIZE_KB)
417+
} else if extents.size() == 0 {
418+
Chunk::Exact(vec![1; extents.ndim()])
417419
} else {
418420
Chunk::None
419421
};
@@ -437,7 +439,13 @@ impl DatasetBuilderInner {
437439
let chunk_size = chunk.iter().product::<usize>();
438440
ensure!(chunk_size > 0, "All chunk dimensions must be positive, got {:?}", chunk);
439441
let dims_ok = extents.iter().zip(chunk).all(|(e, c)| e.max.is_none() || *c <= e.dim);
440-
ensure!(dims_ok, "Chunk dimensions ({:?}) exceed data shape ({:?})", chunk, extents);
442+
let no_extent = extents.size() == 0;
443+
ensure!(
444+
dims_ok || no_extent,
445+
"Chunk dimensions ({:?}) exceed data shape ({:?})",
446+
chunk,
447+
extents
448+
);
441449
}
442450
Ok(chunk_shape)
443451
}

tests/test_dataset.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,17 @@ fn test_create_on_databuilder() {
351351
let _ds = file.new_dataset::<i32>().shape(2).create("ds4").unwrap();
352352
}
353353

354+
#[test]
355+
fn test_issue_223() {
356+
let file = new_in_memory_file().unwrap();
357+
358+
let data: &[u16] = &[];
359+
let _ds = file.new_dataset_builder().deflate(3).with_data(data).create("ds2").unwrap();
360+
361+
let data: Array2<u16> = Array2::from_shape_fn((0, 0), |(_i, _j)| unreachable!());
362+
let _ds = file.new_dataset_builder().deflate(3).with_data(&data).create("ds3").unwrap();
363+
}
364+
354365
#[test]
355366
fn test_read_write_rename_fields() -> hdf5::Result<()> {
356367
test_read_write::<RenameStruct>()?;

0 commit comments

Comments
 (0)