|
34 | 34 | import numpy as np |
35 | 35 | from pydantic import ByteSize |
36 | 36 | from pynwb import NWBHDF5IO, NWBFile, TimeSeries |
| 37 | +from pynwb.file import Subject |
37 | 38 | import pytest |
38 | 39 | import requests |
39 | 40 | from semantic_version import Version |
@@ -475,6 +476,59 @@ def test_time_extract() -> None: |
475 | 476 | ) |
476 | 477 |
|
477 | 478 |
|
| 479 | +@pytest.mark.ai_generated |
| 480 | +@pytest.mark.parametrize("reference", ["birth", "gestational"]) |
| 481 | +def test_age_reference_roundtrip(tmp_path: Path, reference: str) -> None: |
| 482 | + path = tmp_path / "age.nwb" |
| 483 | + nwb = NWBFile("age reference", "age", datetime(2020, 1, 1, tzinfo=tzutc())) |
| 484 | + nwb.subject = Subject(age="P3W", age__reference=reference) |
| 485 | + with NWBHDF5IO(str(path), "w") as io: |
| 486 | + io.write(nwb) |
| 487 | + metadata = get_metadata(path) |
| 488 | + assert metadata["age__reference"] == reference |
| 489 | + age = extract_age(metadata) |
| 490 | + assert age is not None |
| 491 | + assert age.value == "P3W" |
| 492 | + expected = ( |
| 493 | + AgeReferenceType.GestationalReference |
| 494 | + if reference == "gestational" |
| 495 | + else AgeReferenceType.BirthReference |
| 496 | + ) |
| 497 | + assert age.valueReference == PropertyValue(value=expected) |
| 498 | + |
| 499 | + |
| 500 | +@pytest.mark.ai_generated |
| 501 | +@pytest.mark.parametrize("reference", ["birth", None]) |
| 502 | +@pytest.mark.parametrize("legacy", [False, True]) |
| 503 | +def test_age_reference_legacy(reference: str | None, legacy: bool) -> None: |
| 504 | + age = extract_age( |
| 505 | + {"age": "Gestational week 3" if legacy else "P3W", "age__reference": reference} |
| 506 | + ) |
| 507 | + assert age is not None |
| 508 | + assert age.value == "P3W" |
| 509 | + assert age.valueReference == PropertyValue( |
| 510 | + value=AgeReferenceType.GestationalReference |
| 511 | + if legacy |
| 512 | + else AgeReferenceType.BirthReference |
| 513 | + ) |
| 514 | + |
| 515 | + |
| 516 | +@pytest.mark.ai_generated |
| 517 | +@pytest.mark.parametrize("reference", ["birth", "gestational", None]) |
| 518 | +def test_age_reference_preserves_birth_dates(reference: str | None) -> None: |
| 519 | + age = extract_age( |
| 520 | + { |
| 521 | + "age": "P3W", |
| 522 | + "age__reference": reference, |
| 523 | + "date_of_birth": "2020-01-01T00:00:00Z", |
| 524 | + "session_start_time": "2020-01-03T00:00:00Z", |
| 525 | + } |
| 526 | + ) |
| 527 | + assert age is not None |
| 528 | + assert age.value == "P2D" |
| 529 | + assert age.valueReference == PropertyValue(value=AgeReferenceType.BirthReference) |
| 530 | + |
| 531 | + |
478 | 532 | def test_time_extract_gest() -> None: |
479 | 533 | """extract age with Gestational ref""" |
480 | 534 | meta_birth = { |
|
0 commit comments