Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add mock neurodata objects #1454

Merged
merged 57 commits into from
Sep 16, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
45e2882
add dummy data for ecephys
bendichter Apr 15, 2022
3c7459c
add dummy functions
bendichter Apr 15, 2022
01cbb6f
clean up
bendichter Apr 15, 2022
1e4cad5
flake8
bendichter Apr 15, 2022
739766d
* change name from dummy to mock
bendichter Apr 19, 2022
93d9c16
format imports
bendichter Apr 19, 2022
10c74fb
refactor name_generator
bendichter May 13, 2022
3d0bb93
add mock for behavior and base
bendichter Aug 24, 2022
c085c3c
add mocks and mock tests
bendichter Aug 24, 2022
e73a336
Merge branch 'dev' into mock
bendichter Aug 24, 2022
733e4aa
Update tests/unit/test_misc.py
bendichter Aug 24, 2022
882192e
Update tests/unit/test_misc.py
bendichter Aug 24, 2022
42e7d52
add mock.ogen.py
bendichter Aug 24, 2022
e05b4b1
Merge remote-tracking branch 'origin/dummy' into mock
bendichter Aug 24, 2022
79182a0
flake8
bendichter Aug 24, 2022
c42a3cf
Merge branch 'dev' into dummy
bendichter Aug 30, 2022
d04ab17
delay name generation to within the mock functions
bendichter Aug 30, 2022
b66abd0
Merge remote-tracking branch 'origin/dummy' into mock
bendichter Aug 30, 2022
7578d06
delay internal nd_types to within function
bendichter Aug 30, 2022
4a327cc
flake8
bendichter Aug 30, 2022
f239002
flake8
bendichter Aug 30, 2022
df4da79
lazy creation of electrodes table
bendichter Aug 30, 2022
d4ed0df
add mock for file submodule and unit tests
bendichter Aug 30, 2022
2282111
add mock subject to mock nwbfile
bendichter Aug 30, 2022
3a3dccd
update mock_ElectrodeTable
bendichter Aug 30, 2022
fe1a3ad
add back group name
bendichter Aug 30, 2022
1df145e
lazy generation of TimeSeries name
bendichter Aug 31, 2022
f7f253f
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
4515f3d
Update src/pynwb/testing/mock/base.py
bendichter Aug 31, 2022
5ef7b6f
Update src/pynwb/testing/mock/behavior.py
bendichter Aug 31, 2022
38c1b35
Update src/pynwb/testing/mock/behavior.py
bendichter Aug 31, 2022
78dbea7
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
3fe6df8
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
b87f37b
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
c3174b3
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
ff1b343
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
d41a022
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
ff98303
Update src/pynwb/testing/mock/base.py
bendichter Aug 31, 2022
521f188
Update src/pynwb/testing/mock/ecephys.py
bendichter Aug 31, 2022
a747e01
Update src/pynwb/testing/mock/ogen.py
bendichter Aug 31, 2022
b2afb77
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
cd91b03
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
1efc278
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
9d4f3a6
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
98d7008
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
be8ec33
Update src/pynwb/testing/mock/ogen.py
bendichter Aug 31, 2022
48a947c
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
b66468f
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
d0a841f
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
1c74a29
Update src/pynwb/testing/mock/ophys.py
bendichter Aug 31, 2022
1dee104
add init with docstring
bendichter Aug 31, 2022
bdca196
Merge remote-tracking branch 'origin/dummy' into mock
bendichter Aug 31, 2022
1cabef1
fix mock_ElectrodeTable
bendichter Aug 31, 2022
2751480
flake8
bendichter Aug 31, 2022
54a2ad5
Merge branch 'dev' into dummy
rly Sep 6, 2022
9db4b5a
Update src/pynwb/testing/mock/__init__.py
bendichter Sep 16, 2022
6794b8c
Update CHANGELOG.md
bendichter Sep 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions src/pynwb/testing/mock/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import numpy as np

from ...base import TimeSeries
from .utils import name_generator


def mock_TimeSeries(
name=name_generator("TimeSeries"),
data=np.array([1, 2, 3, 4]),
unit="volts",
resolution=-1.0,
conversion=1.0,
timestamps=None,
starting_time=None,
rate=10.0,
comments="no comments",
description="no description",
control=None,
control_description=None,
continuity=None,
):
return TimeSeries(
name=name,
data=data,
unit=unit,
resolution=resolution,
conversion=conversion,
timestamps=timestamps,
starting_time=starting_time,
rate=rate,
comments=comments,
description=description,
control=control,
control_description=control_description,
continuity=continuity,
)
60 changes: 60 additions & 0 deletions src/pynwb/testing/mock/behavior.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import numpy as np

from ...behavior import (
PupilTracking,
Position,
SpatialSeries,
CompassDirection,
)
from .utils import name_generator
from .base import mock_TimeSeries


def mock_SpatialSeries(
name=name_generator("SpatialSeries"),
data=np.array([1, 2, 3, 4]),
reference_frame="lower left is (0, 0)",
unit="meters",
conversion=1.0,
resolution=-1.0,
timestamps=None,
starting_time=None,
rate=10.0,
comments="no comments",
description="no description",
control=None,
control_description=None,
):
return SpatialSeries(
name=name,
data=data,
reference_frame=reference_frame,
unit=unit,
conversion=conversion,
resolution=resolution,
timestamps=timestamps,
starting_time=starting_time,
rate=rate,
comments=comments,
description=description,
control=control,
control_description=control_description,
)


def mock_Position(
name=name_generator("Position"), spatial_series=None,
):
return Position(name=name, spatial_series=spatial_series or [mock_SpatialSeries()])


def mock_PupilTracking(
name=name_generator("PupilTracking"), time_series=None,
):
return PupilTracking(name=name, time_series=time_series or [mock_TimeSeries()])


def mock_CompassDirection(name=name_generator("CompassDirection"), spatial_series=None):
return CompassDirection(
name=name, spatial_series=spatial_series or [mock_SpatialSeries(unit="radians")]
)
15 changes: 15 additions & 0 deletions src/pynwb/testing/mock/device.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from ...device import Device

from .utils import name_generator


def mock_Device(
name=name_generator("Device"),
description="description",
manufacturer=None,
):
return Device(
name=name,
description=description,
manufacturer=manufacturer,
)
78 changes: 78 additions & 0 deletions src/pynwb/testing/mock/ecephys.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import numpy as np

from hdmf.common.table import DynamicTableRegion

from ...file import ElectrodeTable
from ...ecephys import ElectricalSeries, ElectrodeGroup, SpikeEventSeries
from .device import mock_Device
from .utils import name_generator


def mock_ElectrodeGroup(
name=name_generator("ElectrodeGroup"),
description="description",
location="location",
device=mock_Device(),
position=None,
):
return ElectrodeGroup(
name=name, description=description, location=location, device=device, position=position,
)


def mock_ElectrodeTable(n_rows=5, group=mock_ElectrodeGroup()):
table = ElectrodeTable()
for i in range(n_rows):
table.add_row(
x=1.0,
y=2.0,
z=3.0,
imp=-(i + 1),
location="CA1",
filtering="none",
group=group,
group_name=group.name,
)
return table


def mock_electrodes(n_electrodes=5, table=mock_ElectrodeTable(n_rows=5)):
return DynamicTableRegion(
"electrodes", list(range(n_electrodes)), "the first and third electrodes", table
)


def mock_ElectricalSeries(
name=name_generator("ElectricalSeries"),
description="description",
data=np.ones((10, 5)),
rate=30000.0,
timestamps=None,
electrodes=mock_electrodes(),
filtering="filtering",
):
return ElectricalSeries(
name=name,
description=description,
data=data,
rate=rate,
timestamps=timestamps,
electrodes=electrodes,
filtering=filtering,
)


def mock_SpikeEventSeries(
name=name_generator("SpikeEventSeries"),
description="description",
data=np.ones((10, 5)),
timestamps=np.arange(10).astype(float),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
timestamps=np.arange(10).astype(float),
timestamps=None,

electrodes=mock_electrodes(),
):
return SpikeEventSeries(
name=name,
description=description,
data=data,
timestamps=timestamps,
electrodes=electrodes,
)
195 changes: 195 additions & 0 deletions src/pynwb/testing/mock/ophys.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
import numpy as np

from hdmf.common.table import DynamicTableRegion
from ...ophys import (
RoiResponseSeries,
OpticalChannel,
ImagingPlane,
TwoPhotonSeries,
PlaneSegmentation,
ImageSegmentation,
DfOverF,
Fluorescence,
)
from .device import mock_Device
from .utils import name_generator


def mock_OpticalChannel(
name=name_generator("OpticalChannel"),
description="description",
emission_lambda=500.0,
):
return OpticalChannel(
name=name, description=description, emission_lambda=emission_lambda,
)


def mock_ImagingPlane(
name=name_generator("ImagingPlane"),
optical_channel=mock_OpticalChannel(),
description="description",
device=mock_Device(),
excitation_lambda=500.0,
indicator="indicator",
location="unknown",
imaging_rate=30.0,
manifold=None,
conversion=1.0,
unit="meters",
reference_frame=None,
origin_coords=None,
origin_coords_unit="meters",
grid_spacing=None,
grid_spacing_unit="meters",
):
return ImagingPlane(
name=name,
optical_channel=optical_channel,
description=description,
device=device,
excitation_lambda=excitation_lambda,
indicator=indicator,
location=location,
imaging_rate=imaging_rate,
manifold=manifold,
conversion=conversion,
unit=unit,
reference_frame=reference_frame,
origin_coords=origin_coords,
origin_coords_unit=origin_coords_unit,
grid_spacing=grid_spacing,
grid_spacing_unit=grid_spacing_unit,
)


def mock_TwoPhotonSeries(
name=name_generator("TwoPhotonSeries"),
imaging_plane=mock_ImagingPlane(),
data=np.ones((20, 5, 5)),
rate=50.0,
unit="n.a.",
format=None,
field_of_view=None,
pmt_gain=None,
scan_line_rate=None,
external_file=None,
starting_frame=[0],
bits_per_pixel=None,
dimension=None,
resolution=-1.0,
conversion=1.0,
timestamps=None,
starting_time=None,
comments="no comments",
description="no description",
control=None,
control_description=None,
device=None,
):
return TwoPhotonSeries(
name=name,
imaging_plane=imaging_plane,
data=data,
unit=unit,
format=format,
field_of_view=field_of_view,
pmt_gain=pmt_gain,
scan_line_rate=scan_line_rate,
external_file=external_file,
starting_frame=starting_frame,
bits_per_pixel=bits_per_pixel,
dimension=dimension,
resolution=resolution,
conversion=conversion,
timestamps=timestamps,
starting_time=starting_time,
rate=rate,
comments=comments,
description=description,
control=control,
control_description=control_description,
device=device,
)


def mock_PlaneSegmentation(
description="no description",
imaging_plane=mock_ImagingPlane(),
name=name_generator("PlaneSegmentation"),
reference_images=None,
n_rois=5,
):
plane_segmentation = PlaneSegmentation(
description=description,
imaging_plane=imaging_plane,
name=name,
reference_images=reference_images,
)

for _ in range(n_rois):
plane_segmentation.add_roi(image_mask=np.zeros((10, 10)))

return plane_segmentation


def mock_ImageSegmentation(
plane_segmentations=None, name="ImageSegmentation",
):
return ImageSegmentation(
plane_segmentations=plane_segmentations or [mock_PlaneSegmentation()],
name=name,
)


def mock_RoiResponseSeries(
name=name_generator("RoiResponseSeries"),
data=np.ones((30, 5)),
unit="n.a.",
rois=None,
resolution=-1.0,
conversion=1.0,
timestamps=None,
starting_time=None,
rate=50.0,
comments="no comments",
description="no description",
control=None,
control_description=None,
n_rois=5,
):
return RoiResponseSeries(
name=name,
data=data,
unit=unit,
rois=rois
or DynamicTableRegion(
name="rois",
description="rois",
table=mock_PlaneSegmentation(n_rois=n_rois),
data=list(range(n_rois)),
),
resolution=resolution,
conversion=conversion,
timestamps=timestamps,
starting_time=starting_time,
rate=rate,
comments=comments,
description=description,
control=control,
control_description=control_description,
)


def mock_DfOverF(roi_response_series=None, name=name_generator("DfOverF")):
return DfOverF(
roi_response_series=roi_response_series or [mock_RoiResponseSeries()],
name=name,
)


def mock_Fluorescence(roi_response_series=None, name="Fluorescence"):
return Fluorescence(
roi_response_series=roi_response_series or [mock_RoiResponseSeries()],
name=name,
)
Loading