- Added documentation for
ExternalImageto the images tutorial. @h-mayorquin #2159 - Fixed broken and redirecting links in documentation. @bendichter #2165
- Added
EventsTableexamples to the NWB file basics and behavior tutorials. @rly #2156
- Added support for NWB Schema 2.10.0 (NWBEP001), which introduces the
EventsTable,TimestampVectorData, andDurationVectorDataneurodata types and a neweventsgroup onNWBFilefor storingEventsTableinstances. UseNWBFile.add_events_table()to add anEventsTableandNWBFile.get_events_table()to retrieve one. NWB Schema 2.10.0 also incorporates hdmf-common-schema 1.9.0, which adds theMeaningsTableneurodata type (re-exported viahdmf.common) and support for attaching one or moreMeaningsTableinstances to aDynamicTableto document the meanings of values in a column. See the NWB Schema release notes and the hdmf-common-schema release notes for the full list of changes. @rly #2156 - Added support for HERD (HDMF External Resources Data Structure) as the
external_resourcesfield onNWBFile, enabling users to associate external resource annotations (e.g., ontology term mappings) with their NWB files.link_resourcesandget_external_resourcesare inherited fromHERDManagerin hdmf. @mavaylon1, @rly #2111 - Added
get_starting_time()andget_duration()methods toTimeSeriesto get the starting time and duration of the time series. @h-mayorquin #2146 - Added
get_starting_time()andget_duration()methods toTimeIntervalsto get the earliest start time and total duration (span from earliest start to latest stop) of all intervals. @h-mayorquin #2146 - Added
get_starting_time()andget_duration()methods toUnitsto get the earliest spike time and total duration (span from earliest to latest spike) across all units. @h-mayorquin #2164
- Fixed invalid CSS properties in documentation assistant toggle that prevented proper positioning on displays ≥1400px wide. @rly #2151
- Fixed
TimeSeries.get_timestamps()to handle numpy array timestamps when they are set. @pauladkisson #2181
- Added Python 3.14 support. @bendichter, @rly #2168
- Updated HDMF dependency to >=6.0.1, <7. @rly #2171
- Deprecated Python 3.9 support. (EOL was Oct 31, 2025) @bendichter #2141
- Deprecated
BehavioralEventsandAnnotationSeriesin favor of using anEventsTableinNWBFile.events. Creating a new instance of either type now emits aUserWarning; reading existing files containing these types continues to work without warnings. @rly #2156
- Added 'target_tables' kwarg to DynamicTable subclasses to allow classes that extend DynamicTable subclasses to specify the mapping of DynamicTableRegion columns to the target tables. @rly, @stephprince #2096
- Fixed incorrect warning for path not ending in
.nwbwhen no path argument was provided. @t-b #2130 - Fixed inability to read files created with extensions that had schema conflicts with the DeviceModel type introduced in NWB Schema 2.9.0. @stephprince #2132
- Fixed issue with setting
neurodata_type_incwhen reading NWB files with cached schema versions less than 2.2.0. @rly #2135 - Fixed import structure test. @rly #2136
- Changed UI of documentation assistant to be an accordion that is always visible. @bendichter #2124
- Updated minimum HDMF version to 4.1.2 and updated tests accordingly. @rly #2144
- Fixed parsing of the nwb_version attribute which followed the previous suggestion to have a
NWB-prefix. @t-b #2118 - Fixed a performance regression introduced in pynwb 2.8.0 that affected reading NWB files with a large number of objects or fields of objects. @rly #2121
- Fixed
load_type_config,unload_type_config, andget_loaded_type_configacting on a copy of the global type map instead of the global type map itself. @rly #2121
- 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 #2121 - Deprecated calling
get_type_mapwith theextensionsargument. Callload_namespaceson the returnedTypeMapinstead. @rly #2121
- Fixed reading and exporting of files written with NWB Schema < 2.9.0 that contained a reference to the electrodes table. @rly #2112
- Updated tests to skip streaming tests gracefully if offline. @rly #2113
- Added check in
PlaneSegmentationconstructor for required columns. @rly #2102
- Removed unused functions
prepend_stringand_not_parentincore.py,_not_parentinfile.py, andNWBBaseTypeMapper.get_nwb_fileinio/core.py@oruebel #2036
- Added support for NWB Schema 2.9.0.
- Added
BaseImageandExternalImageas new neurodata types. The first so bothImageandExternalImagecan inherit from it. The second to store external images. @rly #2079 - Added new
ElectrodesTableneurodata type. @mavaylon1 #1890 - Formally defined and renamed
ElectrodeTableas theElectrodesTableneurodata type. @mavaylon1 #1890 - Formally defined bands within
DecompositionSeriesas the neurodatatypeFrequencyBandsTable. @mavaylon1 @rly #2063 - Added new
DeviceModelneurodata type to store device model information. @rly #2088 - Deprecated
Device.model_name,Device.model_number, andDevice.manufacturerfields in favor ofDeviceModel. @rly #2088 - Added support for 2D
EventDetection.source_indexto indicate [time_index, channel_index]. @stephprince #2091 - Made
EventDetection.timesoptional. @stephprince #2091 - Deprecated
EventDetection.times. @stephprince #2101
- Added
- Automatically add timezone information to timestamps reference time if no timezone information is specified. @stephprince #2056
- Added option to disable typemap caching and updated type map cache location. @stephprince #2057
- Added dictionary-like operations directly on
ProcessingModuleobjects (e.g.,len(processing_module)). @bendichter #2020 - When an external file is detected when initializing an ImageSeries and no format is provided, automatically set format to "external" instead of raising an error. @stephprince #2060
- Added mask_type option to
mock_PlaneSegmentation. @pauladkisson #2067 - Improved the documentation of the
spike_timesin the Units table methods @h-mayorquin #2085 - Removed core namespace warning unless cached version is newer. @stephprince #2077
- Bumped minimum HDMF version to 4.1.0. @stephprince #2077
- Fixed
add_data_interfacefunctionality that was mistakenly removed in PyNWB 3.0. @stephprince #2052 - Fixed bug in
IntracellularRecordingsTable.__init__wereIntracellularResponsesTablewasn't created correctly when custom category tables were provided @oruebel. #2031 - Fixed shape check in
SpikeEventSeries.__init__to supportAbstractDataChunkIteratorfor timestamps/data. @oruebel #2031 - Added unit tests to enhance coverage of
core.py,image.py,spec.py,icephys.py,epoch.pyand others. @oruebel #2031 - Fixed missing
IndexSeries.indexed_images. @rly #2074 - Fixed missing
__nwbfields__and_fieldsnameforNWBDataand its subclasses. @rly #2082 - Fixed caching of the type map when using HDMF 4.1.0. @rly #2087
- Removed use of complex numbers in scratch tutorial because of incompatibilities with HDMF 4.1.0. @stephprince #2090
- Made
ImagingPlane.descriptionoptional to conform with the NWB Schema. @rly #2051
- Added NWB AI assistant to the home page of the documentation. @magland #2076
- The validation methods have been updated with multiple breaking changes. @stephprince #1911
- The behavior of
pynwb.validate(io=...)now matches the behavior ofpynwb.validate(path=...). In previous pynwb versions,pynwb.validate(io=...)did not use the cached namespaces during validation. To obtain the same behavior as in previous versions, you can update the function call topynwb.validate(io=..., use_cached_namespaces=False) pynwb.validatewill return only a list of validation errors instead of a tuple: (list of validation_errors, status code)- the
pynwb.validate(path=...)argument has been added as a replacement forpynwb.validate(paths=[...]), which will be deprecated in a future major release #2024 - The validate module has been renamed to
validation.py. The validate method can be imported usingimport pynwb; pynwb.validateorfrom pynwb import validate
- The behavior of
- The following deprecated classes will now raise errors when creating new instances of these classes:
ClusteringWaveforms,Clustering,SweepTable. Reading files using these data types will continue to be supported. - The following methods and arguments have been deprecated:
ProcessingModule.add_containerandProcessingModule.add_data_interfaceare replaced byProcessingModule.addProcessingModule.get_containerandProcessingModule.get_data_interfaceare replaced byProcessingModule.getScratchData.notesis deprecated. UseScratchData.descriptioninstead.NWBFile.ic_electrodesis deprecated. UseNWBFile.icephys_electrodesinstead.NWBFile.ec_electrodesis deprecated. UseNWBFile.electrodesinstead.NWBFile.icephys_filteringis deprecated. UseIntracellularElectrode.filteringinstead.NWBFile.modulesis deprecated. UseNWBFile.processinginstead.ImageSeries.formatis fixed to 'external' if an external file is provided.ImageSeries.bits_per_pixelis deprecated.ImagingPlane.manifold,ImagingPlane.conversionandImagingPlane.unitare deprecated. UseImagingPlane.origin_coordsandImagingPlane.grid_spacinginstead.IndexSeries.unitis fixed to "N\A".IndexSeries.indexed_timeseriesis deprecated. UseIndexSeries.indexed_imagesinstead.
- The following deprecated methods have been removed:
NWBFile.add_ic_electrodeis removed. UseNWBFile.add_icephys_electrodeinstead.NWBFile.create_ic_electrodeis removed. UseNWBFile.create_icephys_electrodeinstead.NWBFile.get_ic_electrodeis removed. UseNWBFile.get_icephys_electrodeinstead.pynwb._get_resourcesis removed.
- Added
__all__to modules. @bendichter #2021 - Added
pynwb.read_nwbconvenience method to simplify reading an NWBFile written with any backend @h-mayorquin #1994 - Constrained
hdmf<5to prevent future compatibility issues. #2040
- Made distance, orientation, and field_of_view optional in OpticalSeries to match schema @bendichter #2023
- Added support for NWB schema 2.8.0. @rly #2001
- Removed
SpatialSeries.boundsfield that was not functional. This will be fixed in a future release. @rly #1907, #1996 - Added support for
NWBFile.was_generated_byfield. @stephprince #1924 - Added support for
model_number,model_name, andserial_numberfields toDevice. @stephprince #1997 - Deprecated
EventWaveformneurodata type. @rly #1940 - Deprecated
ImageMaskSeriesneurodata type. @rly #1941
- Removed
- Added enhancements to the validation CLI. @stephprince #1911
- Added an entry point for the validation module. You can now use
pynwb-validate "file.nwb". - Added the
--json-outpath-pathCLI argument to output validation results in a machine readable format.
- Added an entry point for the validation module. You can now use
- Removed python 3.8 support, added python 3.13 support. @stephprince #2007
- Added warnings when using positional arguments in
Containerconstructor methods. Positional arguments will raise errors in the next major release. @stephprince #1972 mock_ElectricalSeries. Make number of electrodes between data and electrode region agree when explicitly passing data @h-mayorquin #2019
- Updated
SpikeEventSeries,DecompositionSeries, andFilteredEphysexamples. @stephprince #2012 - Replaced deprecated
scipy.misc.facedataset in the images tutorial with another example. @stephprince #2016 - Removed Allen Brain Observatory example which was unnecessary and difficult to maintain. @rly #2026
- Added
NWBHDF5IO.read_nwbconvenience method to simplify reading an NWB file. @h-mayorquin #1979 - Removed unused references to region references and builders in preparation for changes in HDMF 4.0. @rly #1991
- Made gain an optional argument for PatchClampSeries to match the schema. @stephprince #1975
- Added warning when writing files with
NWBHDF5IOwithout the.nwbextension. @stephprince #1978 - Cache global type map to speed import 3X. @sneakers-the-rat #1931
- Fixed bug in how
ElectrodeGroup.__init__validates itspositionargument. @oruebel #1770 - Changed
SpatialSeries.reference_framefrom required to optional as specified in the schema. @rly #1986
- Added documentation example for
SpikeEventSeries. @stephprince #1983 - Added documentation example for
AnnotationSeries. @stephprince #1989 - Added documentation example for
DecompositionSeries. @stephprince #1981
- Added support for numpy 2.0. @mavaylon1 #1956
- Make
get_cached_namespaces_to_validatea public function @stephprince #1961
- Added pre-release pull request instructions to release process documentation @stephprince #1928
- Added section on how to use the
familydriver inh5pyfor splitting data across multiple files @oruebel #1949
- Fixed
can_readmethod to return False if no nwbfile version can be found @stephprince #1934 - Changed
epoch_tagsto be a NWBFile property instead of constructor argument. @stephprince #1935 - Exposed option to not cache the spec in
NWBHDF5IO.export. @rly #1959
- Simplified the introduction to NWB tutorial. @rly #1914
- Simplified the ecephys and ophys tutorials. #1915
- Add comments to
src/pynwb/io/file.pyto improve developer documentation. @rly #1925
- Fixed use of
channel_conversioninTimeSeriesget_data_in_units. @rohanshah 1923
- Set rate default value inside
mock_ElectricalSeriesto avoid having to setrate=Noneexplicitly when passing timestamps. @h-mayorquin #1894 - Integrate validation through the
TypeConfigurator. @mavaylon1 #1829 - Exposed
aws_regiontoNWBHDF5IO. @rly #1903
- Revert changes in PyNWB 2.7.0 that allow datetimes without a timezone and without a time while issues with DANDI upload of NWB files missing timezone are resolved. @rly #1908
- Added
boundsfield toSpatialSeriesto set optional boundary range (min, max) for each dimension of data. @mavaylon1 #1869 - Added support for NWB schema 2.7.0. See 2.7.0 release notes for details
- Deprecated
ImagingRetinotopyneurodata type. @rly #1813 - Modified
OptogeneticSeriesto allow 2D data, primarily in extensions ofOptogeneticSeries. @rly #1812 - Support
stimulus_templateas optional predefined column inIntracellularStimuliTable. @stephprince #1815 - Support
NWBDataInterfaceandDynamicTableinNWBFile.stimulus. @rly #1842 - Added support for python 3.12 and upgraded dependency versions. This also includes infrastructure updates for developers. @mavaylon1 #1853
- Added
grid_spacing,grid_spacing_unit,origin_coords,origin_coords_unittoImagingPlanefields. @h-mayorquin #1892 - Added
mock_Unitsfor generating Units tables. @h-mayorquin #1875 and #1883 - Allow datetimes without a timezone and without a time. @rly #1886
- No longer automatically set the timezone to the local timezone when not provided. #1886
- Updated testing to not install in editable mode and not run
coverageby default. #1897
- Fix bug with reading file with linked
TimeSeriesReferenceVectorData@rly #1865 - Fix bug where extra keyword arguments could not be passed to
NWBFile.add_{x}_columnfor use in customVectorDataclasses. @rly #1861
- For
NWBHDF5IO(), change the default of argload_namespacesfromFalsetoTrue. @bendichter #1748 - Add
NWBHDF5IO.can_read(). @bendichter #1703 - Add
pynwb.get_nwbfile_version(). @bendichter #1703 - Fix usage of the
validatefunction in thepynwb.testing.testh5ioclasses and cache the spec by default in those classes. @rly #1782 - Updated timeseries data checks to warn instead of error when reading invalid files. @stephprince #1793 and #1809
- Expose the offset, conversion and channel conversion parameters in
mock_ElectricalSeries. @h-mayorquin #1796 - Expose
starting_timeinmock_ElectricalSeries. @h-mayorquin #1805 - Enhance
get_data_in_units()to work with objects that have achannel_conversionattribute like theElectricalSeries. @h-mayorquin #1806 - Refactor validation CLI tests to use
{sys.executable} -m coverageto use the same Python version and run correctly on Debian systems. @yarikoptic #1811 - Fixed tests to address newly caught validation errors. @rly #1839
- Fix bug where namespaces were loaded in "w-" mode. @h-mayorquin #1795
- Fix bug where pynwb version was reported as "unknown" to readthedocs @stephprince #1810
- Fixed bug to allow linking of
TimeSeries.databy setting thedataconstructor argument to anotherTimeSeries. @oruebel #1766 - Fix recursion error in html representation generation in jupyter notebooks. @stephprince #1831
- Add RemFile to streaming tutorial. @bendichter #1761
- Fix typos and improve clarify throughout tutorials. @zm711 #1825
- Fix internal links in docstrings and tutorials. @stephprince #1827
- Add Zarr IO tutorial @bendichter #1834
- Added
TimeSeries.get_timestamps(). @bendichter #1741 - Added
TimeSeries.get_data_in_units(). @bendichter #1745 - Updated
ExternalResourcesname change toHERD, along with HDMF 3.9.0 being the new minimum. @mavaylon1 #1754
- Updated streaming tutorial to ensure code is run on tests and clarify text. @bendichter #1760 @oruebel #1762
- Fixed minor documentation build warnings and broken links to
basic_trialstutorial @oruebel #1762
- Stop running validation tests as part of integration tests. They cause issues in CI and can be run separately. @rly #1740
- Added support for
ExternalResources. @mavaylon1 #1684 - Updated links for making a release. @mavaylon1 #1720
- Fixed sphinx-gallery setting to correctly display index in the docs with sphinx-gallery>=0.11. @oruebel #1733
- Added thumbnail for Optogentics tutorial. @oruebel #1729
- Updated and fixed errors in tutorials. @bendichter @oruebel
- Remove unused, deprecated
codecovpackage from dev installation requirements. @rly #1688 - Remove references to discontinued
requires.ioservice in documentation. @rly #1690 - Update
requirements-doc.txtto resolve Python 3.7 incompatibility. @rly #1694 - Fixed test battery to show and check for warnings appropriately. @rly #1698
- Fixed typos and added codespell GitHub action to check spelling in the future. @yarikoptic #1648
- Added
OnePhotonSeriesto calcium imaging tutorial. @bendichter #1658 - Add tutorial for optogenetics. @bendichter #1657
- Update testing of gallery examples and disable testing of the allensdk tutorial. #1680
- Updated tutorials to follow best practices. @bendichter #1656
- Fixed bug when initializing
OnePhotonSerieswith no value forbinning. @bendichter #1660 - Fixed bug in
NWBHDF5IO.nwb_versionproperty to support files written by third-party software with a fixed-lengthnwb_versionattribute. @oruebel #1669 - Fixed search bar and missing jquery in ReadTheDocs documentation. @rly #1671
- Requires HDMF 3.5.4 which includes bug fixes. @rly #1672
- Fixed issue with deprecated pkg_resources. @rly #1678
- Fixed an issue where NWB files with version "2.0b" could not be read. @rly #1651
- Added support for NWB Schema 2.6.0. @mavaylon1 #1636
- Added a class and tests for the
OnePhotonSeriesnew in NWB v2.6.0. @CodyCBakerPhD #1593(see also NWB Schema #523 Subject.agecan be input as atimedeltatype. @bendichter #1590- Added
Subject.age__referencefield. @bendichter (#1540) IntracellularRecordingsTable.add_recording: theelectrodearg is now optional, and is automatically populated from the stimulus or response. #1597- Added module
pynwb.testing.mock.icephysand corresponding tests. @bendichter 1595 - Removed redundant object mapper code. @rly #1600
- Fixed pending deprecations and issues in CI. @rly #1594
- Added
NWBHDF5IO.nwb_versionproperty to get the NWB version from an NWB HDF5 file @oruebel #1612 - Updated
NWBHDF5IO.readto check NWB version before read and raise more informative error if an unsupported version is found @oruebel #1612 - Added the
driverkeyword argument to thepynwb.validatefunction as well as the corresponding namespace caching. @CodyCBakerPhD #1588 - Updated HDMF requirement to version 3.5.1. #1611
- Increased the stacklevel of the warning from
_add_missing_timezoneinpynwb.fileto make identification of which datetime field is missing a timezone easier. @CodyCBakerPhD #1641
- Adjusted ecephys tutorial to create fake data with proper dimensions @bendichter #1581
- Refactored testing documentation, including addition of section on
pynwb.testing.mocksubmodule. @bendichter #1583 - Updated round trip tutorial to the newer
NWBH5IOMixinandAcquisitionH5IOMixinclasses. @bendichter #1586 - Added more informative error message for common installation error. @bendichter, @rly #1591
- Updated citation for PyNWB in docs and duecredit to use the eLife NWB paper. @oruebel #1604
- Fixed docs build warnings due to use of hardcoded links. @oruebel #1604
- Updated the iterative write tutorial to reference the new
GenericDataChunkIteratorfunctionality and use the newH5DataIO.datasetproperty to simplify the custom I/O section. @oruebel #1633 - Updated the parallel I/O tutorial to use the new
H5DataIO.datasetfeature to set up an empty dataset for parallel write. @oruebel #1633
- Added shape constraint to
PatchClampSeries.data. @bendichter #1596 - Updated the images tutorial to provide example usage of an
IndexSerieswith a reference toImages. @bendichter #1602 - Fixed an issue with the
toxtool when upgrading to tox 4. @rly #1608 - Fixed an issue where
Imageswere not allowed as stimulus templates. @rly #1638
- Enhanced
pynwb.validateAPI function to accept a list of file paths as well as the ability to operate on cached namespaces. Also adjusted the validate CLI to directly use the API function. @CodyCBakerPhD #1511
- Fixed bug in
pynwb.testing.mock.file.mock_NWBFileto identifier UUID to string. @oruebel #1557 - Minor fixes to test suite to prevent warnings. @rly #1571
- Made build wheel python 3 only. @mavaylon1 #1572
- Updated README.rst. @mavaylon1 #1573
- Added support for explicit ordering of sphinx gallery tutorials in the docs. @oruebel #1504, @bdichter #1495
- Added developer guide on how to create a new tutorial. @oruebel #1504
- Added images tutorial. @weiglszonja #1470
- Added example code for fsspec in the streaming tutorial. @bdichter #1499
- Add voxel_mask tutorial. @codycbakerphd (#1544)
- Updated coverage workflow, report separate unit vs integration coverage. @rly #1509
- Deleted test files generated from running sphinx gallery examples. @rly #1517
- Enabled passing an S3File created through s3fs, which provides a method for reading an NWB file directly
from s3 that is an alternative to ros3. This required relaxing of
NWBHDF5IOinput validation. Thepatharg is not needed iffileis provided.modenow has a default value of "r". @bendichter #1499 - Added a method to
NWBMixinthat only raises an error when a check is violated on instance creation, otherwise throws a warning when reading from a file. The new checks inImageSerieswhenexternal_fileis provided is used with this method to ensure that that files with invalid data can be read, but prohibits the user from creating new instances when these checks are violated. @weiglszonja #1516 - Created a GitHub Actions workflow to generate test files for testing backward compatibility. @rly #1548
- Updated requirements, including allowing numpy 1.23. @rly #1550
- Enhanced docs for
LabMetaDatato clarify its usage. @oruebel #1546 - Add testing/mock, which provides mock neurodata objects for testing. @bendichter #1454
- Updated
TimeIntervalsto use the newTimeSeriesReferenceVectorDatatype. This does not alter the overall structure ofTimeIntervalsin a major way aside from changing the value of theneurodata_typeattribute of theTimeIntervals.timeseriescolumn fromVectorDatatoTimeSeriesReferenceVectorData. This change facilitates creating common functionality aroundTimeSeriesReferenceVectorData. For NWB files with version 2.4.0 and earlier, theTimeIntervals.timeseriescolumn is automatically migrated on read in theTimeIntervalsMapobject mapper class to use theTimeSeriesReferenceVectorDatacontainer class, so that users are presented a consistent API for existing and new files. This change affects all existingTimeIntervalstables e.g.,NBWFile.epochs,NWBFile.trials, andNWBFile.invalid_times. While this is technically a breaking change, the impact user codes should be minimal as this change primarily adds functionality while the overall behavior of the API is largely consistent with existing behavior. @oruebel, @rly (#1390)
- A warning is now raised if
SpatialSeries.datahas more than 3 columns. @bendichter, @rly (#1455, #1480) - The arguments x, y, z, imp, location, filtering are no longer required in the electrodes table. @h-mayorquin, @rly (#1448)
- Added
cell_idattribute toIntracellularElectrode. @bendichter (#1459) - Added
offsetfield toTimeSeriesand its subtypes. @codycbakerphd (#1424) - Added support for NWB 2.5.0.
- Added support for updated
IndexSeriestype, neworder_of_imagesfield inImages, and new neurodata_typeImageReferences. @rly (#1483)
- Added support for updated
- Added support for HDMF 3.3.1. This is now the minimum version of HDMF supported. Importantly, HDMF 3.3 introduces warnings when the constructor of a class mapped to an HDMF-common data type or an autogenerated data type class is passed positional arguments instead of all keyword arguments. @rly (#1484)
- Moved logic that checks the 0th dimension of TimeSeries data equals the length of timestamps to a private method in the
TimeSeriesclass. This is to avoid raising a warning when an ImageSeries is used with external file. @weiglszonja (#1486) - Improved warning text when dimensions are not matched in
TimeSeries,ElectricalSeries, andRoiResponseSeries. @rly (#1491)
- Added tutorial on annotating data via
TimeIntervals. @oruebel (#1390) - Added copy button to code blocks. @weiglszonja (#1460)
- Created behavioral tutorial. @weiglszonja (#1464)
- Enhanced display of icephys pandas tutorial by using
dataframe_imageto render and display large tables as images. @oruebel (#1469) - Created tutorial about reading and exploring an existing
NWBFile. @weiglszonja (#1453) - Added new logo for PyNWB. @oruebel (#1461)
- Minor text fixes. @oruebel @bendichter (#1443, #1462, #1463, #1466, #1472, #1473)
- Fixed input data types to allow only
floatfor fieldsconversionandoffsetin definition ofTimeSeries. @codycbakerphd (#1424) - Fixed incorrect warning in
RoiResponseSeries.__init__about mismatch between the second dimension of data and the length of rois. @rly (#1491)
- Added
environment-ros3.ymltoMANIFEST.infor inclusion in source distributions. @rly (#1398) - Fixed bad error check in
IntracellularRecordingsTable.add_recordingwhen addingIZeroClampSeries. @oruebel (#1410) - Skipped ros3 tests if internet access or the ros3 driver are not available. @oruebel (#1414)
- Fixed CI issues. @rly (#1427)
- Enhanced ordering of sphinx gallery tutorials to use alphabetic ordering based on tutorial headings. @oruebel (#1399)
- Updated the general tutorial to add documentation about the
Imagestype. @bendichter (#1353) - Updated the main index of the documentation to make the documentation easier to navigate. @oruebel (#1402)
- Merged the "NWB File" overview section with the "NWB File Basics" tutorial. @oruebel (#1402)
- Updated and created separated installation instructions for users and developers . @oruebel (#1402)
- Updated the Extracellular electrophysiology tutorial. @bendichter, @weiglszonja (#1391)
- Extended the general tutorial with more data types (e.g.,
Subject,SpatialSeries,Position). @weiglszonja (#1403) - Improved constructor docstrings for Image types. @weiglszonja (#1418)
- Added documentation for exporting NWB files. @rly (#1417)
- Improved documentation formatting. @bendichter (#1438)
- Minor text fixes. @bendichter (#1437, #1400)
- Improved constructor docstrings for Image types. @weiglszonja (#1418)
- Added checks for data orientation in
TimeSeries,ElectricalSeries, andRoiResponseSeries@bendichter (#1428) - Added checks for data orientation in
TimeSeries,ElectricalSeries, andRoiResponseSeries. @bendichter (#1426) - Enhanced issue template forms on GitHub. @CodyCBakerPHD (#1434)
SweepTablehas been deprecated in favor of the new icephys metadata tables. Use ofSweepTableis still possible but no longer recommended. @oruebel (#1349)TimeSeries.__init__now requires thedataargument because the 'data' dataset is required by the schema. If aTimeSeriesis read without a value fordata, it will be set to a default value. For mostTimeSeries, this is a 1-dimensional empty array with dtype uint8. ForImageSeriesandDecompositionSeries, this is a 3-dimensional empty array with dtype uint8. @rly (#1274)TimeSeries.__init__now requires theunitargument because the 'unit' attribute is required by the schema. If aTimeSeriesis read without a value forunit, it will be set to a default value. For mostTimeSeries, this is "unknown". ForIndexSeries, this is "N/A" according to the NWB 2.4.0 schema. @rly (#1274)
- Added new intracellular electrophysiology hierarchical table structure from ndx-icephys-meta to NWB core.
This includes the new types
TimeSeriesReferenceVectorData,IntracellularRecordingsTable,SimultaneousRecordingsTable,SequentialRecordingsTable,RepetitionsTableandExperimentalConditionsTableas well as corresponding updates toNWBFileto support interaction with the new tables. @oruebel (#1349) - Added support for NWB 2.4.0. See Release Notes for more details. @oruebel, @rly (#1349)
- Dropped Python 3.6 support, added Python 3.9 support. @rly (#1377)
- Updated requirements to allow compatibility with HDMF 3 and h5py 3. @rly (#1377)
- When using HDMF 3 and h5py 3, users can now stream NWB files from an S3 bucket.
- Added new tutorial for intracellular electrophysiology to describe the use of the new metadata tables
and declared the previous tutorial using
SweepTableas deprecated. @oruebel (#1349) - Added new tutorial for querying intracellular electrophysiology metadata
(
docs/gallery/domain/plot_icephys_pandas.py). @oruebel (#1349, #1383) - Added thumbnails for tutorials to improve presentation of online docs. @oruebel (#1349)
- Used
sphinx.ext.extlinksextension in docs to simplify linking to common targets. @oruebel (#1349) - Created new section for advanced I/O tutorials and moved parallel I/O tutorial to its own file. @oruebel (#1349)
- Overhauled documentation on extensions. @bendichter, @rly, @oruebel (#1350)
- Updated the optical physiology / Calcium imaging tutorial. @bendichter, @weiglszonja (#1375)
- Added a tutorial on streaming using the ROS3 driver. @rly (#1393)
- Added RRID for citing PyNWB to the docs. @oruebel (#1372)
- Updated CI and tests to handle deprecations in libraries. @rly (#1377)
- Added test utilities for icephys (
pynwb.testing.icephys_testutils) to ease creation of test data for tests and tutorials. @oruebel (#1349, #1383) - Added on-push and nightly tests of streaming using the ROS3 driver. @rly (#1393)
- These tests make use of a new dandiset for testing the API: https://gui.dandiarchive.org/#/dandiset/000126
- Improve documentation and test for
CorrectedImageStack,MotionCorrection. @rly, @bendichter (#1306, #1374)
- Updated behavior of
make cleancommand for docs to ensure tutorial files are cleaned up. @oruebel (#1349) - Enforced electrode ID uniqueness during insertion into table. @CodyCBakerPhD (#1344)
- Fixed integration tests with invalid test data that will be caught by future hdmf validator version. @dsleiter, @rly (#1366, #1376)
- Fixed build warnings in docs. @oruebel (#1380)
- Fix intersphinx links in docs for numpy. @oruebel (#1386)
- Previously, the
dataargument was required inOpticalSeries.__init__even thoughexternal_filecould be provided in place ofdata.OpticalSeries.__init__now makesdataoptional. However, this has the side effect of moving the position ofdatato later in the argument list, which may break code that relies on positional arguments forOpticalSeries.__init__. @rly (#1274) - Fixed
setup.pynot being able to importversioneerwhen installing in an embedded Python environment. @ikhramts (#1395) - Removed broken option to validate against a given namespace file and updated associated documentation. @rly (#1397)
- Raise minimum version of pandas from 0.23 to 1.0.5 to be compatible with numpy 1.20, and raise minimum version of HDMF to use the corresponding change in HDMF. @rly (#1363)
- Update documentation and update structure of requirements files. @rly (#1363)
NWBFile.add_scratch(...)andScratchData.__init__(...)now accept scalar data in addition to the currently accepted types. @rly (#1309)- Support
pathlib.Pathpaths when opening files withNWBHDF5IO. @dsleiter (#1314) - Use HDMF 2.5.1. See the HDMF release notes for details.
- Support
driver='ros3'inNWBHDF5IOfor streaming NWB files directly from s3. @bendichter (#1331) - Update documentation, CI GitHub processes. @oruebel @yarikoptic, @bendichter, @TomDonoghue, @rly (#1311, #1336, #1351, #1352, #1345, #1340, #1327)
- Set default
neurodata_type_incforNWBGroupSpec,NWBDatasetSpec. @rly (#1295) - Block usage of h5py 3+ for now. h5py>=2.9, <3 is supported. (#1355)
- Fix incompatibility issue with downstream github-release tool used to deploy releases to GitHub. @rly (#1245)
- Fix issue with Sphinx gallery. @rly
- Add citation information to documentation and support for duecredit tool. @rly
- Remove use of ColoredTestRunner for more readable verbose test output. @rly
- Add support for nwb-schema 2.3.0. @rly (#1245, #1330)
- Add optional
waveformscolumn to theUnitstable. - Add optional
strainfield toSubject. - Add to
DecompositionSeriesan optionalDynamicTableRegioncalledsource_channels. - Add to
ImageSeriesan optional link toDevice. - Add optional
continuityfield toTimeSeries. - Add optional
filteringattribute toElectricalSeries. - Clarify documentation for electrode impedance and filtering.
- Set the
stimulus_descriptionforIZeroCurrentClampto have the fixed value "N/A". - See https://nwb-schema.readthedocs.io/en/latest/format_release_notes.html for full schema release notes.
- Add optional
- Add support for HDMF 2.5.5 and upgrade HDMF requirement from 2.1.0 to 2.5.5. @rly @ajtritt
(#1325, #1355, #1360, #1245, #1287). This includes several relevant features and bug fixes, including:
- Fix issue where dependencies of included types were not being loaded in namespaces / extensions.
- Add
HDF5IO.get_namespaces(path=path, file=file)method which returns a dict of namespace name mapped to the namespace version (the largest one if there are multiple) for each namespace cached in the given HDF5 file. - Add methods for automatic creation of
MultiContainerInterfaceclasses. - Add ability to specify a custom class for new columns to a
DynamicTablethat are notVectorData,DynamicTableRegion, orVocabDatausingDynamicTable.__columns__orDynamicTable.add_column(...). - Add support for creating and specifying multi-index columns in a
DynamicTableusingadd_column(...). - Add capability to add a row to a column after IO.
- Add method
AbstractContainer.get_fields_conf. - Add functionality for storing external resource references.
- Add method
hdmf.utils.get_docval_macroto get a tuple of the current values for a docval_macro, e.g., 'array_data' and 'scalar_data'. DynamicTablecan be automatically generated usingget_class. Now the HDMF API can read files with extensions that contain a DynamicTable without needing to import the extension first.- Add
EnumDatatype for storing data that comes from a fixed set of values. - Add
AlignedDynamicTabletype which defines a DynamicTable that supports storing a collection of subtables. - Allow
np.bool_as a validbooldtype when validating. - See https://github.com/hdmf-dev/hdmf/releases for full HDMF release notes.
Users can now add/remove containers from a written NWB file and export the modified NWBFile to a new file path. @rly (#1280)
- See https://pynwb.readthedocs.io/en/stable/tutorials/general/add-remove-containers.html for examples and more information.
- PyNWB no longer works with HDMF version < 2.1.0. If you have pinned HDMF version < 2 in your package but allow PyNWB
version 1.4.0, please beware that
pipmay install PyNWB version 1.4.0 with an incompatible version of HDMF (version < 2). - Use of HDMF 2.1.0 fixes
__getitem__-based access ofMultiContainerInterfacetypes, e.g,,fluorescence['roi_response_series_name'], where previously if theMultiContainerInterfacecontained only one item, then any key could be used within the square brackets to access the containedContainer, even if the key did not match the name of the containedContainer. This update patches this bug such that the key used within the square brackets must match the name of the containedContaineror else an error will be raised.
- Update requirements to use HDMF 2.1.0. @rly (#1256)
- Start FAQ section in documentation. @rly (#1249)
- Improve deprecation warnings. @rly (#1261)
- Update CI to test Python 3.8, update requirements. @rly (#1267, #1275)
- Make use of
MultiContainerInterfaceandLabelledDictthat have been moved to HDMF. @bendichter @rly (#1260)
- For
ImageSeries, add check ifexternal_fileis provided withoutstarting_framein__init__. @rly (#1264) - Improve docstrings for
TimeSeries.dataand for the electrode table. @rly (#1271, #1272) - Fix Azure Pipelines configuration. @rly (#1281)
- Update requirements to use HDMF 1.6.4. @rly (#1256)
- Fix writing optional args to electrodes table. @rly (#1246)
- Fix missing method UnitsMap.get_nwb_file. @rly (#1227)
- Add support for nwb-schema 2.2.5. @rly (#1243)
- This schema version fixes incorrect dims and shape for
ImagingPlane.origin_coordsandImagingPlane.grid_spacing, and fixes incorrect dims forTwoPhotonSeries.field_of_view.
- This schema version fixes incorrect dims and shape for
- Fix bugged
Deviceconstructor. @rly (#1209) - Fix link to code of conduct page in docs. @rly (#1229)
- Fix docs for
get_type_map. @oruebel (#1233) - Pass file object to parent when loading namespaces. @NileGraddis (#1242)
- Update CI to use supported MacOS version. @rly (#1211)
- Clean up tests to remove conversion warnings and use keyword args. @rly (#1202)
- Fix flake8 errors. @rly (#1235)
- Add changelog. @rly (#1215)
- Update release process with notes about coordinating with nwb-schema. @rly (#1214)
- Inform which unit value is actually overwritten. @yarikoptic (#1219)
- Do not print out logging.DEBUG statements to stdout for test.py. @rly (#1240)
- Add support for nwb-schema 2.2.4. @rly (#1213)
- Make
ImagingPlane.imaging_rateoptional. This moves theimaging_rateargument down the list of constructor arguments forImagingPlane.__init__. This will break existing code that calls the constructor ofImagingPlanewith at least 6 positional arguments, such that one positional argument matchesimaging_rate.
- Make
- Add support for nwb-schema 2.2.2. @rly (#1146)
- This is a large change. See the PR and schema release notes for more information.
- Validate against most specific namespace. @t-b, @rly (#1094)
- Replace 'ic_electrode' with 'icephys_electrode' in
NWBFile. @oruebel (#1200) - Integrate minor enhancements and bug fixes introduced in HDMF 1.6.0 and 1.6.1, including improved handling of namespaces that lack a version key,
- Add nightly testing of validation CLI. @t-b, @rly (#1164, #1195, #1197)
- Treat ipython notebooks as binary in git. @t-b (#1168)
- Use proper file removal in tests. @t-b (#1165)
- Use hdmf-docutils instead of nwb-docutils for documentation. @jcfr (#1176)
- Run minimum requirements testing n Python 3.6. @rly (#1194)
- Fix API documentation. @bendichter (#1159)
- Fix unit testing output. @rly (#1158)
- Fix copying files with Subject. @rly (#1171)
- Add "unit" attribute back as an optional attribute in icephys classes. @rly (#1188)
- Fix reported development status in
setup.py. @rly (#1201)
- Fix ReadTheDocs build. @rly (#1155)
- Update manifest to fix conda build. @rly (#1156)
- Add new logo to docs. @rly (#1096)
- Add warning when referencing electrode table before it exists. @ajtritt (#1098)
- Refactor internal calls to docval. @rly (#1104)
- Enhance icephys example and documentation. @t-b (#1081)
- Add multi index and time bounds to get_unit_spikes. @bendichter (#1001)
- Improve ophys docstrings. @bendichter (#1126)
- Improve icephys docstrings for gain. @bendichter (#1129)
- Update legal information. @rly (#1131)
- Add support for device description and manufacturer. @rly (#1135)
- Update dependencies and remove explicit six, unittest2 dependency. @rly (#1136, #1138, #1142, #1137, #1154)
- Add object ID tutorial. @rly (#1140)
- Update CI. @rly (#1141)
- Catch critical warnings and throw errors in unit tests. @rly (#1112)
- Create and use testing module, remove builder tests, clean up test code. @rly (#1117)
- Add and test minimum requirements for PyNWB. @rly (#1148)
- Improve docs for get_class. @bendichter (#1149)
- Fix versioneer reporting version. @rly (#1100)
- Fix
DynamicTableimport after move to hdmf.common. @bendichter (#1103) - Fix handling of unmapped attributes. @rly (#1105)
- Update tests and documentation to reflect new selection behavior of
DynamicTable. @oruebel (#1106) - Fix reference images not being mapped in PlaneSegmentation. @rly (#1109)
- Fix legacy import of
ObjectMapper. @rly (#1124) - Fix extensions documentation typo: 'str' -> 'text'. @bendichter (#1132)
- Revert "PatchClampSeries: Force sweep_number to uint64". @t-b (#1123)
- Fix sphinx code to use latest sphinx. @rly (#1139)
- Use latest HDMF 1.3.3. #1093 (@rly)
- Expose HDMF export_spec utility function for use by extensions. #1092 (@rly)
- Fix bug in writing SpikeEventSeries data or timestamps datasets with a DataChunkIterator. #1089 (@bendichter)
PyNWB 1.1.0 does not work with HDMF>=1.3. This release will work with HDMF>=1.3.2.
- Support newly added channel-specific conversion factor for ElectricalSeries #1072 (@bendichter)
- Move generic types out of PyNWB into hdmf-common. #1061 (@ajtritt)
- Update documentation to reflect the above changes. #1078 (@rly)
- Add new case to the iterative write tutorial. #1029 (@oruebel)
- Improve CI. #1079 (@rly)
- Pin the current latest version of HDMF to requirements for setup.py. #1083 (@rly)
- Add object ID to all neurodata types #991 (@ajtritt, @rly)
- Add NWBFile shallow copy method #994 (@ajtritt, @rly)
- Drop official Python 2.7 support #1028 (@rly)
- Add scratch space #1027 #1038 (@ajtritt, @rly)
- Support multiple experimenters #988 #1035 (@ajtritt, @rly)
- Support multiple related publications #1047 (@rly)
- Update schema to 2.1.0 (see release notes in https://nwb-schema.readthedocs.io/en/latest/format_release_notes.html) (@rly, @bendichter, @ajtritt, @oruebel, @t-b)
- Add iterative write check for TimeSeries timestamps #1012 (@bendichter, @oruebel)
- Add functions to convert between pixel mask and image mask for ophys data #766 (@mamelara)
- Add cortical surface extension example #1040 (@bendichter)
- Match API with schema defaults #1033 (@rly)
- Core schema is now a git submodule #1045 (@ajtritt)
- Implement better support for floating point data for Python 3.5 on Windows #1043 (@rly)
- Enhance iterative write tutorial #1029 (@oruebel)
- Allow empty data in DynamicTable with non-empty VectorIndex #887 (@ajtritt)
- Allow OpticalSeries constructor argument 'field_of_view' to be H5Dataset #1063 (@bendichter)
- Clarify documentation for deprecated ImageSeries constructor arg 'bits_per_pixel' #1065 (@rly)
- Adjust code to explicitly map properties after changes made in HDMF 1.2 #1048 #1069 (@rly)
- Improvements to CI, documentation, and GitHub repo structure #1055 (@rly)
- Add MPI functionality to NWBHDF5IO (@bendichter)
- Add option to exclude columns from DynamicTable.to_dataframe() (@NileGraddis)
- Remove ability to add DecompositionSeries to LFP (@bendichter)
- Remove num_samples from TimeSeries (@NileGraddis)
- Automatically detect ragged arrays in from_dataframe (@bendichter)
- Cache the spec by default on write (@rly)
- Improve printing of NWB objects (@rly)
- Change ProcessingModule.add_data_interface() to .add(), ProcessingModule.get_data_interface() to .get(), NWBFile.modules to NWBFile.processing (@bendichter)
- Remove unused SpecFile type (@oruebel)
- Add ability to validate files against the cached spec (@t-b)
- Make CurrentClampSeries/VoltageClampSeries parameters optional (@t-b)
- Update documentation (@t-b, @rly)
- Update copyright/license
- Improve tests and CI
- Update requirements
- See also HDMF changes https://github.com/hdmf-dev/hdmf/releases/tag/1.0.4
- Fix dynamictableregion iteration failure after roundtrip (@NileGraddis)
- Fix from_dataframe for children of DynamicTable (@bendichter)
- Fix for modular (cross-file) storage of timeseries timestamps (@NileGraddis)
- Fix bug on loading lists of strings from hdmf 1.0.4 (@rly)
- Fix IO for intervals (@bendichter)
- Fix round trip for Subject.date_of_birth (@bendichter)
- DecompositionSeries "source_timeseries" link is no longer required (@bendichter)
- Reorder keys (@rly)
- Remove NWBFile "specifications" group (@oruebel)
- CorrectedImageStack and ImagingRetinotopy inherits from NWBDataInterface instead of NWBContainer (@rly)
- Fix typo in unit of resistance_comp_prediction/correction (@t-b)
- Add option for third dimension for Units "waveforms" dataset to represent different electrodes (@bendichter)
- Update NWBFile.nwb_version to 2.0.2