|
7 | 7 | #
|
8 | 8 | ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
|
9 | 9 |
|
10 |
| -from os.path import join as pjoin, dirname |
| 10 | +from os.path import join as pjoin, dirname, basename |
11 | 11 | import sys
|
12 | 12 | import warnings
|
| 13 | +import shutil |
| 14 | +from unittest import mock |
13 | 15 |
|
14 | 16 | import numpy as np
|
15 | 17 |
|
16 | 18 | from .. import gifti as gi
|
17 | 19 | from ..util import gifti_endian_codes
|
18 |
| -from ..parse_gifti_fast import Outputter, parse_gifti_file |
| 20 | +from ..parse_gifti_fast import (Outputter, parse_gifti_file, GiftiParseError, |
| 21 | + GiftiImageParser) |
19 | 22 | from ...loadsave import load, save
|
20 | 23 | from ...nifti1 import xform_codes
|
21 | 24 | from ...tmpdirs import InTemporaryDirectory
|
@@ -417,15 +420,45 @@ def test_parse_with_memmmap():
|
417 | 420 | img1 = load(DATA_FILE7)
|
418 | 421 | img2 = load(DATA_FILE7, mmap=True)
|
419 | 422 | img3 = load(DATA_FILE7, mmap=False)
|
420 |
| - expect = [DATA_FILE7_darr1, DATA_FILE7_darr2] |
421 |
| - assert len(img1.darrays) == len(img2.darrays) == len(expect) |
422 |
| - for da1, da2, da3, exp in zip(img1.darrays, |
423 |
| - img2.darrays, |
424 |
| - img3.darrays, |
425 |
| - expect): |
426 |
| - assert isinstance(da1.data, np.memmap) |
427 |
| - assert isinstance(da2.data, np.memmap) |
428 |
| - assert not isinstance(da3.data, np.memmap) |
429 |
| - assert_array_almost_equal(da1.data, exp) |
430 |
| - assert_array_almost_equal(da2.data, exp) |
431 |
| - assert_array_almost_equal(da3.data, exp) |
| 423 | + assert len(img1.darrays) == len(img2.darrays) == 2 |
| 424 | + assert isinstance(img1.darrays[0].data, np.memmap) |
| 425 | + assert isinstance(img1.darrays[1].data, np.memmap) |
| 426 | + assert isinstance(img2.darrays[0].data, np.memmap) |
| 427 | + assert isinstance(img2.darrays[1].data, np.memmap) |
| 428 | + assert not isinstance(img3.darrays[0].data, np.memmap) |
| 429 | + assert not isinstance(img3.darrays[1].data, np.memmap) |
| 430 | + assert_array_almost_equal(img1.darrays[0].data, DATA_FILE7_darr1) |
| 431 | + assert_array_almost_equal(img1.darrays[1].data, DATA_FILE7_darr2) |
| 432 | + assert_array_almost_equal(img2.darrays[0].data, DATA_FILE7_darr1) |
| 433 | + assert_array_almost_equal(img2.darrays[1].data, DATA_FILE7_darr2) |
| 434 | + assert_array_almost_equal(img3.darrays[0].data, DATA_FILE7_darr1) |
| 435 | + assert_array_almost_equal(img3.darrays[1].data, DATA_FILE7_darr2) |
| 436 | + |
| 437 | + |
| 438 | +def test_parse_with_memmap_fallback(): |
| 439 | + img1 = load(DATA_FILE7, mmap=True) |
| 440 | + with mock.patch('numpy.memmap', side_effect=ValueError): |
| 441 | + img2 = load(DATA_FILE7, mmap=True) |
| 442 | + assert isinstance(img1.darrays[0].data, np.memmap) |
| 443 | + assert isinstance(img1.darrays[1].data, np.memmap) |
| 444 | + assert not isinstance(img2.darrays[0].data, np.memmap) |
| 445 | + assert not isinstance(img2.darrays[1].data, np.memmap) |
| 446 | + assert_array_almost_equal(img1.darrays[0].data, DATA_FILE7_darr1) |
| 447 | + assert_array_almost_equal(img1.darrays[1].data, DATA_FILE7_darr2) |
| 448 | + assert_array_almost_equal(img2.darrays[0].data, DATA_FILE7_darr1) |
| 449 | + assert_array_almost_equal(img2.darrays[1].data, DATA_FILE7_darr2) |
| 450 | + |
| 451 | + |
| 452 | +def test_external_file_failure_cases(): |
| 453 | + # external file cannot be found |
| 454 | + with InTemporaryDirectory() as tmpdir: |
| 455 | + shutil.copy(DATA_FILE7, '.') |
| 456 | + filename = pjoin(tmpdir, basename(DATA_FILE7)) |
| 457 | + with pytest.raises(GiftiParseError): |
| 458 | + img = load(filename) |
| 459 | + # load from in-memory xml string (parser requires it as bytes) |
| 460 | + with open(DATA_FILE7, 'rb') as f: |
| 461 | + xmldata = f.read() |
| 462 | + parser = GiftiImageParser() |
| 463 | + with pytest.raises(GiftiParseError): |
| 464 | + img = parser.parse(xmldata) |
0 commit comments