From 88bd71b8fd8efc08a264d9358f233cd01160be2e Mon Sep 17 00:00:00 2001 From: Axel Bocciarelli Date: Fri, 2 Aug 2024 10:58:42 +0200 Subject: [PATCH] Keep boolean enums as unit8 unless JSON compatibility is requested --- CHANGELOG.md | 13 +++++++++++++ src/hdf5_hl.ts | 2 +- test/bool_test.mjs | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d403c14..a266937 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,17 @@ # Changelog +## v0.7.6 +### Changed + - Retrieve `value` of boolean dataset as `Int8Array` instead of plain JS boolean array. To retrieve a plain JS boolean array, use `json_value` instead: + + ```ts + // v0.7.5 and earlier + bool_dset.value; // -> [false, true] + bool_dset.json_value; // -> [false, true] + + // v0.7.6 onwards + bool_dset.value; // -> Int8Array(2) [0, 1] + bool_dset.json_value; // -> [false, true] + ``` ## v0.7.5 2024-06-03 ### Added - added `virtual_sources?: { file_name: string, dset_name: string }` to `Dataset.metadata` when dataset is virtual. diff --git a/src/hdf5_hl.ts b/src/hdf5_hl.ts index 4feda52..3dc20f6 100644 --- a/src/hdf5_hl.ts +++ b/src/hdf5_hl.ts @@ -188,7 +188,7 @@ function process_data(data: Uint8Array, metadata: Metadata, json_compatible: boo output_data = process_data(data, base_metadata, json_compatible); // Following the convention of h5py, treat all enum datasets where the // enum members are ["FALSE", "TRUE"] as boolean arrays - if (isH5PYBooleanEnum(metadata.enum_type as EnumTypeMetadata)) { + if (json_compatible && isH5PYBooleanEnum(metadata.enum_type as EnumTypeMetadata)) { if (isIterable(output_data)) { output_data = [...output_data].map((x) => !!x); } diff --git a/test/bool_test.mjs b/test/bool_test.mjs index ef27ba6..d77e68e 100644 --- a/test/bool_test.mjs +++ b/test/bool_test.mjs @@ -9,6 +9,11 @@ async function bool_test() { assert.deepEqual( f.get('bool').value, + new Int8Array([ 0, 1, 1, 0 ]) + ); + + assert.deepEqual( + f.get('bool').json_value, [ false, true, true, false ] );