Skip to content

Commit

Permalink
Merge branch 'dev' into add/missing_tutorial_icons
Browse files Browse the repository at this point in the history
  • Loading branch information
rly authored Nov 8, 2024
2 parents 6de47b9 + e55de6c commit d39eb44
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 8 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@

### Bug fixes
- Fixed bug in how `ElectrodeGroup.__init__` validates its `position` argument. @oruebel [#1770](https://github.com/NeurodataWithoutBorders/pynwb/pull/1770)
- Changed `SpatialSeries.reference_frame` from required to optional as specified in the schema. @rly [#1986](https://github.com/NeurodataWithoutBorders/pynwb/pull/1986)

### Enhancements and minor changes`
- Added warning when writing files with `NWBHDF5IO` without the `.nwb` extension. @stephprince [#1978](https://github.com/NeurodataWithoutBorders/pynwb/pull/1978)

## PyNWB 2.8.2 (September 9, 2024)

Expand Down
4 changes: 4 additions & 0 deletions src/pynwb/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,10 @@ def __init__(self, **kwargs):
if mode in io_modes_that_create_file or manager is not None or extensions is not None:
load_namespaces = False

if mode in io_modes_that_create_file and not str(path).endswith('.nwb'):
warn(f"The file path provided: {path} does not end in '.nwb'. "
"It is recommended that NWB files using the HDF5 backend use the '.nwb' extension.", UserWarning)

if load_namespaces:
tm = get_type_map()
super().load_namespaces(tm, path, file=file_obj, driver=driver, aws_region=aws_region)
Expand Down
4 changes: 2 additions & 2 deletions src/pynwb/behavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ class SpatialSeries(TimeSeries):
'or 3 columns, which represent x, y, and z.')},
{'name': 'bounds', 'type': list, 'shape': ((1, 2), (2, 2), (3, 2)), 'default': None,
'doc': 'The boundary range (min, max) for each dimension of data.'},
{'name': 'reference_frame', 'type': str, # required
'doc': 'description defining what the zero-position is'},
{'name': 'reference_frame', 'type': str,
'doc': 'description defining what the zero-position is', 'default': None},
{'name': 'unit', 'type': str, 'doc': 'The base unit of measurement (should be SI unit)',
'default': 'meters'},
*get_docval(TimeSeries.__init__, 'conversion', 'resolution', 'timestamps', 'starting_time', 'rate',
Expand Down
11 changes: 11 additions & 0 deletions tests/integration/hdf5/test_behavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,14 @@ def setUpContainer(self):
reference_frame='reference_frame',
timestamps=[1., 2., 3.]
)


class TestSpatialSeriesMinIO(AcquisitionH5IOMixin, TestCase):

def setUpContainer(self):
""" Return the test TimeSeries to read/write """
return SpatialSeries(
name='test_sS',
data=np.ones((3, 2)),
timestamps=[1., 2., 3.]
)
4 changes: 2 additions & 2 deletions tests/integration/hdf5/test_file_copy.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
class TestFileCopy(TestCase):

def setUp(self):
self.path1 = "test_a.h5"
self.path2 = "test_b.h5"
self.path1 = "test_a.nwb"
self.path2 = "test_b.nwb"

def tearDown(self):
if os.path.exists(self.path1):
Expand Down
21 changes: 19 additions & 2 deletions tests/integration/hdf5/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ def setUp(self):
self.nwbfile = NWBFile(session_description='a',
identifier='b',
session_start_time=datetime(1970, 1, 1, 12, tzinfo=tzutc()))
self.path = "test_pynwb_io_hdf5_h5dataIO.h5"
self.path = "test_pynwb_io_hdf5_h5dataIO.nwb"

def tearDown(self):
remove_test_file(self.path)
Expand Down Expand Up @@ -428,7 +428,7 @@ def setUp(self):
self.nwbfile = NWBFile(session_description='a test NWB File',
identifier='TEST123',
session_start_time=datetime(1970, 1, 1, 12, tzinfo=tzutc()))
self.path = "test_pynwb_io_nwbhdf5.h5"
self.path = "test_pynwb_io_nwbhdf5.nwb"

def tearDown(self):
remove_test_file(self.path)
Expand Down Expand Up @@ -532,6 +532,23 @@ def test_round_trip_with_pathlib_path(self):
read_file = io.read()
self.assertContainerEqual(read_file, self.nwbfile)

def test_warn_for_nwb_extension(self):
"""Creating a file with an extension other than .nwb should raise a warning"""
pathlib_path = Path(self.path).with_suffix('.h5')

with self.assertWarns(UserWarning):
with NWBHDF5IO(pathlib_path, 'w') as io:
io.write(self.nwbfile)
with self.assertWarns(UserWarning):
with NWBHDF5IO(str(pathlib_path), 'w') as io:
io.write(self.nwbfile)

# should not warn on read or append
with NWBHDF5IO(str(pathlib_path), 'r') as io:
io.read()
with NWBHDF5IO(str(pathlib_path), 'a') as io:
io.read()

def test_can_read_current_nwb_file(self):
with NWBHDF5IO(self.path, 'w') as io:
io.write(self.nwbfile)
Expand Down
9 changes: 9 additions & 0 deletions tests/unit/test_behavior.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ def test_init(self):
self.assertEqual(sS.bounds, [(-1,1),(-1,1),(-1,1)])
self.assertEqual(sS.reference_frame, 'reference_frame')

def test_init_minimum(self):
sS = SpatialSeries(
name='test_sS',
data=np.ones((3, 2)),
timestamps=[1., 2., 3.]
)
assert sS.bounds is None
assert sS.reference_frame is None

def test_set_unit(self):
sS = SpatialSeries(
name='test_sS',
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_icephys_metadata_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def setUp(self):
sweep_number=np.uint64(15)
)
self.nwbfile.add_acquisition(self.response)
self.path = 'test_icephys_meta_intracellularrecording.h5'
self.path = 'test_icephys_meta_intracellularrecording.nwb'

def tearDown(self):
remove_test_file(self.path)
Expand Down Expand Up @@ -1037,7 +1037,7 @@ class NWBFileTests(TestCase):
"""
def setUp(self):
warnings.simplefilter("always") # Trigger all warnings
self.path = 'test_icephys_meta_intracellularrecording.h5'
self.path = 'test_icephys_meta_intracellularrecording.nwb'

def tearDown(self):
remove_test_file(self.path)
Expand Down

0 comments on commit d39eb44

Please sign in to comment.