From 533dd62c7cc3c078c9eb775b0ae880a94aab5e6b Mon Sep 17 00:00:00 2001 From: Alexandre Gobbo Date: Thu, 12 Dec 2019 09:42:17 +0100 Subject: [PATCH] Startup --- script/scitest/io_test.py | 176 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 script/scitest/io_test.py diff --git a/script/scitest/io_test.py b/script/scitest/io_test.py new file mode 100644 index 0000000..6ad1c81 --- /dev/null +++ b/script/scitest/io_test.py @@ -0,0 +1,176 @@ +### +# Copyright 2011 Diamond Light Source Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +### + +""" +Test random class +import unittest +unittest.TestProgram(argv=["io_test"]) +""" +import unittest + +import scisoftpy as dnp + +TestFolder = "../../../uk.ac.diamond.scisoft.analysis/testfiles/images/" +IOTestFolder = TestFolder + "../gda/analysis/io/" +OutTestFolder = TestFolder + "../../test-scratch/" + +import os + +isjava = os.name == "java" + + +class Test(unittest.TestCase): + def load(self, name, testfolder=TestFolder): + path = testfolder + name + im = dnp.io.load(path) + print type(im[0]), im[0].shape + return im + + def colourload(self, name, testfolder=TestFolder): + path = testfolder + name + im = dnp.io.load(path, ascolour=True) + print type(im[0]), im[0].shape + return im[0] + + def testLoading(self): + import os + + print os.getcwd() + self.load("test.png") + self.load("testrgb.png") + + self.colourload("test.png") + im = self.colourload("testrgb.png") + print "slicing RGB: ", type(im[:5, 2]) + + self.load("test.jpg") + self.load("testlossy85.jpg") + self.load("testrgb.jpg") + self.load("testrgblossy85.jpg") + + self.colourload("test.jpg") + self.colourload("testrgb.jpg") + self.colourload("testrgblossy85.jpg") + + self.load("test.tiff") + self.load("test-df.tiff") + self.load("test-pb.tiff") + self.load("testrgb.tiff") + self.load("testrgb-df.tiff") + self.load("testrgb-lzw.tiff") + self.load("testrgb-pb.tiff") + try: + self.load("test-trunc.tiff") + except IOError, e: + print "Expected IO error caught:", e + except: + import sys + + print "Unexpected exception caught", sys.exc_info() + + self.colourload("testrgb.tiff") + self.colourload("testrgb-df.tiff") + self.colourload("testrgb-lzw.tiff") + self.colourload("testrgb-pb.tiff") + return True + + def testLoadingSRS(self): + dh = self.load("96356.dat", IOTestFolder + "SRSLoaderTest/") + print dh.eta + + def testLoadingNXS(self): + if isjava: + f = IOTestFolder + "NexusLoaderTest/" + nm = dnp.io.loadnexus(f + "FeKedge_1_15.nxs") + print 'There are %d datasets called "Energy"' % len(nm["Energy"]) + + def testLoadingHDF(self): + f = IOTestFolder + "NexusLoaderTest/" + t = dnp.io.load(f + "FeKedge_1_15.nxs", formats=["hdf5"]) + self.checkTree(t) + t = dnp.io.load(f + "FeKedge_1_15.nxs") + self.checkTree(t) + + def checkTree(self, t): + print t + g = t["entry1/instrument/FFI0"] + h = g["/entry1/instrument/FFI0"] + self.assertEquals(g, h, "relative and absolute do not match!") + ga = g[".."] + assert ga is t["entry1/instrument"], "parent is wrong!" + assert g["."] is g, "self is wrong!" + print t["entry1/instrument/FFI0/../../"] + print t["entry1/counterTimer01"].keys() + l = t.getnodes("Energy") + print "List of energy datasets is:", len(l) + assert len(l) is 1, "Number of energy datasets should be 1" + d = l[0] + print type(d) + assert d.shape == (489,), "Wrong shape" + dd = d[...] + assert dd.shape == (489,), "Wrong shape" + print type(d), type(dd) + + def save(self, name, data, testfolder=OutTestFolder): + path = testfolder + name + dnp.io.save(path, data) + + def testSaving(self): + d = dnp.arange(100).reshape(10, 10) % 3 + self.save("chequered.png", d) + im = self.load("chequered.png", testfolder=OutTestFolder) + im = self.load("test.png") + self.save("grey.png", im) + im2 = self.load("grey.png", testfolder=OutTestFolder) + + def testSavingOthers(self): + im = self.colourload("testrgb.png") + self.save("colour.png", im) + im2 = self.colourload("colour.png", testfolder=OutTestFolder) + + def testSavingBits(self): + d = dnp.arange(12 * 32).reshape((12, 32)) + b = dnp.abs(dnp.array(d, dnp.int8)) + b[b < 0] = 0 + print b.min(), b.max() + dnp.io.save(OutTestFolder + "uint.tiff", d, bits=32, signed=False) + dnp.io.save(OutTestFolder + "ushort.tiff", d, bits=16, signed=False) + dnp.io.save(OutTestFolder + "ubyte.tiff", b, bits=8, signed=False) + dnp.io.save(OutTestFolder + "int.tiff", d, bits=32) + dnp.io.save(OutTestFolder + "short.tiff", d, bits=16) + dnp.io.save(OutTestFolder + "byte.tiff", dnp.array(d, dnp.int8), bits=8) + dnp.io.save(OutTestFolder + "double.tiff", d, bits=33) + dnp.io.save(OutTestFolder + "float.tiff", d, bits=33) + dnp.io.save(OutTestFolder + "short.png", d, bits=16) + dnp.io.save(OutTestFolder + "byte.png", b, bits=8) + + def testB16data(self): + d = dnp.io.load(IOTestFolder + "SRSLoaderTest/34146.dat", formats=["srs"]) + print d.keys() + print d.metadata.keys() + print d.metadata.values() + + def testNulldata(self): + try: + d = self.load("null.dat") + except Exception, e: + print "Expected exception caught:", e + + +if __name__ == "__main__": + # import sys;sys.argv = ['', 'Test.testName'] + __import__("__main__").Test = Test + unittest.main() \ No newline at end of file