From cab9b719d6e503347b5506a4bf51bc59fbe95b82 Mon Sep 17 00:00:00 2001 From: Ben Cipollini Date: Wed, 21 Oct 2015 09:19:32 -0500 Subject: [PATCH 1/6] Make Gifti extend FileBasedImage, implement from_file_obj, to_file_obj. --- nibabel/gifti/gifti.py | 68 +++++++++++++++++- nibabel/gifti/parse_gifti_fast.py | 47 ++++++++----- nibabel/gifti/tests/test_gifti.py | 9 +-- ...st_giftiio.py => test_parse_gifti_fast.py} | 69 +++++++++---------- nibabel/imageclasses.py | 14 ++-- 5 files changed, 140 insertions(+), 67 deletions(-) rename nibabel/gifti/tests/{test_giftiio.py => test_parse_gifti_fast.py} (91%) diff --git a/nibabel/gifti/gifti.py b/nibabel/gifti/gifti.py index 071f2c3968..8dcb4b9a2b 100644 --- a/nibabel/gifti/gifti.py +++ b/nibabel/gifti/gifti.py @@ -13,6 +13,7 @@ import numpy as np from .. import xmlutils as xml +from ..filebasedimages import FileBasedImage from ..nifti1 import data_type_codes, xform_codes, intent_codes from .util import (array_index_order_codes, gifti_encoding_codes, gifti_endian_codes, KIND2FMT) @@ -384,7 +385,9 @@ def metadata(self): return self.meta.metadata -class GiftiImage(xml.XmlSerializable): +class GiftiImage(FileBasedImage, xml.XmlSerializable): + files_types = (('image', '.gii'),) + valid_exts = ('.gii',) def __init__(self, meta=None, labeltable=None, darrays=None, version="1.0"): @@ -529,3 +532,66 @@ def to_xml(self, enc='utf-8'): return b""" """ + xml.XmlSerializable.to_xml(self, enc) + + @classmethod + def from_file_map(klass, file_map): + """ Load a Gifti image from a file_map + + Parameters + file_map : string + + Returns + ------- + img : GiftiImage + Returns a GiftiImage + """ + from .parse_gifti_fast import parse_gifti_file + return parse_gifti_file(fptr=file_map['image'].get_prepare_fileobj('rb')) + + def to_file_map(self, file_map=None): + """ Save the current image to the specified file_map + + Parameters + ---------- + file_map : string + + Returns + ------- + None + + Notes + ----- + We write all files with utf-8 encoding, and specify this at the top of the + XML file with the ``encoding`` attribute. + + The Gifti spec suggests using the following suffixes to your + filename when saving each specific type of data: + + .gii + Generic GIFTI File + .coord.gii + Coordinates + .func.gii + Functional + .label.gii + Labels + .rgba.gii + RGB or RGBA + .shape.gii + Shape + .surf.gii + Surface + .tensor.gii + Tensors + .time.gii + Time Series + .topo.gii + Topology + + The Gifti file is stored in endian convention of the current machine. + """ + # Our giftis are always utf-8 encoded - see GiftiImage.to_xml + if file_map is None: + file_map = self.file_map + f = file_map['image'].get_prepare_fileobj('wb') + f.write(self.to_xml()) diff --git a/nibabel/gifti/parse_gifti_fast.py b/nibabel/gifti/parse_gifti_fast.py index 4f7f292605..aa3995b6b7 100644 --- a/nibabel/gifti/parse_gifti_fast.py +++ b/nibabel/gifti/parse_gifti_fast.py @@ -318,7 +318,7 @@ def pending_data(self): return not self._char_blocks is None -def parse_gifti_file(fname, buffer_size=None): +def parse_gifti_file(fname=None, fptr=None, buffer_size=None): """ Parse gifti file named `fname`, return image Parameters @@ -334,28 +334,37 @@ def parse_gifti_file(fname, buffer_size=None): ------- img : gifti image """ + assert (fname is not None) + (fptr is not None) == 1, "Specify only fname or fptr, not both" + + if fptr is None: + with open(fname, 'rb') as datasource: + return parse_gifti_file(fptr=datasource, buffer_size=buffer_size) + else: + datasource = fptr + if buffer_size is None: buffer_sz_val = 35000000 else: buffer_sz_val = buffer_size - with open(fname, 'rb') as datasource: - parser = ParserCreate() - parser.buffer_text = True - try: - parser.buffer_size = buffer_sz_val - except AttributeError: - if not buffer_size is None: - raise ValueError('Cannot set buffer size for parser') - HANDLER_NAMES = ['StartElementHandler', - 'EndElementHandler', - 'CharacterDataHandler'] - out = Outputter() - for name in HANDLER_NAMES: - setattr(parser, name, getattr(out, name)) - try: - parser.ParseFile(datasource) - except ExpatError: - print('An expat error occured while parsing the Gifti file.') + + parser = ParserCreate() + parser.buffer_text = True + try: + parser.buffer_size = buffer_sz_val + except AttributeError: + if not buffer_size is None: + raise ValueError('Cannot set buffer size for parser') + HANDLER_NAMES = ['StartElementHandler', + 'EndElementHandler', + 'CharacterDataHandler'] + out = Outputter() + for name in HANDLER_NAMES: + setattr(parser, name, getattr(out, name)) + try: + parser.ParseFile(datasource) + except ExpatError: + print('An expat error occured while parsing the Gifti file.') + # Reality check for pending data assert out.pending_data is False # update filename diff --git a/nibabel/gifti/tests/test_gifti.py b/nibabel/gifti/tests/test_gifti.py index 9433c90219..73919d94e6 100644 --- a/nibabel/gifti/tests/test_gifti.py +++ b/nibabel/gifti/tests/test_gifti.py @@ -4,9 +4,10 @@ import numpy as np +import nibabel as nib from nibabel.externals.six import string_types from nibabel.gifti import (GiftiImage, GiftiDataArray, GiftiLabel, - GiftiLabelTable, GiftiMetaData, giftiio) + GiftiLabelTable, GiftiMetaData) from nibabel.gifti.gifti import data_tag from nibabel.nifti1 import data_type_codes, intent_codes @@ -14,8 +15,8 @@ assert_array_equal) from nose.tools import (assert_true, assert_false, assert_equal, assert_raises) from nibabel.testing import clear_and_catch_warnings -from .test_giftiio import (DATA_FILE1, DATA_FILE2, DATA_FILE3, DATA_FILE4, - DATA_FILE5, DATA_FILE6) +from .test_parse_gifti_fast import (DATA_FILE1, DATA_FILE2, DATA_FILE3, + DATA_FILE4, DATA_FILE5, DATA_FILE6) def test_gifti_image(): @@ -142,7 +143,7 @@ def assign_rgba(gl, val): def test_print_summary(): for fil in [DATA_FILE1, DATA_FILE2, DATA_FILE3, DATA_FILE4, DATA_FILE5, DATA_FILE6]: - gimg = giftiio.read(fil) + gimg = nib.load(fil) gimg.print_summary() diff --git a/nibabel/gifti/tests/test_giftiio.py b/nibabel/gifti/tests/test_parse_gifti_fast.py similarity index 91% rename from nibabel/gifti/tests/test_giftiio.py rename to nibabel/gifti/tests/test_parse_gifti_fast.py index ba03cd276f..b881be525d 100644 --- a/nibabel/gifti/tests/test_giftiio.py +++ b/nibabel/gifti/tests/test_parse_gifti_fast.py @@ -15,6 +15,8 @@ import numpy as np from ... import gifti as gi +from ...loadsave import load, save + from ..util import gifti_endian_codes from ...nifti1 import xform_codes @@ -102,23 +104,23 @@ def test_read_ordering(): # DATA_FILE1 has an expected darray[0].data shape of (3,3). However if we # read another image first (DATA_FILE2) then the shape is wrong # Read an image - img2 = gi.read(DATA_FILE2) + img2 = load(DATA_FILE2) assert_equal(img2.darrays[0].data.shape, (143479, 1)) # Read image for which we know output shape - img = gi.read(DATA_FILE1) + img = load(DATA_FILE1) assert_equal(img.darrays[0].data.shape, (3,3)) def test_load_metadata(): for i, dat in enumerate(datafiles): - img = gi.read(dat) + img = load(dat) me = img.meta assert_equal(numDA[i], img.numDA) assert_equal(img.version,'1.0') def test_metadata_deprecations(): - img = gi.read(datafiles[0]) + img = load(datafiles[0]) me = img.meta # Test deprecation @@ -133,12 +135,11 @@ def test_metadata_deprecations(): def test_load_dataarray1(): - img1 = gi.read(DATA_FILE1) - + img1 = load(DATA_FILE1) # Round trip with InTemporaryDirectory(): - gi.write(img1, 'test.gii') - bimg = gi.read('test.gii') + save(img1, 'test.gii') + bimg = load('test.gii') for img in (img1, bimg): assert_array_almost_equal(img.darrays[0].data, DATA_FILE1_darr1) assert_array_almost_equal(img.darrays[1].data, DATA_FILE1_darr2) @@ -152,40 +153,36 @@ def test_load_dataarray1(): def test_load_dataarray2(): - img2 = gi.read(DATA_FILE2) - + img2 = load(DATA_FILE2) # Round trip with InTemporaryDirectory(): - gi.write(img2, 'test.gii') - bimg = gi.read('test.gii') + save(img2, 'test.gii') + bimg = load('test.gii') for img in (img2, bimg): assert_array_almost_equal(img.darrays[0].data[:10], DATA_FILE2_darr1) def test_load_dataarray3(): - img3 = gi.read(DATA_FILE3) - + img3 = load(DATA_FILE3) with InTemporaryDirectory(): - gi.write(img3, 'test.gii') - bimg = gi.read('test.gii') + save(img3, 'test.gii') + bimg = load('test.gii') for img in (img3, bimg): assert_array_almost_equal(img.darrays[0].data[30:50], DATA_FILE3_darr1) def test_load_dataarray4(): - img4 = gi.read(DATA_FILE4) - + img4 = load(DATA_FILE4) # Round trip with InTemporaryDirectory(): - gi.write(img4, 'test.gii') - bimg = gi.read('test.gii') + save(img4, 'test.gii') + bimg = load('test.gii') for img in (img4, bimg): assert_array_almost_equal(img.darrays[0].data[:10], DATA_FILE4_darr1) def test_dataarray5(): - img5 = gi.read(DATA_FILE5) - + img5 = load(DATA_FILE5) for da in img5.darrays: assert_equal(gifti_endian_codes.byteorder[da.endian], 'little') assert_array_almost_equal(img5.darrays[0].data, DATA_FILE5_darr1) @@ -204,8 +201,8 @@ def test_base64_written(): assert_false(b'Base64Binary' in contents) assert_false(b'LittleEndian' in contents) # Round trip - img5 = gi.read(DATA_FILE5) - gi.write(img5, 'fixed.gii') + img5 = load(DATA_FILE5) + save(img5, 'fixed.gii') with open('fixed.gii', 'rb') as fobj: contents = fobj.read() # The bad codes have gone, replaced by the good ones @@ -216,17 +213,17 @@ def test_base64_written(): assert_true(b'LittleEndian' in contents) else: assert_true(b'BigEndian' in contents) - img5_fixed = gi.read('fixed.gii') + img5_fixed = load('fixed.gii') darrays = img5_fixed.darrays assert_array_almost_equal(darrays[0].data, DATA_FILE5_darr1) assert_array_almost_equal(darrays[1].data, DATA_FILE5_darr2) def test_readwritedata(): - img = gi.read(DATA_FILE2) + img = load(DATA_FILE2) with InTemporaryDirectory(): - gi.write(img, 'test.gii') - img2 = gi.read('test.gii') + save(img, 'test.gii') + img2 = load('test.gii') assert_equal(img.numDA,img2.numDA) assert_array_almost_equal(img.darrays[0].data, img2.darrays[0].data) @@ -247,8 +244,7 @@ def test_write_newmetadata(): def test_load_getbyintent(): - img = gi.read(DATA_FILE1) - + img = load(DATA_FILE1) da = img.get_arrays_from_intent("NIFTI_INTENT_POINTSET") assert_equal(len(da), 1) @@ -268,12 +264,11 @@ def test_load_getbyintent(): def test_load_labeltable(): - img6 = gi.read(DATA_FILE6) - + img6 = load(DATA_FILE6) # Round trip with InTemporaryDirectory(): - gi.write(img6, 'test.gii') - bimg = gi.read('test.gii') + save(img6, 'test.gii') + bimg = load('test.gii') for img in (img6, bimg): assert_array_almost_equal(img.darrays[0].data[:3], DATA_FILE6_darr1) assert_equal(len(img.labeltable.labels), 36) @@ -288,7 +283,7 @@ def test_load_labeltable(): def test_labeltable_deprecations(): - img = gi.read(DATA_FILE6) + img = load(DATA_FILE6) lt = img.labeltable # Test deprecation @@ -307,7 +302,7 @@ def test_parse_dataarrays(): img = gi.GiftiImage() with InTemporaryDirectory(): - gi.write(img, fn) + save(img, fn) with open(fn, 'r') as fp: txt = fp.read() # Make a bad gifti. @@ -317,6 +312,6 @@ def test_parse_dataarrays(): with clear_and_catch_warnings() as w: warnings.filterwarnings('once', category=UserWarning) - gi.read(fn) + load(fn) assert_equal(len(w), 1) assert_equal(img.numDA, 0) diff --git a/nibabel/imageclasses.py b/nibabel/imageclasses.py index 20e67c06ef..7c224e1af9 100644 --- a/nibabel/imageclasses.py +++ b/nibabel/imageclasses.py @@ -10,15 +10,17 @@ import warnings from .analyze import AnalyzeImage -from .spm99analyze import Spm99AnalyzeImage -from .spm2analyze import Spm2AnalyzeImage -from .nifti1 import Nifti1Pair, Nifti1Image -from .nifti2 import Nifti2Pair, Nifti2Image +from .freesurfer import MGHImage +from .gifti import GiftiImage from .minc1 import Minc1Image from .minc2 import Minc2Image -from .freesurfer import MGHImage +from .nifti1 import Nifti1Pair, Nifti1Image +from .nifti2 import Nifti2Pair, Nifti2Image from .parrec import PARRECImage +from .spm99analyze import Spm99AnalyzeImage +from .spm2analyze import Spm2AnalyzeImage from .volumeutils import Recoder + from .optpkg import optional_package _, have_scipy, _ = optional_package('scipy') @@ -27,7 +29,7 @@ all_image_classes = [Nifti1Pair, Nifti1Image, Nifti2Pair, Nifti2Image, Spm2AnalyzeImage, Spm99AnalyzeImage, AnalyzeImage, Minc1Image, Minc2Image, MGHImage, - PARRECImage] + PARRECImage, GiftiImage] # DEPRECATED: mapping of names to classes and class functionality From a0c04f910987485ae7556ce6ce6e5773067d3527 Mon Sep 17 00:00:00 2001 From: Ben Cipollini Date: Wed, 21 Oct 2015 09:34:22 -0500 Subject: [PATCH 2/6] Deprecate giftiio --- nibabel/gifti/giftiio.py | 21 +++++++++-------- nibabel/gifti/tests/test_giftiio.py | 35 +++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 nibabel/gifti/tests/test_giftiio.py diff --git a/nibabel/gifti/giftiio.py b/nibabel/gifti/giftiio.py index 2660267021..21b6f34be6 100644 --- a/nibabel/gifti/giftiio.py +++ b/nibabel/gifti/giftiio.py @@ -10,12 +10,15 @@ # Stephan Gerhard, Oktober 2010 ############## -import os -import codecs +import warnings -from .parse_gifti_fast import parse_gifti_file +import numpy as np +warnings.warn('Please use nibabel.load/save.', DeprecationWarning) + + +@np.deprecate_with_doc("Use nibabel.load() instead.") def read(filename): """ Load a Gifti image from a file @@ -29,11 +32,11 @@ def read(filename): img : GiftiImage Returns a GiftiImage """ - if not os.path.isfile(filename): - raise IOError("No such file or directory: '%s'" % filename) - return parse_gifti_file(filename) + from ..loadsave import load + return load(filename) +@np.deprecate_with_doc("Use nibabel.save() instead.") def write(image, filename): """ Save the current image to a new file @@ -79,6 +82,6 @@ def write(image, filename): The Gifti file is stored in endian convention of the current machine. """ - # Our giftis are always utf-8 encoded - see GiftiImage.to_xml - with open(filename, 'wb') as f: - f.write(image.to_xml()) + from ..loadsave import save + return save(image, filename) + diff --git a/nibabel/gifti/tests/test_giftiio.py b/nibabel/gifti/tests/test_giftiio.py new file mode 100644 index 0000000000..9c12b7c07a --- /dev/null +++ b/nibabel/gifti/tests/test_giftiio.py @@ -0,0 +1,35 @@ +# emacs: -*- mode: python-mode; py-indent-offset: 4; indent-tabs-mode: nil -*- +# vi: set ft=python sts=4 ts=4 sw=4 et: +### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## +# +# See COPYING file distributed along with the NiBabel package for the +# copyright and license terms. +# +### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## + +import warnings + +from nose.tools import (assert_true, assert_false, assert_equal, + assert_raises) +from ...testing import clear_and_catch_warnings + + +from .test_parse_gifti_fast import (DATA_FILE1, DATA_FILE2, DATA_FILE3, + DATA_FILE4, DATA_FILE5, DATA_FILE6) + + +class TestGiftiIO(object): + def setUp(self): + with clear_and_catch_warnings() as w: + warnings.simplefilter('always', DeprecationWarning) + import nibabel.gifti.giftiio + assert_equal(len(w), 1) + + +def test_read_deprecated(): + with clear_and_catch_warnings() as w: + warnings.simplefilter('always', DeprecationWarning) + from nibabel.gifti.giftiio import read + + img = read(DATA_FILE1) + assert_equal(len(w), 1) From 6733a466d43d2d57d6d9c03b0a4c481d4bf604e0 Mon Sep 17 00:00:00 2001 From: Ben Cipollini Date: Sat, 12 Sep 2015 11:36:22 -0700 Subject: [PATCH 3/6] STY: Ignore output of coverage --html --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a0b34de90f..d6996550dc 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ dist/ .tox/ .coverage .ropeproject/ +htmlcov/ # Logs and databases # ###################### From ad0225e354646441ee0126f41fb5af7537bbd9ee Mon Sep 17 00:00:00 2001 From: Ben Cipollini Date: Sat, 12 Sep 2015 11:39:41 -0700 Subject: [PATCH 4/6] Make GIFTI call superclass __init__ --- nibabel/gifti/gifti.py | 8 ++++++-- nibabel/tests/test_files_interface.py | 12 ++++++++---- nibabel/tests/test_image_load_save.py | 9 ++++++--- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/nibabel/gifti/gifti.py b/nibabel/gifti/gifti.py index 8dcb4b9a2b..8fe11c127c 100644 --- a/nibabel/gifti/gifti.py +++ b/nibabel/gifti/gifti.py @@ -386,11 +386,15 @@ def metadata(self): class GiftiImage(FileBasedImage, xml.XmlSerializable): + valid_exts = ('.gii',) files_types = (('image', '.gii'),) valid_exts = ('.gii',) - def __init__(self, meta=None, labeltable=None, darrays=None, - version="1.0"): + def __init__(self, header=None, extra=None, file_map=None, meta=None, + labeltable=None, darrays=None, version="1.0"): + FileBasedImage.__init__(self, header=header, extra=extra, + file_map=file_map) + if darrays is None: darrays = [] if meta is None: diff --git a/nibabel/tests/test_files_interface.py b/nibabel/tests/test_files_interface.py index 2137de8d09..418cf66763 100644 --- a/nibabel/tests/test_files_interface.py +++ b/nibabel/tests/test_files_interface.py @@ -15,17 +15,20 @@ from .. import Nifti1Image, Nifti1Pair, MGHImage, all_image_classes from ..externals.six import BytesIO from ..fileholders import FileHolderError +from ..spatialimages import SpatialImage from nose.tools import (assert_true, assert_false, assert_equal, assert_raises) from numpy.testing import assert_array_equal, assert_array_almost_equal -def test_files_images(): +def test_files_spatialimages(): # test files creation in image classes arr = np.zeros((2,3,4)) aff = np.eye(4) - for klass in all_image_classes: + klasses = [klass for klass in all_image_classes + if klass.rw and issubclass(klass, SpatialImage)] + for klass in klasses: file_map = klass.make_file_map() for key, value in file_map.items(): assert_equal(value.filename, None) @@ -81,11 +84,12 @@ def test_files_interface(): assert_array_equal(img2.get_data(), img.get_data()) -def test_round_trip(): +def test_round_trip_spatialimages(): # write an image to files data = np.arange(24, dtype='i4').reshape((2, 3, 4)) aff = np.eye(4) - klasses = filter(lambda klass: klass.rw, all_image_classes) + klasses = [klass for klass in all_image_classes + if klass.rw and issubclass(klass, SpatialImage)] for klass in klasses: file_map = klass.make_file_map() for key in file_map: diff --git a/nibabel/tests/test_image_load_save.py b/nibabel/tests/test_image_load_save.py index 362c15313b..dbaf76a272 100644 --- a/nibabel/tests/test_image_load_save.py +++ b/nibabel/tests/test_image_load_save.py @@ -27,6 +27,7 @@ from ..tmpdirs import InTemporaryDirectory from ..volumeutils import native_code, swapped_code from ..optpkg import optional_package +from ..spatialimages import SpatialImage from numpy.testing import assert_array_equal, assert_array_almost_equal from nose.tools import assert_true, assert_equal @@ -45,17 +46,19 @@ def round_trip(img): return img2 -def test_conversion(): +def test_conversion_spatialimages(): shape = (2, 4, 6) affine = np.diag([1, 2, 3, 1]) + klasses = [klass for klass in all_image_classes + if klass.rw and issubclass(klass, SpatialImage)] for npt in np.float32, np.int16: data = np.arange(np.prod(shape), dtype=npt).reshape(shape) - for r_class in all_image_classes: + for r_class in klasses: if not r_class.makeable: continue img = r_class(data, affine) img.set_data_dtype(npt) - for w_class in all_image_classes: + for w_class in klasses: if not w_class.makeable: continue img2 = w_class.from_image(img) From 2fdc088bc83f2c43331fdf2d4ffc1f5c1359ea31 Mon Sep 17 00:00:00 2001 From: "Christopher J. Markiewicz" Date: Mon, 19 Oct 2015 18:23:23 -0400 Subject: [PATCH 5/6] STY: PEP8 and import cleanup Brings branch into better alignment with 0ce347f --- nibabel/gifti/gifti.py | 9 +++++---- nibabel/gifti/tests/test_parse_gifti_fast.py | 12 +++++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/nibabel/gifti/gifti.py b/nibabel/gifti/gifti.py index 8fe11c127c..e90b421120 100644 --- a/nibabel/gifti/gifti.py +++ b/nibabel/gifti/gifti.py @@ -191,6 +191,7 @@ def data_tag(dataarray, encoding, datatype, ordering): class DataTag(xml.XmlSerializable): def __init__(self, *args): self.args = args + def _to_xml_element(self): return _data_tag_element(*self.args) @@ -518,7 +519,6 @@ def print_summary(self): print(da.print_summary()) print('----end----') - def _to_xml_element(self): GIFTI = xml.Element('GIFTI', attrib={ 'Version': self.version, @@ -550,7 +550,8 @@ def from_file_map(klass, file_map): Returns a GiftiImage """ from .parse_gifti_fast import parse_gifti_file - return parse_gifti_file(fptr=file_map['image'].get_prepare_fileobj('rb')) + return parse_gifti_file( + fptr=file_map['image'].get_prepare_fileobj('rb')) def to_file_map(self, file_map=None): """ Save the current image to the specified file_map @@ -565,8 +566,8 @@ def to_file_map(self, file_map=None): Notes ----- - We write all files with utf-8 encoding, and specify this at the top of the - XML file with the ``encoding`` attribute. + We write all files with utf-8 encoding, and specify this at the top of + the XML file with the ``encoding`` attribute. The Gifti spec suggests using the following suffixes to your filename when saving each specific type of data: diff --git a/nibabel/gifti/tests/test_parse_gifti_fast.py b/nibabel/gifti/tests/test_parse_gifti_fast.py index b881be525d..f2470c707b 100644 --- a/nibabel/gifti/tests/test_parse_gifti_fast.py +++ b/nibabel/gifti/tests/test_parse_gifti_fast.py @@ -14,13 +14,11 @@ import numpy as np -from ... import gifti as gi -from ...loadsave import load, save - -from ..util import gifti_endian_codes -from ...nifti1 import xform_codes - -from ...tmpdirs import InTemporaryDirectory +import nibabel.gifti as gi +from nibabel.gifti.util import gifti_endian_codes +from nibabel.loadsave import load, save +from nibabel.nifti1 import xform_codes +from nibabel.tmpdirs import InTemporaryDirectory from numpy.testing import assert_array_equal, assert_array_almost_equal From 6fc68998618e797c4c0cc2b98cb42ba351d94a15 Mon Sep 17 00:00:00 2001 From: Ben Cipollini Date: Fri, 23 Oct 2015 18:40:15 -0700 Subject: [PATCH 6/6] Code cleanup for @effigies code review. --- nibabel/gifti/gifti.py | 1 - nibabel/gifti/giftiio.py | 6 ------ 2 files changed, 7 deletions(-) diff --git a/nibabel/gifti/gifti.py b/nibabel/gifti/gifti.py index e90b421120..c3199064b5 100644 --- a/nibabel/gifti/gifti.py +++ b/nibabel/gifti/gifti.py @@ -389,7 +389,6 @@ def metadata(self): class GiftiImage(FileBasedImage, xml.XmlSerializable): valid_exts = ('.gii',) files_types = (('image', '.gii'),) - valid_exts = ('.gii',) def __init__(self, header=None, extra=None, file_map=None, meta=None, labeltable=None, darrays=None, version="1.0"): diff --git a/nibabel/gifti/giftiio.py b/nibabel/gifti/giftiio.py index 21b6f34be6..fcd1a48847 100644 --- a/nibabel/gifti/giftiio.py +++ b/nibabel/gifti/giftiio.py @@ -10,14 +10,9 @@ # Stephan Gerhard, Oktober 2010 ############## -import warnings - import numpy as np -warnings.warn('Please use nibabel.load/save.', DeprecationWarning) - - @np.deprecate_with_doc("Use nibabel.load() instead.") def read(filename): """ Load a Gifti image from a file @@ -84,4 +79,3 @@ def write(image, filename): """ from ..loadsave import save return save(image, filename) -