hdfview
hdfview copied to clipboard
Float16 Datasets not supported
While it is very nice to see that float16 values (e.g., as object attributes) are finally supported since 3.3.2, unfortunately float16 datasets are not supported yet.
Example code to create a malicious h5 with Python:
import h5py
import numpy as np
with h5py.File(r"C:\temp\hdf5_test.h5", mode='w') as f:
dset16 = f.create_dataset("dataset_float16", data=np.eye(5, dtype=np.float16)) # this cannot be opened in HDFView
dset32 = f.create_dataset("dataset_float32", data=np.eye(5, dtype=np.float32)) # this can be opened in HDFView
Error messages when trying to open the dataset
For opening as a spreadsheet (table):
An error occured while loading data for the table:
failed to read scalar dataset: Inappropriate type
The bottom of the HDFView windows says this:
*** Error: unable to load table data ***
The log shows this message:
java.lang.Exception: failed to read scalar dataset: Inappropriate type
at hdf.object.h5.H5ScalarDS.read(H5ScalarDS.java:871)
at hdf.view.dialog.DataOptionDialog$PreviewNavigator.createPreviewImage(DataOptionDialog.java:1789)
at hdf.view.dialog.DataOptionDialog$PreviewNavigator.<init>(DataOptionDialog.java:1627)
at hdf.view.dialog.DataOptionDialog.createScalarDSContents(DataOptionDialog.java:1149)
at hdf.view.dialog.DataOptionDialog.open(DataOptionDialog.java:230)
at hdf.view.TreeView.DefaultTreeView.showDataContent(DefaultTreeView.java:2945)
at hdf.view.MetaDataView.DefaultDatasetMetaDataView$1.widgetSelected(DefaultDatasetMetaDataView.java:302)
at swt/org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
at swt/org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at swt/org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
at swt/org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at swt/org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
at swt/org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
at hdf.view.HDFView.runMainWindow(HDFView.java:438)
at hdf.view.HDFView$41.run(HDFView.java:2822)
at swt/org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:183)
at swt/org.eclipse.swt.widgets.Display.syncExec(Display.java:4785)
at hdf.view.HDFView.main(HDFView.java:2812)
Caused by: java.lang.Exception: Inappropriate type
at hdf.object.h5.H5ScalarDS.scalarDatasetCommonIO(H5ScalarDS.java:1021)
at hdf.object.h5.H5ScalarDS.read(H5ScalarDS.java:867)
... 17 more
Caused by: hdf.hdf5lib.exceptions.HDF5FunctionArgumentException: Inappropriate type
at [email protected]/hdf.hdf5lib.H5.H5Dread_short(Native Method)
at [email protected]/hdf.hdf5lib.H5.H5Dread(H5.java:2986)
at [email protected]/hdf.hdf5lib.H5.H5Dread(H5.java:2928)
at hdf.object.h5.H5ScalarDS.scalarDatasetCommonIO(H5ScalarDS.java:1010)
... 18 more
For opening as an image
Select
ImageView:
The bottom of the HDFView windows says this:
*** Loading image failed - dataset_float16 ***
The log shows this error (seems to be identical to the one above):
java.lang.Exception: failed to read scalar dataset: Inappropriate type
at hdf.object.h5.H5ScalarDS.read(H5ScalarDS.java:871)
at hdf.view.dialog.DataOptionDialog$PreviewNavigator.createPreviewImage(DataOptionDialog.java:1789)
at hdf.view.dialog.DataOptionDialog$PreviewNavigator.<init>(DataOptionDialog.java:1627)
at hdf.view.dialog.DataOptionDialog.createScalarDSContents(DataOptionDialog.java:1149)
at hdf.view.dialog.DataOptionDialog.open(DataOptionDialog.java:230)
at hdf.view.TreeView.DefaultTreeView.showDataContent(DefaultTreeView.java:2945)
at hdf.view.MetaDataView.DefaultDatasetMetaDataView$1.widgetSelected(DefaultDatasetMetaDataView.java:302)
at swt/org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
at swt/org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at swt/org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
at swt/org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at swt/org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
at swt/org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
at hdf.view.HDFView.runMainWindow(HDFView.java:438)
at hdf.view.HDFView$41.run(HDFView.java:2822)
at swt/org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:183)
at swt/org.eclipse.swt.widgets.Display.syncExec(Display.java:4785)
at hdf.view.HDFView.main(HDFView.java:2812)
Caused by: java.lang.Exception: Inappropriate type
at hdf.object.h5.H5ScalarDS.scalarDatasetCommonIO(H5ScalarDS.java:1021)
at hdf.object.h5.H5ScalarDS.read(H5ScalarDS.java:867)
... 17 more
Caused by: hdf.hdf5lib.exceptions.HDF5FunctionArgumentException: Inappropriate type
at [email protected]/hdf.hdf5lib.H5.H5Dread_short(Native Method)
at [email protected]/hdf.hdf5lib.H5.H5Dread(H5.java:2986)
at [email protected]/hdf.hdf5lib.H5.H5Dread(H5.java:2928)
at hdf.object.h5.H5ScalarDS.scalarDatasetCommonIO(H5ScalarDS.java:1010)
... 18 more
H5Dump
h5dump displays the contents correctly:
HDF5 "hdf5_test.h5" {
GROUP "/" {
DATASET "dataset_float16" {
DATATYPE 16-bit little-endian floating-point 16-bit precision
DATASPACE SIMPLE { ( 5, 5 ) / ( 5, 5 ) }
DATA {
(0,0): 1, 0, 0, 0, 0,
(1,0): 0, 1, 0, 0, 0,
(2,0): 0, 0, 1, 0, 0,
(3,0): 0, 0, 0, 1, 0,
(4,0): 0, 0, 0, 0, 1
}
}
DATASET "dataset_float32" {
DATATYPE H5T_IEEE_F32LE
DATASPACE SIMPLE { ( 5, 5 ) / ( 5, 5 ) }
DATA {
(0,0): 1, 0, 0, 0, 0,
(1,0): 0, 1, 0, 0, 0,
(2,0): 0, 0, 1, 0, 0,
(3,0): 0, 0, 0, 1, 0,
(4,0): 0, 0, 0, 0, 1
}
}
}
}
Tested on
- Platform: Windows 10
- HDFView Versions: 3.3.2 and 99.99.99