Releases: hdmf-dev/hdmf
Releases · hdmf-dev/hdmf
6.0.1
HDMF 6.0.1 (May 5, 2026)
Fixed
6.0.0
HDMF 6.0.0 (May 4, 2026)
Breaking changes
HDF5IOexpandableargument is now a list of data type names instead of a boolean. The default is("VectorData", "ElementIdentifiers"), so onlyDynamicTablecolumns and id are expandable out of the box — previously every dataset with a matching spec shape was expanded. Datasets of types outside this list that previously were expandable by default will now default to fixed-shape on-disk layout; add the relevant type toexpandableto restore prior behavior. Replaceexpandable=Truewith an explicit list (e.g.["VectorData", "ElementIdentifiers", "MyType"]) andexpandable=Falsewith[]; passingTrue/Falsenow raises aTypeError. @bendichter @rly #1439- Renamed the
spec_extkwarg tomatched_speconBuildManager.build,TypeMap.build, andObjectMapper.buildto reflect that it now records the matched subspec on the resulting builder via the newBuilder.matched_specslot. Removed the now-unusedspec_dtypekwarg fromObjectMapper.convert_dtype. Callers passing these kwargs will get aTypeError. @rly #1458
Enhancements
- Set sensible default chunk sizes (~4 MB, in the recommended 2-16 MB range for cloud-hosted files) when
chunks=True, replacing h5py's much smaller defaults. Added publicHDF5IO.compute_default_chunk_shape()so users can inspect or override the chunk shape that would be used. @bendichter #1440 - Added end-to-end support for
isodatetime/datetimedtype on datasets and attributes, including extension specs that refine an inherited type. Reading now parses stored ISO 8601 values back into Pythondatetime/dateobjects, andget_class-generated classes acceptdatetime/datevalues (scalar and array) for thedataarg, which is now derived from the spec's dtype and shape. Introduced a new write-onceBuilder.matched_specslot that records the subspec each builder was matched to, populated by both the read-path matcher and the write-path build sites inObjectMapper. @rly #1458
Fixed
- Added missing validation for dataset reference target types to ensure correct
RefSpec.target_typematching. @sejalpunwatkar #1429 - Fixed reading a
DynamicTablethat contains a named link to aVectorData(e.g.,MeaningsTable.target). The link target was being picked up as an extra column, causing a"Columns must be the same length"error when the target column's row count differed from the table's own row count. @rly #1445 - Fixed building typed datasets whose inc-site spec declares
dtype: isodatetimeordtype: datetime(e.g., aVectorDatacolumn refined as a date column), which previously raisedExpected unicode or ascii string, got <class 'datetime.date'>. @rly #1458
5.1.0
5.0.1
5.0.0
HDMF 5.0.0 (March 2, 2026)
Changed
- Refactored
TypeMap.load_namespacesto registerTypeSourceplaceholders for both source types and dependent types, enabling lazy class generation. AddedNamespaceCatalog.get_source_typesto get source types loaded for a namespace. RemovedTypeMap.container_typesproperty. ConvertedTypeSourceto a frozen dataclass. @rly #1372 - New spec resolution system: Instead of resolving includes during spec loading, resolution now happens after all specs are loaded via
NamespaceCatalog.resolve_all_specs(). @rly #1312, #1392- New methods:
BaseStorageSpec.resolve_inc_spec()replaces the oldBaseStorageSpec.resolve_spec()method - Resolution tracking: New properties
BaseStorageSpec.resolvedandBaseStorageSpec.inc_spec_resolvedtrack resolution state - Cross-namespace resolution: The system can now resolve specs that include types from different namespaces
dtype,shape,dims,value, anddefault_valueinDatasetSpecandAttributeSpecare now inherited and validated from the parent data type spec
- New methods:
- If
dimsare not provided in aDatasetSpecorAttributeSpec, butshapeis provided,dimswill be set to a list of dummy dimension names, e.g., "dim_0", "dim_1", etc. @rly #1312 - Deprecated
BaseStorageSpec.add_attribute,GroupSpec.add_group,GroupSpec.add_dataset, andGroupSpec.add_link. Useset_attribute,set_group,set_dataset, andset_linkinstead. @rly #1333 - Deprecated unused
BaseStorageSpec.get_data_type_specandBaseStorageSpec.get_namespace_spec. @rly #1333 - Moved
test,docs, andmin-reqsfrom[project.optional-dependencies]to[dependency-groups](PEP 735).min-reqswas renamed totest-min-deps. @rly #1395 - Removed
test-min-depsdependency group and replaced it withuv pip install --resolution lowest-directin tox, making the project compatible with uv. @h-mayorquin #1408 - Changed
get_data_shapeto checkshapebeforemaxshape, so that objects with both attributes (e.g., h5py datasets) return their actual shape rather than their maximum shape. @rly #1180
Removed
- Dropped support for Python 3.9. The minimum supported version is now Python 3.10. @rly #xxx
- Replaced
typinglibrary calls with Python 3.10+ built-in type syntax (X | Y,X | None,type[X],tuple[X], etc.). @rly #xxx - Removed unused and undocumented
hdmf.monitormodule. @rly #1327 - Removed deprecated
Data.set_data_iousage andHERDManagermethods. @rly #1328 - Removed deprecated
HDF5IO.copy_filemethod. Use theHDF5IO.exportor theh5py.File.copymethod instead. @stephprince #1332 - Removed deprecated
extensionskwarg forget_type_mapfunction. @stephprince #1332 - Removed unused and unnecessary
NamespaceToBuilderHelper.get_source_pathmethod. @rly #1392 - Deprecated
TypeMap.copy_mappersmethod. UseTypeMap.mergeinstead with the argumentns_catalog=Falseto copy only mappers without namespaces. @rly #1372
Added
- Added
expandableparameter toHDF5IO.write(defaultTrue) that makes all non-scalar datasets expandable by settingmaxshapebased on the matching shape defined in the spec. Passexpandable=Falseto disable this behavior. @rly #1180 - Added support for HDMF Common Schema 1.9.0.
- Added a check when setting or adding data to a
DynamicTableRegionor setting thetableattribute of aDynamicTableRegion
that the data values are in bounds of the linked table. This can be turned off for
DynamicTableRegion.__init__using the keyword argumentvalidate_data=False. @rly #1168 - Added warning when
data_type_defanddata_type_incare the same in a spec. @rly #1312 - Added abstract methods
HDMFIO.load_namespacesandHDMFIO.load_namespaces_io. @rly #1299
Enhancements
- Reduced memory allocations in
DynamicTable.add_column(..., index=True)ragged column flattening by usingnp.concatenateinstead oflist(itertools.chain.from_iterable(...))when all entries are compatible numpy arrays. @h-mayorquin #1403
Fixed
- Fixed
register_container_typeoverwriting the reverse class-to-namespace map when an extension callsinclude_namespace("core"), which caused core types to be stamped with the extension's namespace. @h-mayorquin, @rly #1407 - Fixed
VectorData.extend()silently corrupting 1D numpy arrays by reshaping them into 2D matrices. Replacednp.vstackwithnp.concatenateinextend_data. @h-mayorquin #1405 - Fixed validation of Python native
floatandintvalues againstfloat64andint64specs. Pythonfloatis 64-bit but was mapped tofloat32, and Pythonintis 64-bit (or larger) but was mapped toint32. @rly #1410 - Fixed a broken test and refactored
VectorIndex.get. @rly, @mavaylon1 #1293 - Fixed missing timezone validation for
isodatetimevalues inAttributeSpecandDatasetSpec. @sejalpunwatkar #1399
Latest (updated on 2026-03-03 00:03 UTC)
latest Prepare 5.0.0 release (#1402)
4.3.1
HDMF 4.3.1 (January 28, 2026)
Added
- Added
_repr_html_method toLabelledDictfor interactive HTML display in notebooks. @h-mayorquin #1381
Changed
Fixed
HDMF 4.3.0 (January 22, 2026)
Added
- Added support for Python 3.14. @bendichter #1366
Changed
- Added a collapsible "columns" section to the
DynamicTableHTML representation that displays column descriptions, making it easier to inspect column metadata in notebooks. @h-mayorquin #1369 - Added ability to create specs with circular dependencies, e.g., Type A contains Type B, and Type B extends Type A, or Type A contains a reference to Type A (self-reference). @rly #1374
Fixed
4.2.0
Added
- Added an argument
copytoget_type_mapto control whether a copy of the type map is returned or not.
Ifcopy=False, the returned type map will be a direct reference to the global type map. @rly
#1352
Changed
- Changed HTML representation to display the
data_typefor nested containers, showing the type in parentheses next to the name (e.g.,MyTimeSeries (TimeSeries)). @h-mayorquin #1355 - Changed how to call
BuildManager.build,TypeMap.build, andObjectMapper.buildwhen exporting. Theexportargument is no longer accepted byTypeMap.buildandObjectMapper.build;BuildManager.buildstill accepts theexportargument but now uses it to set an internal flag instead of passing it through the call chain. @rly #1358 - Changed HTML representation of
MultiContainerInterfaceto flatten the grouping attribute when only
one grouping is defined (len(__clsconf__) == 1), removing the redundant nesting level since users
can access children directly viacontainer["name"]. @h-mayorquin #1354
Fixed
4.1.2
4.1.1
Fixed
- Fixed copying of
TypeMapandTypeConfigurator. Previously, the same globalTypeConfiguratorinstance was used in all copies of aTypeMap. @rly #1302 - Fixed
get_data_shapeto useData.data.shapeinstead ofData.shape, which may be overridden by subclasses. @rly #1311 - Fixed HTML representation of datasets when reading from LINDI. @bendichter #1335
- Fixed bug where compound datatypes were disregarding custom data I/O options with the zarr backend. @pauladkisson #1297
Added
- Added a check for a compound datatype that is not defined in the schema or spec. This is currently not supported. @mavaylon1 #1276
- Added checks when loading a namespace for link specification conflicts between extension and core schemas. @stephprince #1309
- Added GitHub Actions workflow that tests compatibility with NWB extensions from the NWB extensions catalog. @rly #1319
- Added unit tests for hdmf.common module to improve code coverage. @stephprince #1330
Changed
- Changed error for attempting to overwrite an existing specification into a warning that any specification redefinitions will be ignored. @stephprince #1309
- Deprecated the experimental
HERDManager.link_resourcesandHERDManager.link_external_resourcesand added the propertyHERDManager.external_resourcesto support downstream API function overloading. @mavaylon1, @rly #1292