Skip to content

Commit 6a9465f

Browse files
authored
Merge pull request #1113 from AllenInstitute/1100/behavior-ophys-session-nightly
1100 fix behavior ophys session nightly tests
2 parents 5fd77e2 + 0f0a4a8 commit 6a9465f

File tree

2 files changed

+60
-40
lines changed

2 files changed

+60
-40
lines changed

allensdk/brain_observatory/behavior/behavior_ophys_api/behavior_ophys_nwb_api.py

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -235,38 +235,7 @@ def equals(A, B, reraise=False):
235235
for field in sorted(field_set):
236236
x1, x2 = getattr(A, field), getattr(B, field)
237237
err_msg = f"{field} on {A} did not equal {field} on {B} (\n{x1} vs\n{x2}\n)"
238-
239-
if isinstance(x1, pd.DataFrame):
240-
try:
241-
assert_frame_equal(x1, x2, check_like=True)
242-
except:
243-
print(err_msg)
244-
raise
245-
elif isinstance(x1, np.ndarray):
246-
np.testing.assert_array_almost_equal(x1, x2, err_msg=err_msg)
247-
elif isinstance(x1, xr.DataArray):
248-
xr.testing.assert_allclose(x1, x2)
249-
elif isinstance(x1, (list,)):
250-
assert x1 == x2, err_msg
251-
elif isinstance(x1, (sitk.Image,)):
252-
assert x1.GetSize() == x2.GetSize(), err_msg
253-
assert x1 == x2, err_msg
254-
elif isinstance(x1, (dict,)):
255-
for key in set(x1.keys()).union(set(x2.keys())):
256-
key_err_msg = f"{key} on {field} on {A} did not equal {key} on {field} on {B}"
257-
258-
if isinstance(x1[key], (np.ndarray,)):
259-
np.testing.assert_array_almost_equal(x1[key], x2[key], err_msg=key_err_msg)
260-
elif isinstance(x1[key], (float,)):
261-
if math.isnan(x1[key]) or math.isnan(x2[key]):
262-
assert math.isnan(x1[key]) and math.isnan(x2[key]), key_err_msg
263-
else:
264-
assert x1[key] == x2[key], key_err_msg
265-
else:
266-
assert x1[key] == x2[key], key_err_msg
267-
268-
else:
269-
assert x1 == x2, err_msg
238+
compare_fields(x1, x2, err_msg)
270239

271240
except NotImplementedError as e:
272241
A_implements_get_field = hasattr(A.api, getattr(type(A), field).getter_name)
@@ -279,3 +248,38 @@ def equals(A, B, reraise=False):
279248
return False
280249

281250
return True
251+
252+
253+
254+
def compare_fields(x1, x2, err_msg=""):
255+
if isinstance(x1, pd.DataFrame):
256+
try:
257+
assert_frame_equal(x1, x2, check_like=True)
258+
except:
259+
print(err_msg)
260+
raise
261+
elif isinstance(x1, np.ndarray):
262+
np.testing.assert_array_almost_equal(x1, x2, err_msg=err_msg)
263+
elif isinstance(x1, xr.DataArray):
264+
xr.testing.assert_allclose(x1, x2)
265+
elif isinstance(x1, (list,)):
266+
assert x1 == x2, err_msg
267+
elif isinstance(x1, (sitk.Image,)):
268+
assert x1.GetSize() == x2.GetSize(), err_msg
269+
assert x1 == x2, err_msg
270+
elif isinstance(x1, (dict,)):
271+
for key in set(x1.keys()).union(set(x2.keys())):
272+
key_err_msg = f"mismatch when checking key {key}. {err_msg}"
273+
274+
if isinstance(x1[key], (np.ndarray,)):
275+
np.testing.assert_array_almost_equal(x1[key], x2[key], err_msg=key_err_msg)
276+
elif isinstance(x1[key], (float,)):
277+
if math.isnan(x1[key]) or math.isnan(x2[key]):
278+
assert math.isnan(x1[key]) and math.isnan(x2[key]), key_err_msg
279+
else:
280+
assert x1[key] == x2[key], key_err_msg
281+
else:
282+
assert x1[key] == x2[key], key_err_msg
283+
284+
else:
285+
assert x1 == x2, err_msg

allensdk/test/brain_observatory/behavior/test_behavior_ophys_session.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
import h5py
1111
import SimpleITK as sitk
1212
from pandas.util.testing import assert_frame_equal
13+
from imageio import imread
1314

1415
from allensdk.brain_observatory.behavior.behavior_ophys_session import BehaviorOphysSession
1516
from allensdk.brain_observatory.behavior.write_nwb.__main__ import BehaviorOphysJsonApi
16-
from allensdk.brain_observatory.behavior.behavior_ophys_api.behavior_ophys_nwb_api import BehaviorOphysNwbApi, equals
17+
from allensdk.brain_observatory.behavior.behavior_ophys_api.behavior_ophys_nwb_api import BehaviorOphysNwbApi, equals, compare_fields
1718
from allensdk.internal.api.behavior_ophys_api import BehaviorOphysLimsApi
1819
from allensdk.brain_observatory.behavior.behavior_ophys_api import BehaviorOphysApiBase
1920
from allensdk.brain_observatory.behavior.image_api import ImageApi
@@ -30,14 +31,29 @@ def test_equal(oeid1, oeid2, expected):
3031

3132
assert equals(d1, d2) == expected
3233

33-
@pytest.mark.nightly
34-
def test_session_from_json(tmpdir_factory, session_data):
35-
oeid = 789359614
34+
@pytest.mark.requires_bamboo
35+
@pytest.mark.parametrize("get_expected,get_from_session", [
36+
[
37+
lambda ssn_data: ssn_data["ophys_experiment_id"],
38+
lambda ssn: ssn.ophys_experiment_id],
39+
[
40+
lambda ssn_data: ssn_data["targeted_structure"],
41+
lambda ssn: ssn.metadata["targeted_structure"]
42+
],
43+
[
44+
lambda ssn_data: imread(ssn_data["max_projection_file"]) / 255,
45+
lambda ssn: ssn.get_max_projection()
46+
]
47+
48+
])
49+
def test_session_from_json(tmpdir_factory, session_data, get_expected, get_from_session):
50+
session = BehaviorOphysSession(api=BehaviorOphysJsonApi(session_data))
3651

37-
d1 = BehaviorOphysSession(api=BehaviorOphysJsonApi(session_data))
38-
d2 = BehaviorOphysSession.from_lims(oeid)
52+
expected = get_expected(session_data)
53+
obtained = get_from_session(session)
3954

40-
assert equals(d1, d2)
55+
compare_fields(expected, obtained)
56+
4157

4258

4359
@pytest.mark.requires_bamboo
@@ -81,7 +97,7 @@ def test_visbeh_ophys_data_set():
8197
assert data_set.metadata == {'stimulus_frame_rate': 60.0,
8298
'full_genotype': 'Slc17a7-IRES2-Cre/wt;Camk2a-tTA/wt;Ai93(TITL-GCaMP6f)/wt',
8399
'ophys_experiment_id': 789359614,
84-
'session_type': 'Unknown',
100+
'session_type': 'OPHYS_6_images_B',
85101
'driver_line': ['Camk2a-tTA', 'Slc17a7-IRES2-Cre'],
86102
'behavior_session_uuid': uuid.UUID('69cdbe09-e62b-4b42-aab1-54b5773dfe78'),
87103
'experiment_datetime': pytz.utc.localize(datetime.datetime(2018, 11, 30, 23, 28, 37)),

0 commit comments

Comments
 (0)