NeurodataWithoutBorders / matnwb

A Matlab interface for reading and writing NWB files
BSD 2-Clause "Simplified" License
49 stars 32 forks source link

[Bug]: Icephys tutorial causes nwbinspector error #519

Closed lawrence-mbf closed 11 months ago

lawrence-mbf commented 11 months ago

What happened?

Ideally, all tutorials in MatNWB should pass the NWB Inspector.

Steps to Reproduce

When run on the file produced by `tutorials/icephys.mlx` an error is thrown.

The run call being `nwbinspector .\test_new_icephys.nwb`

Error Message

(nwb-inspector) PS C:\code\matnwb> nwbinspector.exe .\test_new_icephys.nwb
C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\spec\namespace.py:531: UserWarning: Ignoring cached namespace 'hdmf-common' version 1.5.0 because version 1.7.0 is already loaded.
  warn("Ignoring cached namespace '%s' version %s because version %s is already loaded."
C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\spec\namespace.py:531: UserWarning: Ignoring cached namespace 'hdmf-experimental' version 0.1.0 because version 0.4.0 is already loaded.
  warn("Ignoring cached namespace '%s' version %s because version %s is already loaded."
Traceback (most recent call last):
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1256, in construct
    obj = self.__new_container__(cls, builder.source, parent, builder.attributes.get(self.__spec.id_key()),
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1269, in __new_container__
    obj.__init__(**kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\pynwb\icephys.py", line 507, in __init__
    super().__init__(**kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\common\alignedtable.py", line 72, in __init__
    self.id.append(i)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\container.py", line 784, in append
    self.__data = append_data(self.__data, arg)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\data_utils.py", line 24, in append_data
    data.resize(shape)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\h5py\_hl\dataset.py", line 666, in resize
    raise TypeError("Only chunked datasets can be resized")
TypeError: Only chunked datasets can be resized

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\Scripts\nwbinspector.exe\__main__.py", line 7, in <module>
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\nwbinspector\nwbinspector.py", line 271, in inspect_all_cli
    messages = list(
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\nwbinspector\nwbinspector.py", line 403, in inspect_all
    nwbfile = robust_s3_read(io.read)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\nwbinspector\utils.py", line 173, in robust_s3_read
    raise exc
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\nwbinspector\utils.py", line 168, in robust_s3_read
    return command(*command_args, **command_kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\pynwb\__init__.py", line 304, in read
    file = super().read(**kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\backends\hdf5\h5tools.py", line 477, in read
    return super().read(**kwargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\backends\io.py", line 60, in read
    container = self.__manager.construct(f_builder)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\manager.py", line 284, in construct
    result = self.__type_map.construct(builder, self, None)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\manager.py", line 795, in construct
    return obj_mapper.construct(builder, build_manager, parent)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1226, in construct
    subspecs = self.__get_subspec_values(builder, self.spec, manager)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1155, in __get_subspec_values
    self.__get_sub_builders(groups, spec.groups, manager, ret)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1206, in __get_sub_builders
    ret.update(self.__get_subspec_values(sub_builder, subspec, manager))
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1155, in __get_subspec_values
    self.__get_sub_builders(groups, spec.groups, manager, ret)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1206, in __get_sub_builders
    ret.update(self.__get_subspec_values(sub_builder, subspec, manager))
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1155, in __get_subspec_values
    self.__get_sub_builders(groups, spec.groups, manager, ret)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1208, in __get_sub_builders
    ret[subspec] = manager.construct(sub_builder)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\manager.py", line 280, in construct
    result = self.__type_map.construct(builder, self, parent)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\manager.py", line 795, in construct
    return obj_mapper.construct(builder, build_manager, parent)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\utils.py", line 644, in func_call
    return func(args[0], **pargs)
  File "C:\Users\lawrence\AppData\Local\miniconda3\envs\nwb-inspector\lib\site-packages\hdmf\build\objectmapper.py", line 1260, in construct
    raise ConstructError(builder, msg) from ex
hdmf.build.errors.ConstructError: (root/general/intracellular_ephys/intracellular_recordings GroupBuilder {'attributes': {'categories': array(['electrodes', 'stimiuli', 'responses', 'recording_lab_data'],
      dtype=object), 'colnames': array(['recordings_tag'], dtype=object), 'description': 'A table to group together a stimulus and response from a single electrode and a single simultaneous recording and for storing metadata about the intracellular recording.', 'namespace': 'core', 'neurodata_type': 'IntracellularRecordingsTable', 'object_id': 'c986b9ee-da96-4ae8-9c97-88a2d949a8f2'}, 'groups': {'electrodes': root/general/intracellular_ephys/intracellular_recordings/electrodes GroupBuilder {'attributes': {'colnames': array(['electrode', 'voltage_threshold'], dtype=object), 'description': 'Table for storing intracellular electrode related metadata.', 'namespace': 'core', 'neurodata_type': 'IntracellularElectrodesTable', 'object_id': 'a7cc6d5f-8e14-462c-9589-faff8ccd7e03'}, 'groups': {}, 'datasets': {'electrode': root/general/intracellular_ephys/intracellular_recordings/electrodes/electrode DatasetBuilder {'attributes': {'description': 'Column for storing the reference to the intracellular electrode', 'namespace': 'hdmf-common', 'neurodata_type': 'VectorData', 'object_id': 'ecbb5287-613d-4d82-83fd-379b1f6adfc3'}, 'data': <hdmf.backends.hdf5.h5_utils.BuilderH5ReferenceDataset object at 0x000002638E7E6110>}, 'id': root/general/intracellular_ephys/intracellular_recordings/electrodes/id DatasetBuilder {'attributes': {'namespace': 'hdmf-common', 'neurodata_type': 'ElementIdentifiers', 'object_id': 'f7b73811-f428-4ce2-af13-c70ab29b8a06'}, 'data': <Closed HDF5 dataset>}, 'voltage_threshold': root/general/intracellular_ephys/intracellular_recordings/electrodes/voltage_threshold DatasetBuilder {'attributes': {'description': 'Just an example column on the electrodes category table', 'namespace': 'hdmf-common', 'neurodata_type': 'VectorData', 'object_id': 'ae7b2fda-bd01-4b53-9c2f-5aefe63e0380'}, 'data': <Closed HDF5 dataset>}}, 'links': {}}, 'recording_lab_data': root/general/intracellular_ephys/intracellular_recordings/recording_lab_data GroupBuilder {'attributes': {'colnames': array(['location'], dtype=object), 'description': 'category table for lab-specific recording metadata', 'namespace': 'hdmf-common', 'neurodata_type': 'DynamicTable', 'object_id': '2099f2a7-9fd1-417c-b253-1db399a3c63a'}, 'groups': {}, 'datasets': {'id': root/general/intracellular_ephys/intracellular_recordings/recording_lab_data/id DatasetBuilder {'attributes': {'namespace': 'hdmf-common', 'neurodata_type': 'ElementIdentifiers', 'object_id': '0cb800f9-45e9-4a16-ab07-567fdaed4d95'}, 'data': <Closed HDF5 dataset>}, 'location': root/general/intracellular_ephys/intracellular_recordings/recording_lab_data/location DatasetBuilder {'attributes': {'description': 'Recording location in Middle Earth', 'namespace': 'hdmf-common', 'neurodata_type': 'VectorData', 'object_id': '81f95a95-d096-4487-b54c-030b6cbf2f2f'}, 'data': <StrDataset for Closed HDF5 dataset>}}, 'links': {}}, 'responses': root/general/intracellular_ephys/intracellular_recordings/responses GroupBuilder {'attributes': {'colnames': array(['response'], dtype=object), 'description': 'Table for storing intracellular response related metadata.', 'namespace': 'core', 'neurodata_type': 'IntracellularResponsesTable', 'object_id': 'e25e18fc-796a-4cdc-9fe5-d99697439f56'}, 'groups': {}, 'datasets': {'id': root/general/intracellular_ephys/intracellular_recordings/responses/id DatasetBuilder {'attributes': {'namespace': 'hdmf-common', 'neurodata_type': 'ElementIdentifiers', 'object_id': 'e759473c-36a7-409f-96bb-8e3541a7bf2b'}, 'data': <Closed HDF5 dataset>}, 'response': root/general/intracellular_ephys/intracellular_recordings/responses/response DatasetBuilder {'attributes': {'description': 'Column storing the reference to the recorded response for the recording (rows)', 'namespace': 'core', 'neurodata_type': 'TimeSeriesReferenceVectorData', 'object_id': 'd7eb7bf8-2fce-4f6c-937d-bfb1f5d9d69c'}, 'data': <hdmf.backends.hdf5.h5_utils.BuilderH5TableDataset object at 0x000002638E7E66E0>}}, 'links': {}}, 'stimuli': root/general/intracellular_ephys/intracellular_recordings/stimuli GroupBuilder {'attributes': {'colnames': array(['stimulus'], dtype=object), 'description': 'Table for storing intracellular stimulus related metadata.', 'namespace': 'core', 'neurodata_type': 'IntracellularStimuliTable', 'object_id': '97af7739-c6e5-4bd8-a8d9-fe97e37be801'}, 'groups': {}, 'datasets': {'id': root/general/intracellular_ephys/intracellular_recordings/stimuli/id DatasetBuilder {'attributes': {'namespace': 'hdmf-common', 'neurodata_type': 'ElementIdentifiers', 'object_id': '9ae1e7db-3bd3-42fa-ac95-5d4bf645aa4c'}, 'data': <Closed HDF5 dataset>}, 'stimulus': root/general/intracellular_ephys/intracellular_recordings/stimuli/stimulus DatasetBuilder {'attributes': {'description': 'Column storing the reference to the recorded stimulus for the recording (rows)', 'namespace': 'core', 'neurodata_type': 'TimeSeriesReferenceVectorData', 'object_id': 'e3647b32-7cd7-400b-984a-4596ac37bacb'}, 'data': <hdmf.backends.hdf5.h5_utils.BuilderH5TableDataset object at 0x000002638E7E63E0>}}, 'links': {}}}, 'datasets': {'id': root/general/intracellular_ephys/intracellular_recordings/id DatasetBuilder {'attributes': {'namespace': 'hdmf-common', 'neurodata_type': 'ElementIdentifiers', 'object_id': 'd19533ff-a05d-400f-ab08-69ed0538b95d'}, 'data': <Closed HDF5 dataset>}, 'recordings_tag': root/general/intracellular_ephys/intracellular_recordings/recordings_tag DatasetBuilder {'attributes': {'description': 'description', 'namespace': 'hdmf-common', 'neurodata_type': 'VectorData', 'object_id': '306e1194-0e44-428c-8422-6b9821f8ebe1'}, 'data': <Closed HDF5 dataset>}}, 'links': {}}, 'Could not construct IntracellularRecordingsTable object due to: Only chunked datasets can be resized')

Operating System

Windows

Matlab Version

R2018b

Code of Conduct

lawrence-mbf commented 11 months ago

The cause of this error can be resolved by fixing the icephys.mlx live script. However, the redraw call on a read should be investigated in the hdmf side.