From 674546df743bb6a008ec40bb7061bd2189bc88e5 Mon Sep 17 00:00:00 2001
From: teogale
Date: Wed, 18 Sep 2019 15:30:46 +0200
Subject: [PATCH] added test for asciiimageio.py and test_tiffio.py added
installation of pillow via setup (review based) minor modification of
asciiimageio and tiff
---
.circleci/requirements_testing.txt | 1 +
.travis.yml | 1 +
neo/core/block.py | 1 +
neo/io/__init__.py | 16 ++++-----
neo/io/asciiimageio.py | 8 ++---
neo/io/tiffio.py | 13 ++++++--
neo/test/coretest/test_imagesequence.py | 7 ++--
neo/test/iotest/test_asciiimageio.py | 43 +++++++++++++++++++++++++
neo/test/iotest/test_tiffio.py | 43 +++++++++++++++++++++++++
setup.py | 1 +
10 files changed, 116 insertions(+), 18 deletions(-)
create mode 100644 neo/test/iotest/test_asciiimageio.py
create mode 100644 neo/test/iotest/test_tiffio.py
diff --git a/.circleci/requirements_testing.txt b/.circleci/requirements_testing.txt
index cf7fccc67..2d65411c5 100644
--- a/.circleci/requirements_testing.txt
+++ b/.circleci/requirements_testing.txt
@@ -9,3 +9,4 @@ ipython
https://github.com/nsdf/nsdf/archive/0.1.tar.gz
coverage
coveralls
+pillow
diff --git a/.travis.yml b/.travis.yml
index 08a307fa7..b950a7855 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,6 +10,7 @@ install:
- pip install -r requirements.txt
- pip install coveralls
- pip install .
+ - pip install pillow
# command to run tests, e.g. python setup.py test
script:
nosetests --with-coverage --cover-package=neo
diff --git a/neo/core/block.py b/neo/core/block.py
index 3742db589..dfd4c0469 100644
--- a/neo/core/block.py
+++ b/neo/core/block.py
@@ -98,6 +98,7 @@ def __init__(self, name=None, description=None, file_origin=None,
self.file_datetime = file_datetime
self.rec_datetime = rec_datetime
self.index = index
+ self.regionsofinterest = []
@property
def data_children_recur(self):
diff --git a/neo/io/__init__.py b/neo/io/__init__.py
index 61cd28437..dbf8e1890 100644
--- a/neo/io/__init__.py
+++ b/neo/io/__init__.py
@@ -17,10 +17,10 @@
.. autoclass:: neo.io.AlphaOmegaIO
-.. autoclass:: neo.io.AsciiSignalIO
-
.. autoclass:: neo.io.AsciiImageIO
+.. autoclass:: neo.io.AsciiSignalIO
+
.. autoclass:: neo.io.AsciiSpikeTrainIO
.. autoclass:: neo.io.AxographIO
@@ -85,10 +85,10 @@
.. autoclass:: neo.io.StimfitIO
-.. autoclass:: neo.io.TiffIO
-
.. autoclass:: neo.io.TdtIO
+.. autoclass:: neo.io.TiffIO
+
.. autoclass:: neo.io.WinEdrIO
.. autoclass:: neo.io.WinWcpIO
@@ -114,8 +114,8 @@
# print("\n loading with API...")
from neo.io.alphaomegaio import AlphaOmegaIO
-from neo.io.asciisignalio import AsciiSignalIO
from neo.io.asciiimageio import AsciiImageIO
+from neo.io.asciisignalio import AsciiSignalIO
from neo.io.asciispiketrainio import AsciiSpikeTrainIO
from neo.io.axographio import AxographIO
from neo.io.axonio import AxonIO
@@ -152,15 +152,15 @@
from neo.io.rawmcsio import RawMCSIO
from neo.io.spike2io import Spike2IO
from neo.io.stimfitio import StimfitIO
-from neo.io.tiffio import TiffIO
from neo.io.tdtio import TdtIO
+from neo.io.tiffio import TiffIO
from neo.io.winedrio import WinEdrIO
from neo.io.winwcpio import WinWcpIO
iolist = [
AlphaOmegaIO,
- AsciiSignalIO,
AsciiImageIO,
+ AsciiSignalIO,
AsciiSpikeTrainIO,
AxographIO,
AxonIO,
@@ -195,8 +195,8 @@
RawMCSIO,
Spike2IO,
StimfitIO,
- TiffIO,
TdtIO,
+ TiffIO,
WinEdrIO,
WinWcpIO
]
diff --git a/neo/io/asciiimageio.py b/neo/io/asciiimageio.py
index 0db2cddc2..a6d5962e1 100644
--- a/neo/io/asciiimageio.py
+++ b/neo/io/asciiimageio.py
@@ -62,13 +62,12 @@ def __init__(self, file_name=None, nb_frame=None, nb_row=None, nb_column=None, u
def read(self, lazy=False, **kwargs):
if lazy:
raise ValueError('This IO module does not support lazy loading')
- return [self.read_block(lazy=lazy, nb_frame=self.nb_frame, nb_row=self.nb_row,
- nb_column=self.nb_column, units=self.units, sampling_rate=self.sampling_rate,
- spatial_scale=self.spatial_scale, **kwargs)]
+ return [self.read_block(lazy=lazy, **kwargs)]
def read_block(self, lazy=False, **kwargs):
- data = open(self.filename, 'r').read()
+ file = open(self.filename, 'r')
+ data = file.read()
print("read block")
liste_value = []
record = []
@@ -93,6 +92,7 @@ def read_block(self, lazy=False, **kwargs):
image_sequence = ImageSequence(np.array(data, dtype='float'), units=self.units,
sampling_rate=self.sampling_rate, spatial_scale=self.spatial_scale)
+ file.close()
print("creating segment")
segment = Segment(file_origin=self.filename)
segment.imagesequences = [image_sequence]
diff --git a/neo/io/tiffio.py b/neo/io/tiffio.py
index 963487450..09f7af636 100644
--- a/neo/io/tiffio.py
+++ b/neo/io/tiffio.py
@@ -4,6 +4,12 @@
"""
import os
+try:
+ from PIL import Image
+ have_pil = True
+except ImportError:
+ have_pil = False
+
from PIL import Image
import numpy as np
from neo.core import ImageSequence, Segment, Block
@@ -68,6 +74,10 @@ class TiffIO(BaseIO):
def __init__(self, directory_path=None,units=None, sampling_rate=None,
spatial_scale=None, **kwargs):
+
+ if not have_pil:
+ raise Exception("Please install the pillow package to use TiffIO")
+
BaseIO.__init__(self, directory_path, **kwargs)
self.units = units
self.sampling_rate = sampling_rate
@@ -76,8 +86,7 @@ def __init__(self, directory_path=None,units=None, sampling_rate=None,
def read(self, lazy=False, **kwargs):
if lazy:
raise ValueError('This IO module does not support lazy loading')
- return [self.read_block(lazy=lazy, units=self.units, sampling_rate=self.sampling_rate,
- spatial_scale=self.spatial_scale, **kwargs)]
+ return [self.read_block(lazy=lazy, **kwargs)]
def read_block(self, lazy=False, **kwargs):
# to sort file
diff --git a/neo/test/coretest/test_imagesequence.py b/neo/test/coretest/test_imagesequence.py
index 393217f7c..31fd1e2a4 100644
--- a/neo/test/coretest/test_imagesequence.py
+++ b/neo/test/coretest/test_imagesequence.py
@@ -35,13 +35,14 @@ def test_error_spatial_scale(self):
ImageSequence(self.data, units='V', sampling_rate=500 * pq.Hz)
def test_units(self):
- with self.assertRaises(ValueError):
+ with self.assertRaises(TypeError):
ImageSequence(self.data, sampling_rate=500 * pq.Hz, spatial_scale='m')
# test method will be remove are rename
def test_something(self):
- l = ImageSequence(self.data, sampling_rate=500 * pq.Hz, units='V', spatial_scale='m')
+ l = ImageSequence(self.data, sampling_rate=500 * pq.Hz, units='V',
+ spatial_scale='m')
self.assertEqual(l.sampling_rate, 500 * pq.Hz)
self.assertEqual(l.spatial_scale, 'm')
@@ -75,8 +76,6 @@ def test_signal_from_region(self):
with self.assertRaises(ValueError):
ImageSequence(self.data, units='V', sampling_rate=500 * pq.Hz, spatial_scale='m').signal_from_region()
- m = ImageSequence(self.data, units='V', sampling_rate=500 * pq.Hz, spatial_scale='m').view()
- print(m.sampling_rate)
if __name__ == "__main__":
unittest.main()
diff --git a/neo/test/iotest/test_asciiimageio.py b/neo/test/iotest/test_asciiimageio.py
new file mode 100644
index 000000000..98ed3b8a0
--- /dev/null
+++ b/neo/test/iotest/test_asciiimageio.py
@@ -0,0 +1,43 @@
+"""
+Test of neo.io.asciiimageio
+"""
+import os
+import unittest
+import quantities as pq
+from neo.io import AsciiImageIO
+import numpy as np
+
+
+class TestAsciiImageIO(unittest.TestCase):
+
+ def test_read_txt(self):
+ img = ''
+ img_list = []
+ for frame in range(20):
+ img_list.append([])
+ for y in range(50):
+ img_list[frame].append([])
+ for x in range(50):
+ img += str(x)
+ img += '\t'
+ img_list[frame][y].append(x)
+ img_list = np.array(img_list)
+ file_name = "txt_test_file.txt"
+ file = open(file_name, mode="w")
+ file.write(str(img))
+ file.close()
+
+ object = AsciiImageIO(file_name='txt_test_file.txt',
+ nb_frame=20, nb_row=50, nb_column=50, units='V',
+ sampling_rate=1 * pq.Hz, spatial_scale=1 * pq.micrometer)
+ block = object.read_block()
+ self.assertEqual(len(block.segments), 1)
+ self.assertEqual(len(block.segments[0].imagesequences), 1)
+ self.assertEqual(block.segments[0].imagesequences[0].shape, (20, 50, 50))
+ self.assertEqual(block.segments[0].imagesequences[0].any(), img_list.any())
+
+ file.close()
+ os.remove(file_name)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/neo/test/iotest/test_tiffio.py b/neo/test/iotest/test_tiffio.py
new file mode 100644
index 000000000..9952a096e
--- /dev/null
+++ b/neo/test/iotest/test_tiffio.py
@@ -0,0 +1,43 @@
+
+import unittest
+import os
+from PIL import Image
+import numpy as np
+import shutil
+from neo.io.tiffio import TiffIO
+import quantities as pq
+
+class TestTiffIO(unittest.TestCase):
+
+
+ def test_read_group_of_tiff_grayscale(self):
+ directory = 'test_tiff'
+ if not os.path.exists(directory):
+ os.makedirs(directory)
+ # directory is live
+ img = []
+ for picture in range(10):
+ img.append([])
+ for y in range(50):
+ img[picture].append([])
+ for x in range(50):
+ img[picture][y].append(x)
+ img = np.array(img, dtype=float)
+ for image in range(10):
+ Image.fromarray(img[image]).save(directory+'/tiff_exemple'+str(image)+".tif")
+
+ ioclass = TiffIO(directory_path=directory, units='V', sampling_rate=1.0*pq.Hz,
+ spatial_scale=1.0*pq.micrometer)
+ blck = ioclass.read_block()
+ self.assertEqual(len(blck.segments), 1)
+ self.assertEqual(len(blck.segments[0].imagesequences), 1)
+ self.assertEqual(blck.segments[0].imagesequences[0].any(), img.any())
+ self.assertEqual(blck.segments[0].imagesequences[0].sampling_rate, 1.0*pq.Hz)
+ self.assertEqual(blck.segments[0].imagesequences[0].spatial_scale, 1.0 * pq.micrometer)
+
+ # end of directory
+ shutil.rmtree(directory)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/setup.py b/setup.py
index 56b8e253f..f629390e3 100755
--- a/setup.py
+++ b/setup.py
@@ -14,6 +14,7 @@
'neomatlabio': ['scipy>=0.12.0'],
'nixio': ['nixio>=1.5.0b2'],
'stimfitio': ['stfio'],
+ 'tiffio':['pillow']
}
if os.environ.get('TRAVIS') == 'true' and \