From 45b90619ff5a5faf567d196b662576863f49796d Mon Sep 17 00:00:00 2001 From: jevans Date: Mon, 1 Jul 2013 18:46:46 -0400 Subject: [PATCH 01/54] Filled in reader requirement standard feature numbers. Closes #66 --- glymur/core.py | 88 +++++++++++++++++++++++++++++------ glymur/test/test_opj_suite.py | 20 ++++---- 2 files changed, 84 insertions(+), 24 deletions(-) diff --git a/glymur/core.py b/glymur/core.py index 6483558..32b6818 100644 --- a/glymur/core.py +++ b/glymur/core.py @@ -98,32 +98,92 @@ _capabilities_display = { 3: '3'} # Reader requirements -RREQ_UNRESTRICTED_JPEG2000_PART_1 = 5 -RREQ_UNRESTRICTED_JPEG2000_PART_2 = 6 -RREQ_CMYK_ENUMERATED_COLORSPACE = 55 -RREQ_CMYK_ENUMERATED_COLORSPACE = 55 -RREQ_E_SRGB_ENUMERATED_COLORSPACE = 60 -RREQ_ROMM_RGB_ENUMERATED_COLORSPACE = 61 +#RREQ_UNRESTRICTED_JPEG2000_PART_1 = 5 +#RREQ_UNRESTRICTED_JPEG2000_PART_2 = 6 +#RREQ_CMYK_ENUMERATED_COLORSPACE = 55 +#RREQ_E_SRGB_ENUMERATED_COLORSPACE = 60 +#RREQ_ROMM_RGB_ENUMERATED_COLORSPACE = 61 _reader_requirements_display = { 0: 'File not completely understood', 1: 'Deprecated', 2: 'Contains multiple composition layers', 3: 'Deprecated', 4: 'JPEG 2000 Part 1 Profile 1 codestream', - RREQ_UNRESTRICTED_JPEG2000_PART_1: - 'Unrestricted JPEG 2000 Part 1 codestream, ITU-T Rec. T.800 ' + 5: 'Unrestricted JPEG 2000 Part 1 codestream, ITU-T Rec. T.800 ' + '| ISO/IEC 15444-1', - RREQ_UNRESTRICTED_JPEG2000_PART_2: - 'Unrestricted JPEG 2000 Part 2 codestream', - 7: 'JPEG codestream as defined in ISO/IEC 10918-1', + 6: 'Unrestricted JPEG 2000 Part 2 codestream', + 7: 'JPEG codestream as defined in ISO/IEC 10918-1', 8: 'Deprecated', 9: 'Non-premultiplied opacity channel', 10: 'Premultiplied opacity channel', + 11: 'Chroma-key based opacity', 12: 'Deprecated', + 13: 'Fragmented codestream where all fragments are in file and in order', + 14: 'Fragmented codestream where all fragments are in file ' + + 'but are out of order', + 15: 'Fragmented codestream where not all fragments are within the file ' + + 'but are all in locally accessible files', + 16: 'Fragmented codestream where some fragments may be accessible ' + + 'only through a URL specified network connection', + 17: 'Compositing required to produce rendered result from multiple ' + + 'compositing layers', 18: 'Deprecated', + 19: 'Deprecated', + 20: 'Deprecated', + 21: 'At least one compositing layer consists of multiple codestreams', + 22: 'Deprecated', + 23: 'Colourspace transformations are required to combine compositing ' + + 'layers; not all compositing layers are in the same colourspace', + 24: 'Deprecated', + 25: 'Deprecated', + 26: 'First animation layer does not cover entire rendered result', + 27: 'Deprecated', + 28: 'Reuse of animation layers', + 29: 'Deprecated', + 30: 'Some animated frames are non-persistent', + 31: 'Deprecated', + 32: 'Rendered result involves scaling within a layer', + 33: 'Rendered result involves scaling between layers', + 34: 'ROI metadata', + 35: 'IPR metadata', + 36: 'Content metadata', + 37: 'History metadata', + 38: 'Creation metadata', + 39: 'JPX digital signatures', + 40: 'JPX checksums', + 41: 'Desires Graphics Arts Reproduction specified', + 42: 'Deprecated', 43: '(Deprecated) compositing layer uses restricted ICC profile', 44: 'Compositing layer uses Any ICC profile', 45: 'Deprecated', - RREQ_CMYK_ENUMERATED_COLORSPACE: 'CMYK enumerated colorspace', - RREQ_E_SRGB_ENUMERATED_COLORSPACE: 'e-sRGB enumerated colorspace', - RREQ_ROMM_RGB_ENUMERATED_COLORSPACE: 'ROMM_RGB enumerated colorspace'} + 46: 'Deprecated', + 47: 'BiLevel 1 enumerated colourspace', + 48: 'BiLevel 2 enumerated colourspace', + 49: 'YCbCr 1 enumerated colourspace', + 50: 'YCbCr 2 enumerated colourspace', + 51: 'YCbCr 3 enumerated colourspace', + 52: 'PhotoYCC enumerated colourspace', + 53: 'YCCK enumerated colourspace', + 54: 'CMY enumerated colourspace', + 55: 'CMYK enumerated colorspace', + 56: 'CIELab enumerated colourspace with default parameters', + 57: 'CIELab enumerated colourspace with non-default parameters', + 58: 'CIEJab enumerated colourspace with default parameters', + 59: 'CIEJab enumerated colourspace with non-default parameters', + 60: 'e-sRGB enumerated colorspace', + 61: 'ROMM_RGB enumerated colorspace', + 62: 'Non-square samples', + 63: 'Deprecated', + 64: 'Deprecated', + 65: 'Deprecated', + 66: 'Deprecated', + 67: 'GIS metadata XML box', + 68: 'JPSEC extensions in codestream as specified by ISO/IEC 15444-8', + 69: 'JP3D extensions in codestream as specified by ISO/IEC 15444-10', + 70: 'Deprecated', + 71: 'e-sYCC enumerated colourspace', + 72: 'JPEG 2000 Part 2 codestream as restricted by baseline conformance ' + + 'requirements in M.9.2.3', + 73: 'YPbPr(1125/60) enumerated colourspace', + 74: 'YPbPr(1250/50) enumerated colourspace'} + diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 4e47971..d64810e 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4376,8 +4376,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].minor_version, 0) # Reader requirements talk. - self.assertTrue(glymur.core.RREQ_E_SRGB_ENUMERATED_COLORSPACE - in jp2.box[2].standard_flag) + # e-SRGB enumerated colourspace + self.assertTrue(60 in jp2.box[2].standard_flag) # Jp2 Header # Image header @@ -6375,8 +6375,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].compatibility_list[2], 'jpx ') # Reader requirements talk. - self.assertTrue(glymur.core.RREQ_UNRESTRICTED_JPEG2000_PART_1 - in jp2.box[2].standard_flag) + # unrestricted jpeg 2000 part 1 + self.assertTrue(5 in jp2.box[2].standard_flag) # Jp2 Header # Image header @@ -6586,8 +6586,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].compatibility_list[2], 'jpx ') # Reader requirements talk. - self.assertTrue(glymur.core.RREQ_UNRESTRICTED_JPEG2000_PART_1 - in jp2.box[2].standard_flag) + # unrestricted jpeg 2000 part 1 + self.assertTrue(5 in jp2.box[2].standard_flag) # Jp2 Header # Image header @@ -6802,8 +6802,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].compatibility_list[2], 'jpx ') # Reader requirements talk. - self.assertTrue(glymur.core.RREQ_CMYK_ENUMERATED_COLORSPACE - in jp2.box[2].standard_flag) + # cmyk colourspace + self.assertTrue(55 in jp2.box[2].standard_flag) # Jp2 Header # Image header @@ -6916,8 +6916,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(jp2.box[1].compatibility_list[2], 'jpx ') # Reader requirements talk. - self.assertTrue(glymur.core.RREQ_UNRESTRICTED_JPEG2000_PART_1 - in jp2.box[2].standard_flag) + # unrestricted jpeg 2000 part 1 + self.assertTrue(5 in jp2.box[2].standard_flag) # Jp2 Header # Image header From 5a7c4102886c9337969383d0ee03678827934123 Mon Sep 17 00:00:00 2001 From: jevans Date: Tue, 2 Jul 2013 20:42:05 -0400 Subject: [PATCH 02/54] Support for opj_version, opj_set_default_decoder_parameters. --- glymur/core.py | 1 - glymur/jp2k.py | 66 ++++++++++++++++++++++++++++++-- glymur/lib/__init__.py | 3 +- glymur/lib/openjpeg.py | 58 ++++++++++++++++++++++++++++ glymur/lib/test/test_openjpeg.py | 38 ++++++++++++++++++ glymur/test/test_jp2k_15.py | 47 +++++++++++++++++++++++ 6 files changed, 207 insertions(+), 6 deletions(-) create mode 100644 glymur/lib/openjpeg.py create mode 100644 glymur/lib/test/test_openjpeg.py create mode 100644 glymur/test/test_jp2k_15.py diff --git a/glymur/core.py b/glymur/core.py index 32b6818..05af436 100644 --- a/glymur/core.py +++ b/glymur/core.py @@ -186,4 +186,3 @@ _reader_requirements_display = { + 'requirements in M.9.2.3', 73: 'YPbPr(1125/60) enumerated colourspace', 74: 'YPbPr(1250/50) enumerated colourspace'} - diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 96ead49..4219218 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -18,6 +18,7 @@ import numpy as np from .codestream import Codestream from .core import * from .jp2box import * +from .lib import openjpeg as opj from .lib import openjp2 as opj2 _cspace_map = {'rgb': opj2._CLRSPC_SRGB, @@ -544,16 +545,17 @@ class Jp2k(Jp2kBox): jp2 = Jp2k(filename) return jp2 - def read(self, reduce=0, layer=0, area=None, tile=None, verbose=False): + def read(self, **kwargs): """Read a JPEG 2000 image. Parameters ---------- - layer : int, optional - Number of quality layer to decode. reduce : int, optional Factor by which to reduce output resolution. Use -1 to get the - lowest resolution thumbnail. + lowest resolution thumbnail. This is the only keyword option + available to use when only OpenJPEG version 1.5.1 is present. + layer : int, optional + Number of quality layer to decode. area : tuple, optional Specifies decoding image area, (first_row, first_col, last_row, last_col) @@ -587,6 +589,62 @@ class Jp2k(Jp2kBox): >>> thumbnail.shape (46, 81, 3) """ + if opj2._OPENJP2 is not None: + img_array = self._read_openjp2(**kwargs) + else: + img_array = self._read_openjpeg(**kwargs) + return img_array + + def _read_openjpeg(self, reduce=0): + """Read a JPEG 2000 image using libopenjpeg. + + Parameters + ---------- + reduce : int, optional + Factor by which to reduce output resolution. Use -1 to get the + lowest resolution thumbnail. + + Returns + ------- + img_array : ndarray + The image data. + + Raises + ------ + IOError + If the image has differing subsample factors. + """ + raise NotImplementedError("not there yet") + + def _read_openjp2(self, reduce=0, layer=0, area=None, tile=None, + verbose=False): + """Read a JPEG 2000 image using libopenjp2. + + Parameters + ---------- + layer : int, optional + Number of quality layer to decode. + reduce : int, optional + Factor by which to reduce output resolution. Use -1 to get the + lowest resolution thumbnail. + area : tuple, optional + Specifies decoding image area, + (first_row, first_col, last_row, last_col) + tile : int, optional + Number of tile to decode. + verbose : bool, optional + Print informational messages produced by the OpenJPEG library. + + Returns + ------- + img_array : ndarray + The image data. + + Raises + ------ + IOError + If the image has differing subsample factors. + """ # Check for differing subsample factors. codestream = self.get_codestream(header_only=True) dxs = np.array(codestream.segment[1].XRsiz) diff --git a/glymur/lib/__init__.py b/glymur/lib/__init__.py index ca7460c..8484e19 100644 --- a/glymur/lib/__init__.py +++ b/glymur/lib/__init__.py @@ -1,3 +1,4 @@ """This package organizes individual libraries employed by glymur.""" from . import openjp2 -from . import test +from . import openjpeg +#from . import test diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py new file mode 100644 index 0000000..b4b6ced --- /dev/null +++ b/glymur/lib/openjpeg.py @@ -0,0 +1,58 @@ +"""Wraps library calls to openjpeg. +""" + +import ctypes +from ctypes.util import find_library +import platform +import os + +if os.name == "nt": + _OPENJPEG = ctypes.windll.LoadLibrary('openjpeg') +else: + if platform.system() == 'Darwin': + _OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') +if _OPENJPEG is None: + # Make one last attempt. Does the system know where it is? + _OPENJPEG = find_library('openjpeg') + +OPJ_PATH_LEN = 4096 # maximum allowed size for filenames + + +class dparameters_t(ctypes.Structure): + # cp_reduce: the number of highest resolution levels to be discarded + _fields_ = [("cp_reduce", ctypes.c_int), + # cp_layer: the maximum number of quality layers to decode + ("cp_layer", ctypes.c_int), + # infile: input file name + ("infile", ctypes.c_char * OPJ_PATH_LEN), + # outfile: output file name + ("outfile", ctypes.c_char * OPJ_PATH_LEN), + # decod_format: input file format 0: J2K, 1: JP2, 2: JPT + ("decod_format", ctypes.c_int), + # cod_format: output file format 0: PGX, 1: PxM, 2: BMP + ("cod_format", ctypes.c_int), + # jpwl_correct: activates the JPWL correction capabilities + ("jpwl_correct", ctypes.c_bool), + # jpwl_exp_comps: expected number of components + ("jpwl_exp_comps", ctypes.c_int), + # jpwl_max_tiles: maximum number of tiles + ("jpwl_max_tiles", ctypes.c_int), + # cp_limit_decoding: whether decoding should be done on the + # entire codestream or be limited to the main header + ("cp_limit_decoding", ctypes.c_int), + ("flags", ctypes.c_uint)] + + +def _set_default_decoder_parameters(dparams_p): + """Wrapper for opj_set_default_decoder_parameters. + """ + argtypes = [ctypes.POINTER(dparameters_t)] + _OPENJPEG.opj_set_default_decoder_parameters.argtypes = argtypes + _OPENJPEG.opj_set_default_decoder_parameters(dparams_p) + + +def _version(): + """Wrapper for opj_version library routine.""" + _OPENJPEG.opj_version.restype = ctypes.c_char_p + v = _OPENJPEG.opj_version() + return v.decode('utf-8') diff --git a/glymur/lib/test/test_openjpeg.py b/glymur/lib/test/test_openjpeg.py new file mode 100644 index 0000000..9307191 --- /dev/null +++ b/glymur/lib/test/test_openjpeg.py @@ -0,0 +1,38 @@ +import ctypes +import unittest + +import glymur + +@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, + "Missing openjpeg library.") +class TestOpenJPEG(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_version(self): + v = glymur.lib.openjpeg._version() + parts = v.split('.') + self.assertEqual(parts[0], '1') + self.assertEqual(parts[1], '5') + + def test_set_default_decoder_parameters(self): + # Verify that we properly set the default decode parameters. + dp = glymur.lib.openjpeg.dparameters_t() + glymur.lib.openjpeg._set_default_decoder_parameters(ctypes.byref(dp)) + + self.assertEqual(dp.cp_reduce, 0) + self.assertEqual(dp.cp_layer, 0) + self.assertEqual(dp.infile, b'') + self.assertEqual(dp.outfile, b'') + self.assertEqual(dp.decod_format, -1) + self.assertEqual(dp.cod_format, -1) + self.assertEqual(dp.jpwl_correct, 0) + self.assertEqual(dp.jpwl_exp_comps, 0) + self.assertEqual(dp.jpwl_max_tiles, 0) + self.assertEqual(dp.cp_limit_decoding, 0) + self.assertEqual(dp.flags, 0) + diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py new file mode 100644 index 0000000..ef73183 --- /dev/null +++ b/glymur/test/test_jp2k_15.py @@ -0,0 +1,47 @@ +import os +import unittest + +import numpy as np + +import glymur +from glymur import Jp2k +from glymur.lib import openjpeg as opj + +try: + data_root = os.environ['OPJ_DATA_ROOT'] +except KeyError: + data_root = None +except: + raise + + +@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, + "Missing openjpeg library.") +class TestJp2k15(unittest.TestCase): + + def setUp(self): + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() + + def tearDown(self): + pass + + def test_layers(self): + # Layers not allowed for 1.5.1. + self.assertTrue(False) + + def test_area(self): + # Area option not allowed for 1.5.1. + self.assertTrue(False) + + def test_tile(self): + # Tile option not allowed for 1.5.1. + self.assertTrue(False) + + def test_verbose(self): + # Verbose option not allowed for 1.5.1. + self.assertTrue(False) + + +if __name__ == "__main__": + unittest.main() From 4bb034e9668745e82fc355074903026d0ffbfc6e Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 3 Jul 2013 07:47:29 -0400 Subject: [PATCH 03/54] Basic openjpeg 1.5.1 tests running on 64-bit linux. --- glymur/lib/openjpeg.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index b4b6ced..d2fceb1 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -11,9 +11,8 @@ if os.name == "nt": else: if platform.system() == 'Darwin': _OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') -if _OPENJPEG is None: - # Make one last attempt. Does the system know where it is? - _OPENJPEG = find_library('openjpeg') + elif platform.system() == 'Linux': + _OPENJPEG = ctypes.CDLL(find_library('openjpeg')) OPJ_PATH_LEN = 4096 # maximum allowed size for filenames From e071a96f68178e46addc3d44215094152ed65edc Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 3 Jul 2013 11:04:47 -0400 Subject: [PATCH 04/54] Reading goodstuff on 64-bit linux works, but nemo is oddly truncated. --- glymur/jp2k.py | 67 ++++++++++++++++++- glymur/lib/openjpeg.py | 126 +++++++++++++++++++++++++++++++++++- glymur/test/test_jp2k_15.py | 4 ++ 3 files changed, 193 insertions(+), 4 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 4219218..4a62021 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -614,7 +614,72 @@ class Jp2k(Jp2kBox): IOError If the image has differing subsample factors. """ - raise NotImplementedError("not there yet") + + # Set decoding parameters. + dparameters = opj.dparameters_t() + opj._set_default_decoder_parameters(ctypes.byref(dparameters)) + dparameters.cp_reduce = reduce + dparameters.decod_format = self._codec_format + + infile = self.filename.encode() + nelts = opj._PATH_LEN - len(infile) + infile += b'0' * nelts + dparameters.infile = infile + + dinfo = opj._create_decompress(dparameters.decod_format) + opj._setup_decoder(dinfo, dparameters) + + with open(self.filename, 'rb') as fp: + src = fp.read() + + cio = opj._cio_open(dinfo, src) + image = opj._decode(dinfo, cio) + ncomps = image.contents.numcomps + + component = image.contents.comps[0] + if component.sgnd: + if component.prec <= 8: + dtype = np.int8 + elif component.prec <= 16: + dtype = np.int16 + else: + raise RuntimeError("Unhandled precision, datatype") + else: + if component.prec <= 8: + dtype = np.uint8 + elif component.prec <= 16: + dtype = np.uint16 + else: + raise RuntimeError("Unhandled precision, datatype") + + nrows = image.contents.comps[0].h + ncols = image.contents.comps[0].w + ncomps = image.contents.numcomps + data = np.zeros((nrows, ncols, ncomps), dtype) + + for k in range(image.contents.numcomps): + component = image.contents.comps[k] + nrows = component.h + ncols = component.w + + if nrows == 0 or ncols == 0: + # Letting this situation continue would segfault + # Python. + msg = "Component {0} has dimensions {1} x {2}" + msg = msg.format(k, nrows, ncols) + raise IOError(msg) + + addr = ctypes.addressof(component.data.contents) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + x = np.ctypeslib.as_array( (ctypes.c_int32 * nrows * ncols).from_address(addr)) + data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) + + opj._cio_close(cio) + opj._destroy_decompress(dinfo) + opj._image_destroy(image) + + return data def _read_openjp2(self, reduce=0, layer=0, area=None, tile=None, verbose=False): diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index d2fceb1..4063a17 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -14,7 +14,50 @@ else: elif platform.system() == 'Linux': _OPENJPEG = ctypes.CDLL(find_library('openjpeg')) -OPJ_PATH_LEN = 4096 # maximum allowed size for filenames +_PATH_LEN = 4096 # maximum allowed size for filenames + + +class event_mgr_t(ctypes.Structure): + """Message handler object. + """ + _fields_ = [("error_handler", ctypes.c_void_p), + ("warning_handler", ctypes.c_void_p), + ("info_handler", ctypes.c_void_p)] + +class common_struct_t(ctypes.Structure): + """Common fields between JPEG 2000 compression and decompression contextx. + """ + _fields_ = [("event_mgr", ctypes.POINTER(event_mgr_t)), + ("client_data", ctypes.c_void_p), + ("is_decompressor", ctypes.c_bool), + ("codec_format", ctypes.c_int), + ("j2k_handle", ctypes.c_void_p), + ("jp2_handle", ctypes.c_void_p), + ("mj2_handle", ctypes.c_void_p)] + + +class dinfo_t(ctypes.Structure): + """Common fields between JPEG 2000 compression and decompression contextx. + This is for decompression contexts. + """ + pass + + +class cio_t(ctypes.Structure): + _fields_ = [# codec context + ("cinfo", ctypes.POINTER(common_struct_t)), + # STREAM_READ or STREAM_WRITE + ("openmode", ctypes.c_int), + # pointer to start of buffer + ("buffer", ctypes.POINTER(ctypes.c_char)), + # buffer size in bytes + ("length", ctypes.c_int), + # pointer to start of stream + ("start", ctypes.c_char_p), + # pointer to end of stream + ("end", ctypes.c_char_p), + # pointer to current position + ("bp", ctypes.c_char_p)] class dparameters_t(ctypes.Structure): @@ -23,9 +66,9 @@ class dparameters_t(ctypes.Structure): # cp_layer: the maximum number of quality layers to decode ("cp_layer", ctypes.c_int), # infile: input file name - ("infile", ctypes.c_char * OPJ_PATH_LEN), + ("infile", ctypes.c_char * _PATH_LEN), # outfile: output file name - ("outfile", ctypes.c_char * OPJ_PATH_LEN), + ("outfile", ctypes.c_char * _PATH_LEN), # decod_format: input file format 0: J2K, 1: JP2, 2: JPT ("decod_format", ctypes.c_int), # cod_format: output file format 0: PGX, 1: PxM, 2: BMP @@ -42,6 +85,77 @@ class dparameters_t(ctypes.Structure): ("flags", ctypes.c_uint)] +class image_comp_t(ctypes.Structure): + """Defines a single image component. """ + _fields_ = [("dx", ctypes.c_int), + ("dy", ctypes.c_int), + ("w", ctypes.c_int), + ("h", ctypes.c_int), + ("x0", ctypes.c_int), + ("y0", ctypes.c_int), + ("prec", ctypes.c_int), + ("bpp", ctypes.c_int), + ("sgnd", ctypes.c_int), + ("resno_decoded", ctypes.c_int), + ("factor", ctypes.c_int), + ("data", ctypes.POINTER(ctypes.c_int))] + + +class image_t(ctypes.Structure): + """Defines image data and characteristics.""" + _fields_ = [("x0", ctypes.c_int), + ("y0", ctypes.c_int), + ("x1", ctypes.c_int), + ("y1", ctypes.c_int), + ("numcomps", ctypes.c_int), + ("color_space", ctypes.c_int), + ("comps", ctypes.POINTER(image_comp_t)), + ("icc_profile_buf", ctypes.c_char_p), + ("icc_profile_len", ctypes.c_int)] + +def _cio_open(cinfo, src): + """Wrapper for openjpeg library function opj_cio_open.""" + argtypes = [ctypes.POINTER(common_struct_t), ctypes.c_char_p, ctypes.c_int] + _OPENJPEG.opj_cio_open.argtypes = argtypes + _OPENJPEG.opj_cio_open.restype = ctypes.POINTER(cio_t) + + cio = _OPENJPEG.opj_cio_open(ctypes.cast(cinfo, ctypes.POINTER(common_struct_t)), + src, len(src)) + return cio + +def _cio_close(cio): + """Wraps openjpeg library function cio_close. + """ + _OPENJPEG.opj_cio_close.argtypes = [ctypes.POINTER(cio_t)] + _OPENJPEG.opj_cio_close(cio) + +def _create_decompress(fmt): + """Wraps openjpeg library function opj_create_decompress. + """ + _OPENJPEG.opj_create_decompress.argtypes = [ctypes.c_int] + _OPENJPEG.opj_create_decompress.restype = ctypes.POINTER(dinfo_t) + dinfo = _OPENJPEG.opj_create_decompress(fmt) + return dinfo + +def _decode(dinfo, cio): + """Wrapper for opj_decode. + """ + argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(cio_t)] + _OPENJPEG.opj_decode.argtypes = argtypes + _OPENJPEG.opj_decode.restype = ctypes.POINTER(image_t) + image = _OPENJPEG.opj_decode(dinfo, cio) + return image + +def _destroy_decompress(dinfo): + """Wraps openjpeg library function opj_destroy_decompress.""" + _OPENJPEG.opj_destroy_decompress.argtypes = [ctypes.POINTER(dinfo_t)] + _OPENJPEG.opj_destroy_decompress(dinfo) + +def _image_destroy(image): + """Wraps openjpeg library function opj_image_destroy.""" + _OPENJPEG.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] + _OPENJPEG.opj_image_destroy(image) + def _set_default_decoder_parameters(dparams_p): """Wrapper for opj_set_default_decoder_parameters. """ @@ -50,6 +164,12 @@ def _set_default_decoder_parameters(dparams_p): _OPENJPEG.opj_set_default_decoder_parameters(dparams_p) +def _setup_decoder(dinfo, dparams): + """Wrapper for openjpeg library function opj_setup_decoder.""" + argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(dparameters_t)] + _OPENJPEG.opj_setup_decoder.argtypes = argtypes + _OPENJPEG.opj_setup_decoder(dinfo, dparams) + def _version(): """Wrapper for opj_version library routine.""" _OPENJPEG.opj_version.restype = ctypes.c_char_p diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index ef73183..eed72a3 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -42,6 +42,10 @@ class TestJp2k15(unittest.TestCase): # Verbose option not allowed for 1.5.1. self.assertTrue(False) + def test_differing_subsampling(self): + # Only images with same subsampling is allowed. + self.assertTrue(False) + if __name__ == "__main__": unittest.main() From 243e23f4e2f33cb877ca4986607c86e97524c5ee Mon Sep 17 00:00:00 2001 From: John G Evans Date: Wed, 3 Jul 2013 11:15:40 -0400 Subject: [PATCH 05/54] Preliminary support for python 2.7 on windows. --- glymur/lib/openjpeg.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index 4063a17..b288ab0 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -7,7 +7,9 @@ import platform import os if os.name == "nt": - _OPENJPEG = ctypes.windll.LoadLibrary('openjpeg') + path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', + 'bin', 'openjpeg.dll') + _OPENJPEG = ctypes.windll.LoadLibrary(path) else: if platform.system() == 'Darwin': _OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') From 933cddf0578efab51ff74ec316417849263a6ce2 Mon Sep 17 00:00:00 2001 From: jevans Date: Wed, 3 Jul 2013 21:40:46 -0400 Subject: [PATCH 06/54] Changed nemo.jp2 to only have a single tile --- glymur/data/nemo.jp2 | Bin 1136554 -> 1135423 bytes glymur/jp2k.py | 10 ++-- glymur/test/test_callbacks.py | 22 ++++----- glymur/test/test_jp2k.py | 25 +++------- glymur/test/test_opj_suite_neg.py | 16 +++---- glymur/test/test_printing.py | 74 +++++++++++++++--------------- 6 files changed, 65 insertions(+), 82 deletions(-) diff --git a/glymur/data/nemo.jp2 b/glymur/data/nemo.jp2 index 2bb8638b80ce3f116bd5f2197a40198c0dfc7e5c..55d199cfe6ebc1630bd87a238c6f4cb4b7333d9d 100644 GIT binary patch literal 1135423 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%0A&J92}(18s|Kp%nR6swY7$uP6T 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 _5=3rsS*qOqi?#WJSeBwAQSl& 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%0D+*~59ll9= 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

m)vPCMGx)xk_3) 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¾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 $f15Z#&Bte{RTwmz`ROsK2yeQY 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 gza8e)?L|Td}9d?bW%#_`_rWfoya;B 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

*!( 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 z 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%0AS}Tw*VHoXnsc&!c9lt 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≧i9H7#AHH^U^Le1#2&D$*li3KBja-0eQbax@-&$M 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 poJ>#zDM!PPQ_r?1!GlSbKb=7r@e4*J|Sps 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

Q6@ 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�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 r4EU9T4!Lq7PsH{I`_?p`=85g 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

l2ON1 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�DhC;@Is4OIKL94_b2^QyszjDNu*KV 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ΜmTS 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 z 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

|aCyi-mj6VhnI3%SpI?E3k^ASZ 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 J@njMR9YK8# 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�yC$}UnV@}|v_9z^DSqNx&+~lX3TG92F6P&V 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�LUaWen@?R>fzw|tG0!wF#SXQ%yKxiWVt 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 import glymur >>> jfile = glymur.data.nemo() >>> jp2 = glymur.Jp2k(jfile) - >>> data = jp2.read(reduce=3) + >>> data = jp2.read(reduce=1) >>> from tempfile import NamedTemporaryFile >>> tfile = NamedTemporaryFile(suffix='.jp2', delete=False) >>> j = Jp2k(tfile.name, mode='wb') @@ -587,7 +587,7 @@ class Jp2k(Jp2kBox): >>> thumbnail = jp.read(reduce=-1) >>> thumbnail.shape - (46, 81, 3) + (728, 1296, 3) """ if opj2._OPENJP2 is not None: img_array = self._read_openjp2(**kwargs) @@ -930,14 +930,14 @@ class Jp2k(Jp2kBox): -------- >>> import glymur >>> jfile = glymur.data.nemo() - >>> jp = glymur.Jp2k(jfile) - >>> codestream = jp.get_codestream() + >>> jp2 = glymur.Jp2k(jfile) + >>> codestream = jp2.get_codestream() >>> print(codestream.segment[1]) SIZ marker segment @ (3137, 47) Profile: 2 Reference Grid Height, Width: (1456 x 2592) Vertical, Horizontal Reference Grid Offset: (0 x 0) - Reference Tile Height, Width: (512 x 512) + Reference Tile Height, Width: (1456 x 2592) Vertical, Horizontal Reference Tile Offset: (0 x 0) Bitdepth: (8, 8, 8) Signed: (False, False, False) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 9a1250b..331e20e 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -21,8 +21,8 @@ class TestCallbacks(unittest.TestCase): # Save sys.stdout. self.stdout = sys.stdout sys.stdout = StringIO() - self.jp2file = pkg_resources.resource_filename(glymur.__name__, - "data/nemo.jp2") + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() def tearDown(self): # Restore stdout. @@ -44,20 +44,16 @@ class TestCallbacks(unittest.TestCase): def test_info_warning_callbacks_on_read(self): # Verify that we get the expected stdio output when our internal info # callback handler is enabled. - j = glymur.Jp2k(self.jp2file) - d = j.read(reduce=3, verbose=True, area=(0, 0, 512, 1024)) + j = glymur.Jp2k(self.j2kfile) + d = j.read(reduce=1, verbose=True, area=(0, 0, 200, 150)) actual = sys.stdout.getvalue().strip() - lines = ['[INFO] Start to read j2k main header (3135).', + lines = ['[INFO] Start to read j2k main header (0).', '[INFO] Main header has been correctly decoded.', - '[INFO] Setting decoding area to 0,0,1024,512', - '[INFO] Header of tile 0 / 17 has been read.', - '[INFO] Tile 1/18 has been decoded.', - '[INFO] Image data has been updated with tile 1.', - '[INFO] Header of tile 1 / 17 has been read.', - '[INFO] Tile 2/18 has been decoded.', - '[INFO] Image data has been updated with tile 2.', - '[INFO] Stream reached its end !'] + '[INFO] Setting decoding area to 0,0,150,200', + '[INFO] Header of tile 0 / 0 has been read.', + '[INFO] Tile 1/1 has been decoded.', + '[INFO] Image data has been updated with tile 1.'] expected = '\n'.join(lines) self.assertEqual(actual, expected) diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index d9549c5..f2da55f 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -74,10 +74,8 @@ class TestJp2k(unittest.TestCase): os.unlink(cls._bad_xml_file) def setUp(self): - self.jp2file = pkg_resources.resource_filename(glymur.__name__, - "data/nemo.jp2") - self.j2kfile = pkg_resources.resource_filename(glymur.__name__, - "data/goodstuff.j2k") + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() def tearDown(self): pass @@ -92,11 +90,11 @@ class TestJp2k(unittest.TestCase): def test_reduce_max(self): # Verify that reduce=-1 gets us the lowest resolution image - j = Jp2k(self.jp2file) + j = Jp2k(self.j2kfile) thumbnail1 = j.read(reduce=-1) thumbnail2 = j.read(reduce=5) np.testing.assert_array_equal(thumbnail1, thumbnail2) - self.assertEqual(thumbnail1.shape, (46, 81, 3)) + self.assertEqual(thumbnail1.shape, (25, 15, 3)) def test_invalid_xml_box(self): # Should be able to recover from xml box with bad xml. @@ -145,15 +143,6 @@ class TestJp2k(unittest.TestCase): filename = 'this file does not actually exist on the file system.' jp2k = Jp2k(filename) - def test_nemo_tile(self): - # Issue 134, trouble reading first nemo tile. - j = Jp2k(self.jp2file) - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - tiledata = j.read(tile=0) - subsetdata = j.read(area=(0, 0, 512, 512)) - np.testing.assert_array_equal(tiledata, subsetdata) - def test_write_srgb_without_mct(self): j2k = Jp2k(self.j2kfile) expdata = j2k.read() @@ -178,7 +167,7 @@ class TestJp2k(unittest.TestCase): def test_write_cprl(self): # Issue 17 j = Jp2k(self.jp2file) - expdata = j.read(reduce=2) + expdata = j.read(reduce=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') ofile.write(expdata, prog='CPRL') @@ -220,7 +209,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[5].id, 'jp2c') self.assertEqual(jp2k.box[5].offset, 3127) - self.assertEqual(jp2k.box[5].length, 1133427) + self.assertEqual(jp2k.box[5].length, 1132296) # jp2h super box self.assertEqual(len(jp2k.box[2].box), 2) @@ -540,7 +529,7 @@ class TestJp2k(unittest.TestCase): def test_asoc_label_box(self): # Construct a fake file with an asoc and a label box, as # OpenJPEG doesn't have such a file. - data = Jp2k(self.jp2file).read(reduce=3) + data = Jp2k(self.jp2file).read(reduce=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') j.write(data) diff --git a/glymur/test/test_opj_suite_neg.py b/glymur/test/test_opj_suite_neg.py index 5754e16..78d6154 100644 --- a/glymur/test/test_opj_suite_neg.py +++ b/glymur/test/test_opj_suite_neg.py @@ -65,8 +65,8 @@ def read_image(infile): class TestSuiteNegative(unittest.TestCase): def setUp(self): - self.jp2file = pkg_resources.resource_filename(glymur.__name__, - "data/nemo.jp2") + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() def tearDown(self): pass @@ -156,8 +156,8 @@ class TestSuiteNegative(unittest.TestCase): def test_precinct_size_not_multiple_of_two(self): # Seems like precinct sizes should be powers of two. - ifile = Jp2k(self.jp2file) - data = ifile.read(reduce=3) + ifile = Jp2k(self.j2kfile) + data = ifile.read(reduce=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: @@ -165,8 +165,8 @@ class TestSuiteNegative(unittest.TestCase): def test_codeblock_size_not_multiple_of_two(self): # Seems like code block sizes should be powers of two. - ifile = Jp2k(self.jp2file) - data = ifile.read(reduce=3) + ifile = Jp2k(self.j2kfile) + data = ifile.read(reduce=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: @@ -175,8 +175,8 @@ class TestSuiteNegative(unittest.TestCase): def test_codeblock_size_with_precinct_size(self): # Seems like code block sizes should never exceed half that of # precinct size. - ifile = Jp2k(self.jp2file) - data = ifile.read(reduce=3) + ifile = Jp2k(self.j2kfile) + data = ifile.read(reduce=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 4090a2d..5b93e09 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -34,7 +34,7 @@ class TestPrintingNeedsLib(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix='.jp2', delete=False) as tfile: cls._plain_nemo_file = tfile.name ijfile = Jp2k(jp2file) - data = ijfile.read(reduce=3) + data = ijfile.read(reduce=1) ojfile = Jp2k(cls._plain_nemo_file, 'wb') ojfile.write(data) @@ -43,8 +43,9 @@ class TestPrintingNeedsLib(unittest.TestCase): os.unlink(cls._plain_nemo_file) def setUp(self): - self.jp2file = pkg_resources.resource_filename(glymur.__name__, - "data/nemo.jp2") + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() + # Save sys.stdout. self.stdout = sys.stdout sys.stdout = StringIO() @@ -57,7 +58,7 @@ class TestPrintingNeedsLib(unittest.TestCase): " Compatibility: ['jp2 ']", 'JP2 Header Box (jp2h) @ (32, 45)', ' Image Header Box (ihdr) @ (40, 22)', - ' Size: [182 324 3]', + ' Size: [728 1296 3]', ' Bitdepth: 8', ' Signed: False', ' Compression: wavelet', @@ -66,15 +67,15 @@ class TestPrintingNeedsLib(unittest.TestCase): ' Method: enumerated colorspace', ' Precedence: 0', ' Colorspace: sRGB', - 'Contiguous Codestream Box (jp2c) @ (77, 112814)', + 'Contiguous Codestream Box (jp2c) @ (77, 1632355)', ' Main header:', ' SOC marker segment @ (85, 0)', ' SIZ marker segment @ (87, 47)', ' Profile: 2', - ' Reference Grid Height, Width: (182 x 324)', + ' Reference Grid Height, Width: (728 x 1296)', ' Vertical, Horizontal Reference Grid Offset: ' + '(0 x 0)', - ' Reference Tile Height, Width: (182 x 324)', + ' Reference Tile Height, Width: (728 x 1296)', ' Vertical, Horizontal Reference Tile Offset: ' + '(0 x 0)', ' Bitdepth: (8, 8, 8)', @@ -121,7 +122,7 @@ class TestPrintingNeedsLib(unittest.TestCase): def test_asoc_label_box(self): # Construct a fake file with an asoc and a label box, as # OpenJPEG doesn't have such a file. - data = glymur.Jp2k(self.jp2file).read(reduce=3) + data = glymur.Jp2k(self.jp2file).read(reduce=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = glymur.Jp2k(tfile.name, 'wb') j.write(data) @@ -177,7 +178,7 @@ class TestPrintingNeedsLib(unittest.TestCase): lst = actual.split('\n') lst = lst[1:] actual = '\n'.join(lst) - + self.maxDiff = None self.assertEqual(actual, self.expectedPlain) def test_entire_file(self): @@ -209,15 +210,15 @@ class TestPrinting(unittest.TestCase): def test_COC_segment(self): j = glymur.Jp2k(self.jp2file) codestream = j.get_codestream(header_only=False) - print(codestream.segment[5]) + print(codestream.segment[6]) actual = sys.stdout.getvalue().strip() - lines = ['COC marker segment @ (3233, 9)', + lines = ['COC marker segment @ (3260, 9)', ' Associated component: 1', ' Coding style for this component: ' + 'Entropy coder, PARTITION = 0', ' Coding style parameters:', - ' Number of resolutions: 6', + ' Number of resolutions: 2', ' Code block height, width: (64 x 64)', ' Wavelet transform: 5-3 reversible', ' Code block context:', @@ -230,6 +231,7 @@ class TestPrinting(unittest.TestCase): ' Segmentation symbols: False'] expected = '\n'.join(lines) + self.maxDiff = None self.assertEqual(actual, expected) def test_COD_segment(self): @@ -245,10 +247,10 @@ class TestPrinting(unittest.TestCase): ' EPH marker segments: False', ' Coding style parameters:', ' Progression order: LRCP', - ' Number of layers: 3', + ' Number of layers: 2', ' Multiple component transformation usage: ' + 'reversible', - ' Number of resolutions: 6', + ' Number of resolutions: 2', ' Code block height, width: (64 x 64)', ' Wavelet transform: 5-3 reversible', ' Precinct size: default, 2^15 x 2^15', @@ -392,7 +394,7 @@ class TestPrinting(unittest.TestCase): print(codestream.segment[-1]) actual = sys.stdout.getvalue().strip() - lines = ['EOC marker segment @ (1136552, 0)'] + lines = ['EOC marker segment @ (1135421, 0)'] expected = '\n'.join(lines) self.assertEqual(actual, expected) @@ -476,15 +478,13 @@ class TestPrinting(unittest.TestCase): def test_QCC_segment(self): j = glymur.Jp2k(self.jp2file) codestream = j.get_codestream(header_only=False) - print(codestream.segment[6]) + print(codestream.segment[7]) actual = sys.stdout.getvalue().strip() - lines = ['QCC marker segment @ (3244, 20)', + lines = ['QCC marker segment @ (3271, 8)', ' Associated Component: 1', ' Quantization style: no quantization, 2 guard bits', - ' Step size: [(0, 8), (0, 9), (0, 9), (0, 10), (0, 9), ' - + '(0, 9), (0, 10), (0, 9), (0, 9), (0, 10), (0, 9), (0, 9), ' - + '(0, 10), (0, 9), (0, 9), (0, 10)]'] + ' Step size: [(0, 8), (0, 9), (0, 9), (0, 10)]'] expected = '\n'.join(lines) self.assertEqual(actual, expected) @@ -495,11 +495,9 @@ class TestPrinting(unittest.TestCase): print(codestream.segment[3]) actual = sys.stdout.getvalue().strip() - lines = ['QCD marker segment @ (3200, 19)', + lines = ['QCD marker segment @ (3200, 7)', ' Quantization style: no quantization, 2 guard bits', - ' Step size: [(0, 8), (0, 9), (0, 9), (0, 10), (0, 9), ' - + '(0, 9), (0, 10), (0, 9), (0, 9), (0, 10), (0, 9), ' - + '(0, 9), (0, 10), (0, 9), (0, 9), (0, 10)]'] + ' Step size: [(0, 8), (0, 9), (0, 9), (0, 10)]'] expected = '\n'.join(lines) self.assertEqual(actual, expected) @@ -514,7 +512,7 @@ class TestPrinting(unittest.TestCase): ' Profile: 2', ' Reference Grid Height, Width: (1456 x 2592)', ' Vertical, Horizontal Reference Grid Offset: (0 x 0)', - ' Reference Tile Height, Width: (512 x 512)', + ' Reference Tile Height, Width: (1456 x 2592)', ' Vertical, Horizontal Reference Tile Offset: (0 x 0)', ' Bitdepth: (8, 8, 8)', ' Signed: (False, False, False)', @@ -537,26 +535,27 @@ class TestPrinting(unittest.TestCase): def test_SOD_segment(self): j = glymur.Jp2k(self.jp2file) codestream = j.get_codestream(header_only=False) - print(codestream.segment[9]) + print(codestream.segment[10]) actual = sys.stdout.getvalue().strip() - lines = ['SOD marker segment @ (3299, 0)'] + lines = ['SOD marker segment @ (3302, 0)'] expected = '\n'.join(lines) self.assertEqual(actual, expected) def test_SOT_segment(self): j = glymur.Jp2k(self.jp2file) codestream = j.get_codestream(header_only=False) - print(codestream.segment[4]) + print(codestream.segment[5]) actual = sys.stdout.getvalue().strip() - lines = ['SOT marker segment @ (3221, 10)', + lines = ['SOT marker segment @ (3248, 10)', ' Tile part index: 0', - ' Tile part length: 78629', + ' Tile part length: 1132173', ' Tile part instance: 0', ' Number of tile parts: 1'] expected = '\n'.join(lines) + self.maxDiff = None self.assertEqual(actual, expected) @unittest.skipIf(data_root is None, @@ -606,7 +605,7 @@ class TestPrinting(unittest.TestCase): ' Profile: 2', ' Reference Grid Height, Width: (1456 x 2592)', ' Vertical, Horizontal Reference Grid Offset: (0 x 0)', - ' Reference Tile Height, Width: (512 x 512)', + ' Reference Tile Height, Width: (1456 x 2592)', ' Vertical, Horizontal Reference Tile Offset: (0 x 0)', ' Bitdepth: (8, 8, 8)', ' Signed: (False, False, False)', @@ -619,10 +618,10 @@ class TestPrinting(unittest.TestCase): ' EPH marker segments: False', ' Coding style parameters:', ' Progression order: LRCP', - ' Number of layers: 3', + ' Number of layers: 2', ' Multiple component transformation usage: ' + 'reversible', - ' Number of resolutions: 6', + ' Number of resolutions: 2', ' Code block height, width: (64 x 64)', ' Wavelet transform: 5-3 reversible', ' Precinct size: default, 2^15 x 2^15', @@ -634,13 +633,12 @@ class TestPrinting(unittest.TestCase): ' Vertically stripe causal context: False', ' Predictable termination: False', ' Segmentation symbols: False', - ' QCD marker segment @ (3200, 19)', + ' QCD marker segment @ (3200, 7)', ' Quantization style: no quantization, ' + '2 guard bits', - ' Step size: [(0, 8), (0, 9), (0, 9), ' - + '(0, 10), (0, 9), (0, 9), (0, 10), (0, 9), (0, 9), ' - + '(0, 10), (0, 9), (0, 9), (0, 10), (0, 9), (0, 9), ' - + '(0, 10)]'] + ' Step size: [(0, 8), (0, 9), (0, 9), (0, 10)]', + ' CME marker segment @ (3209, 37)', + ' "Created by OpenJPEG version 2.0.0"'] expected = '\n'.join(lst) self.assertEqual(actual, expected) From 8db914fd76308d68e421b3bf0229713379097cb4 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 4 Jul 2013 12:38:08 -0400 Subject: [PATCH 07/54] OpenJPEG 1.5.1 passes basic tests now. --- glymur/jp2k.py | 19 +- glymur/test/__init__.py | 1 + glymur/test/test_config.py | 2 + glymur/test/test_jp2box.py | 2 + glymur/test/test_jp2k_15.py | 764 +++++++++++++++++++++++++++++++++- glymur/test/test_opj_suite.py | 89 +--- 6 files changed, 772 insertions(+), 105 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 2fd3dea..fc567cb 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -590,10 +590,10 @@ class Jp2k(Jp2kBox): (728, 1296, 3) """ if opj2._OPENJP2 is not None: - img_array = self._read_openjp2(**kwargs) + img = self._read_openjp2(**kwargs) else: - img_array = self._read_openjpeg(**kwargs) - return img_array + img = self._read_openjpeg(**kwargs) + return img def _read_openjpeg(self, reduce=0): """Read a JPEG 2000 image using libopenjpeg. @@ -679,6 +679,10 @@ class Jp2k(Jp2kBox): opj._destroy_decompress(dinfo) opj._image_destroy(image) + if data.shape[2] == 1: + data = data.view() + data.shape = data.shape[0:2] + return data def _read_openjp2(self, reduce=0, layer=0, area=None, tile=None, @@ -903,7 +907,16 @@ class Jp2k(Jp2kBox): >>> jfile = glymur.data.nemo() >>> jp = glymur.Jp2k(jfile) >>> components_lst = jp.read_bands(reduce=1) + + Raises + ------ + NotImplementedError + If the openjp2 library is not available. """ + if opj2._OPENJP2 is None: + msg = "Requires openjp2 library." + raise NotImplementedError(msg) + lst = self._read_common(reduce=reduce, layer=layer, area=area, diff --git a/glymur/test/__init__.py b/glymur/test/__init__.py index aec2d72..199a1f7 100644 --- a/glymur/test/__init__.py +++ b/glymur/test/__init__.py @@ -1,6 +1,7 @@ from .test_callbacks import TestCallbacks as callbacks from .test_codestream import TestCodestream as codestream from .test_jp2k import TestJp2k as jp2k +from .test_jp2k_15 import TestSuite as jp2k15 from .test_icc import TestICC as icc from .test_printing import TestPrinting as printing from .test_opj_suite import TestSuite as suite diff --git a/glymur/test/test_config.py b/glymur/test/test_config.py index 1abf02f..8f78804 100644 --- a/glymur/test/test_config.py +++ b/glymur/test/test_config.py @@ -29,6 +29,8 @@ class TestJp2k(unittest.TestCase): imp.reload(glymur) imp.reload(glymur.lib.openjp2) + @unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, + "Needs openjp2 library first.") def test_config_file_via_environ(self): """Verify that we can read a configuration file set via environ var.""" with tempfile.TemporaryDirectory() as tdir: diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index e0500f5..af85931 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -17,6 +17,8 @@ def load_tests(loader, tests, ignore): return tests +@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, + "Missing openjp2 library.") class TestChannelDefinition(unittest.TestCase): @classmethod diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index eed72a3..30f1a6b 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -1,5 +1,7 @@ import os +import sys import unittest +import warnings import numpy as np @@ -7,6 +9,8 @@ import glymur from glymur import Jp2k from glymur.lib import openjpeg as opj +from .fixtures import * + try: data_root = os.environ['OPJ_DATA_ROOT'] except KeyError: @@ -17,35 +21,767 @@ except: @unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, "Missing openjpeg library.") -class TestJp2k15(unittest.TestCase): +@unittest.skipIf(data_root is None, + "OPJ_DATA_ROOT environment variable not set") +class TestNegative(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 + cls.openjp2 = glymur.lib.openjp2._OPENJP2 + glymur.lib.openjp2._OPENJP2 = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJP2 + glymur.lib.openjp2._OPENJP2 = cls.openjp2 def setUp(self): - self.jp2file = glymur.data.nemo() self.j2kfile = glymur.data.goodstuff() def tearDown(self): pass - def test_layers(self): - # Layers not allowed for 1.5.1. - self.assertTrue(False) + def test_bands(self): + # Reading individual bands is an advanced maneuver. + jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') + jp2k = Jp2k(jfile) + with self.assertRaises(NotImplementedError) as ce: + jpdata = jp2k.read_bands() def test_area(self): # Area option not allowed for 1.5.1. - self.assertTrue(False) + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(area=(0, 0, 100, 100)) def test_tile(self): - # Tile option not allowed for 1.5.1. - self.assertTrue(False) + # tile option not allowed for 1.5.1. + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(tile=0) - def test_verbose(self): - # Verbose option not allowed for 1.5.1. - self.assertTrue(False) + def test_layer(self): + # layer option not allowed for 1.5.1. + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(layer=1) - def test_differing_subsampling(self): - # Only images with same subsampling is allowed. - self.assertTrue(False) +@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, + "Missing openjpeg library.") +@unittest.skipIf(data_root is None, + "OPJ_DATA_ROOT environment variable not set") +class TestSuite(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 + cls.openjp2 = glymur.lib.openjp2._OPENJP2 + glymur.lib.openjp2._OPENJP2 = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJP2 + glymur.lib.openjp2._OPENJP2 = cls.openjp2 + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_ETS_C0P0_p0_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_01.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') + with warnings.catch_warnings(): + # There's a 0xff30 marker segment. Not illegal, but we don't + # really know what to do with it. Just ignore. + warnings.simplefilter("ignore") + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_02.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_09_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=2) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_09.pgx') + pgxdata = read_pgx(pgxfile) + + self.assertTrue(peak_tolerance(jpdata, pgxdata) < 4) + self.assertTrue(mse(jpdata, pgxdata) < 1.47) + + def test_ETS_C0P0_p0_11_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_11.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C0P0_p0_12_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_12.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_16_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_16.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P1_p1_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p1_01.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_01_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') + with warnings.catch_warnings(): + # There's a 0xff30 marker segment. Not illegal, but we don't + # really know what to do with it. Just ignore. + warnings.simplefilter("ignore") + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_02_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_03_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_03_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_04_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.776) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.626) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.07) + + @unittest.skip("reading separate bands not allowed") + def test_ETS_C1P0_p0_05_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read_bands() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 2) + self.assertTrue(mse(jpdata[0], pgxdata) < 0.302) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 2) + self.assertTrue(mse(jpdata[1], pgxdata) < 0.307) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[2], pgxdata) < 2) + self.assertTrue(mse(jpdata[2], pgxdata) < 0.269) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_3.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[3], pgxdata) == 0) + self.assertTrue(mse(jpdata[3], pgxdata) == 0) + + @unittest.skip("reading separate bands not allowed") + def test_ETS_C1P0_p0_06_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_06.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read_bands() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 635) + self.assertTrue(mse(jpdata[0], pgxdata) < 11287) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 403) + self.assertTrue(mse(jpdata[1], pgxdata) < 6124) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[2], pgxdata) < 378) + self.assertTrue(mse(jpdata[2], pgxdata) < 3968) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_3.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[3], pgxdata) == 0) + self.assertTrue(mse(jpdata[3], pgxdata) == 0) + + def test_ETS_C1P0_p0_08_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=1) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_09_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_09_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_10_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_11_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_11_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P0_p0_12_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_12_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P0_p0_13_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_3.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 3], pgxdata) + + def test_ETS_C1P0_p0_14_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_15_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_15_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_16_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_16_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P1_p1_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_01_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P1_p1_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.765) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.616) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.051) + + @unittest.skip("reading separate bands not allowed") + def test_ETS_C1P1_p1_03_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_03.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read_bands() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 2) + self.assertTrue(mse(jpdata[0], pgxdata) < 0.3) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 2) + self.assertTrue(mse(jpdata[1], pgxdata) < 0.21) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[2], pgxdata) <= 1) + self.assertTrue(mse(jpdata[2], pgxdata) < 0.2) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_3.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[3], pgxdata) + + def test_ETS_C1P1_p1_04_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_04_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata, pgxdata) < 624) + self.assertTrue(mse(jpdata, pgxdata) < 3080) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P1_p1_05_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_05.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 8.458) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 9.816) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 10.154) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P1_p1_06_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.6) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.6) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 0.6) + + @unittest.skip("reading separate bands not allowed") + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P1_p1_07_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_07.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read_bands() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_07_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[0], pgxdata) <= 0) + self.assertTrue(mse(jpdata[0], pgxdata) <= 0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_07_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[1], pgxdata) <= 0) + self.assertTrue(mse(jpdata[1], pgxdata) <= 0) + + def test_ETS_JP2_file1(self): + jfile = os.path.join(data_root, 'input/conformance/file1.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_ETS_JP2_file2(self): + jfile = os.path.join(data_root, 'input/conformance/file2.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (640, 480, 3)) + + @unittest.skip("reading separate bands not allowed") + def test_ETS_JP2_file3(self): + jfile = os.path.join(data_root, 'input/conformance/file3.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read_bands() + self.assertEqual(jpdata[0].shape, (640, 480)) + self.assertEqual(jpdata[1].shape, (320, 240)) + self.assertEqual(jpdata[2].shape, (320, 240)) + + def test_ETS_JP2_file4(self): + jfile = os.path.join(data_root, 'input/conformance/file4.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768)) + + def test_ETS_JP2_file5(self): + jfile = os.path.join(data_root, 'input/conformance/file5.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_ETS_JP2_file6(self): + jfile = os.path.join(data_root, 'input/conformance/file6.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768)) + + def test_ETS_JP2_file7(self): + jfile = os.path.join(data_root, 'input/conformance/file7.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (640, 480, 3)) + + def test_ETS_JP2_file8(self): + jfile = os.path.join(data_root, 'input/conformance/file8.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (400, 700)) + + def test_ETS_JP2_file9(self): + jfile = os.path.join(data_root, 'input/conformance/file9.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_NR_DEC_Bretagne2_j2k_1_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/Bretagne2.j2k') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + def test_NR_DEC__00042_j2k_2_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/_00042.j2k') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_123_j2c_3_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/123.j2c') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + @unittest.skip("Should have worked, must be investigated.") + @unittest.skipIf(sys.hexversion < 0x03020000, + "Uses features introduced in 3.2.") + def test_NR_DEC_broken_jp2_4_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken.jp2') + with self.assertWarns(UserWarning) as cw: + # colr box has bad length. + jp2 = Jp2k(jfile) + with self.assertRaises(IOError): + data = jp2.read() + self.assertTrue(True) + + def test_NR_DEC_broken2_jp2_5_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken2.jp2') + with self.assertRaises(IOError): + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("Should have worked, must be investigated.") + @unittest.skipIf(sys.hexversion < 0x03020000, + "Uses features introduced in 3.2.") + def test_NR_DEC_broken3_jp2_6_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken3.jp2') + with self.assertWarns(UserWarning) as cw: + # colr box has bad length. + j = Jp2k(jfile) + + with self.assertRaises(IOError) as ce: + d = j.read() + + def test_NR_DEC_broken4_jp2_7_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken4.jp2') + with self.assertRaises(IOError): + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_bug_j2c_8_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/bug.j2c') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_buxI_j2k_9_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/buxI.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_buxR_j2k_10_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/buxR.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_Cannotreaddatawithnosizeknown_j2k_11_decode(self): + relpath = 'input/nonregression/Cannotreaddatawithnosizeknown.j2k' + jfile = os.path.join(data_root, relpath) + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_cthead1_j2k_12_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/cthead1.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_CT_Phillips_JPEG2K_Decompr_Problem_j2k_13_decode(self): + relpath = 'input/nonregression/CT_Phillips_JPEG2K_Decompr_Problem.j2k' + jfile = os.path.join(data_root, relpath) + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_illegalcolortransform_j2k_14_decode(self): + # Stream too short, expected SOT. + jfile = os.path.join(data_root, + 'input/nonregression/illegalcolortransform.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_j2k32_j2k_15_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/j2k32.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_kakadu_v4_4_openjpegv2_broken_j2k_16_decode(self): + relpath = 'input/nonregression/kakadu_v4-4_openjpegv2_broken.j2k' + jfile = os.path.join(data_root, relpath) + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_MarkerIsNotCompliant_j2k_17_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/MarkerIsNotCompliant.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_Marrin_jp2_18_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/Marrin.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("reading separate bands not allowed") + def test_NR_DEC_merged_jp2_19_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/merged.jp2') + data = Jp2k(jfile).read_bands() + self.assertTrue(True) + + def test_NR_DEC_movie_00000_j2k_20_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00000.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_movie_00001_j2k_21_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00001.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_movie_00002_j2k_22_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00002.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_lin_j2k_j2k_23_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-lin-j2k.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_win_j2k_j2k_24_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-win-j2k.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_lin_jp2_25_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-lin-jp2.jp2') + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_win_jp2_26_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-win-jp2.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_relax_jp2_27_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/relax.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_test_lossless_j2k_28_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/test_lossless.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_issue104_jpxstream_jp2_33_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/issue104_jpxstream.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("Should have worked, must be investigated.") + def test_NR_DEC_file_409752_jp2_40_decode(self): + jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2') + j = Jp2k(jfile) + data = j.read() + self.assertTrue(True) if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index d64810e..05c97dd 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -23,6 +23,7 @@ import numpy as np from glymur import Jp2k import glymur +from .fixtures import * try: data_root = os.environ['OPJ_DATA_ROOT'] @@ -32,94 +33,6 @@ except: raise -def mse(A, B): - """Mean Square Error""" - diff = A.astype(np.double) - B.astype(np.double) - #e = np.sqrt(np.mean(diff**2)) - e = np.mean(diff**2) - return e - - -def peak_tolerance(A, B): - """Peak Tolerance""" - diff = np.abs(A.astype(np.double) - B.astype(np.double)) - p = diff.max() - return p - - -def read_pgx(pgx_file): - """Helper function for reading the PGX comparison files. - - Open the file in ascii mode and read the header line. - Will look something like - - PG ML + 8 128 128 - PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d" - """ - header = '' - with open(pgx_file, 'rb') as fp: - while True: - x = fp.read(1) - if x[0] == 10 or x == '\n': - pos = fp.tell() - break - else: - if sys.hexversion < 0x03000000: - header += x - else: - header += chr(x[0]) - - header = header.rstrip() - n = re.split('\s', header) - - if (n[1][0] == 'M') and (sys.byteorder == 'little'): - swapbytes = True - elif (n[1][0] == 'L') and (sys.byteorder == 'big'): - swapbytes = True - else: - swapbytes = False - - if (len(n) == 6): - bitdepth = int(n[3]) - signed = bitdepth < 0 - if signed: - bitdepth = -1 * bitdepth - nrows = int(n[5]) - ncols = int(n[4]) - else: - bitdepth = int(n[2]) - signed = bitdepth < 0 - if signed: - bitdepth = -1 * bitdepth - nrows = int(n[4]) - ncols = int(n[3]) - - if signed: - if bitdepth <= 8: - dtype = np.int8 - elif bitdepth <= 16: - dtype = np.int16 - else: - raise RuntimeError("unhandled bitdepth") - else: - if bitdepth <= 8: - dtype = np.uint8 - elif bitdepth <= 16: - dtype = np.uint16 - else: - raise RuntimeError("unhandled bitdepth") - - shape = [nrows, ncols] - - # Reopen the file in binary mode and seek to the start of the binary - # data - with open(pgx_file, 'rb') as fp: - fp.seek(pos) - data = np.fromfile(file=fp, dtype=dtype).reshape(shape) - - return(data.byteswap(swapbytes)) - - @unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, "Missing openjp2 library.") @unittest.skipIf(data_root is None, From 5035220a265eb234548aa825590e517720045df4 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 4 Jul 2013 15:31:18 -0400 Subject: [PATCH 08/54] Added ExitStack support to 1.5.1 reader. --- glymur/jp2k.py | 120 +++++++++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index fc567cb..8314b7e 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -615,70 +615,74 @@ class Jp2k(Jp2kBox): If the image has differing subsample factors. """ - # Set decoding parameters. - dparameters = opj.dparameters_t() - opj._set_default_decoder_parameters(ctypes.byref(dparameters)) - dparameters.cp_reduce = reduce - dparameters.decod_format = self._codec_format + with ExitStack() as stack: + # Set decoding parameters. + dparameters = opj.dparameters_t() + opj._set_default_decoder_parameters(ctypes.byref(dparameters)) + dparameters.cp_reduce = reduce + dparameters.decod_format = self._codec_format + + infile = self.filename.encode() + nelts = opj._PATH_LEN - len(infile) + infile += b'0' * nelts + dparameters.infile = infile + + dinfo = opj._create_decompress(dparameters.decod_format) - infile = self.filename.encode() - nelts = opj._PATH_LEN - len(infile) - infile += b'0' * nelts - dparameters.infile = infile + opj._setup_decoder(dinfo, dparameters) + + with open(self.filename, 'rb') as fp: + src = fp.read() + cio = opj._cio_open(dinfo, src) - dinfo = opj._create_decompress(dparameters.decod_format) - opj._setup_decoder(dinfo, dparameters) - with open(self.filename, 'rb') as fp: - src = fp.read() + image = opj._decode(dinfo, cio) - cio = opj._cio_open(dinfo, src) - image = opj._decode(dinfo, cio) - ncomps = image.contents.numcomps + stack.callback(opj._image_destroy, image) + stack.callback(opj._destroy_decompress, dinfo) + stack.callback(opj._cio_close, cio) - component = image.contents.comps[0] - if component.sgnd: - if component.prec <= 8: - dtype = np.int8 - elif component.prec <= 16: - dtype = np.int16 + ncomps = image.contents.numcomps + + component = image.contents.comps[0] + if component.sgnd: + if component.prec <= 8: + dtype = np.int8 + elif component.prec <= 16: + dtype = np.int16 + else: + raise RuntimeError("Unhandled precision, datatype") else: - raise RuntimeError("Unhandled precision, datatype") - else: - if component.prec <= 8: - dtype = np.uint8 - elif component.prec <= 16: - dtype = np.uint16 - else: - raise RuntimeError("Unhandled precision, datatype") - - nrows = image.contents.comps[0].h - ncols = image.contents.comps[0].w - ncomps = image.contents.numcomps - data = np.zeros((nrows, ncols, ncomps), dtype) - - for k in range(image.contents.numcomps): - component = image.contents.comps[k] - nrows = component.h - ncols = component.w - - if nrows == 0 or ncols == 0: - # Letting this situation continue would segfault - # Python. - msg = "Component {0} has dimensions {1} x {2}" - msg = msg.format(k, nrows, ncols) - raise IOError(msg) - - addr = ctypes.addressof(component.data.contents) - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - x = np.ctypeslib.as_array( (ctypes.c_int32 * nrows * ncols).from_address(addr)) - data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) - - opj._cio_close(cio) - opj._destroy_decompress(dinfo) - opj._image_destroy(image) - + if component.prec <= 8: + dtype = np.uint8 + elif component.prec <= 16: + dtype = np.uint16 + else: + raise RuntimeError("Unhandled precision, datatype") + + nrows = image.contents.comps[0].h + ncols = image.contents.comps[0].w + ncomps = image.contents.numcomps + data = np.zeros((nrows, ncols, ncomps), dtype) + + for k in range(image.contents.numcomps): + component = image.contents.comps[k] + nrows = component.h + ncols = component.w + + if nrows == 0 or ncols == 0: + # Letting this situation continue would segfault + # Python. + msg = "Component {0} has dimensions {1} x {2}" + msg = msg.format(k, nrows, ncols) + raise IOError(msg) + + addr = ctypes.addressof(component.data.contents) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + x = np.ctypeslib.as_array( (ctypes.c_int32 * nrows * ncols).from_address(addr)) + data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) + if data.shape[2] == 1: data = data.view() data.shape = data.shape[0:2] From afc1640d17e9e1540529d9e48837ff1d18ad38a9 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 4 Jul 2013 17:34:01 -0400 Subject: [PATCH 09/54] Reworked configuration testing to look at both openjp2 and openjpeg. --- glymur/lib/openjp2.py | 60 +++++++++++++++++++++++++++++++------- glymur/test/__init__.py | 1 + glymur/test/test_config.py | 26 +++++++++++++---- 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index d7578d0..b6e655c 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -1,6 +1,9 @@ """ Wraps individual functions in openjp2 library. """ +import ctypes +import platform +from ctypes.util import find_library def _glymurrc_fname(): @@ -23,19 +26,46 @@ def _glymurrc_fname(): fname = os.path.join(confdir, 'glymurrc') if os.path.exists(fname): return fname - else: - msg = "Configuration file '{0}' does not exist.".format(confdir) - warnings.warn(msg, UserWarning) # didn't find a configuration file. return None -def _config(): - """Read configuration file. +def _get_openjpeg_config(): + libopenjpeg_path = find_library('openjpeg') + + # If we could not find it, then look in some likely locations. + if libopenjpeg_path is None: + if platform.system() == 'Darwin': + path = '/opt/local/lib/libopenjpeg.dylib' + if os.path.exists(path): + libopenjpeg_path = path + elif os.name == 'nt': + path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', + 'bin', 'openjpeg.dll') + if os.path.exists(path): + libopenjpeg_path = path - Based on matplotlib. - """ + try: + if os.name == "nt": + _OPENJPEG = ctypes.windll.LoadLibrary(libopenjpeg_path) + else: + _OPENJPEG = ctypes.CDLL(libopenjpeg_path) + except OSError: + _OPENJPEG = None + + if _OPENJPEG is not None: + # Must be at least 1.5.0 + _OPENJPEG.opj_version.restype = ctypes.c_char_p + v = _OPENJPEG.opj_version() + v = v.decode('utf-8') + major, minor, patch = v.split('.') + if minor != '5': + _OPENJPEG = None + return _OPENJPEG + + +def _get_openjp2_config(): filename = _glymurrc_fname() if filename is not None: # Read the configuration file for the library location. @@ -44,7 +74,6 @@ def _config(): libopenjp2_path = parser.get('library', 'openjp2') else: # No help from the config file, try to find it ourselves. - from ctypes.util import find_library libopenjp2_path = find_library('openjp2') if libopenjp2_path is None: @@ -60,6 +89,13 @@ def _config(): return _OPENJP2 +def _config(): + """Read configuration file. + """ + _OPENJP2 = _get_openjp2_config() + _OPENJPEG = _get_openjpeg_config() + return _OPENJP2, _OPENJPEG + def _get_configdir(): """Return string representing the configuration directory. @@ -73,7 +109,6 @@ def _get_configdir(): if 'HOME' in os.environ: return os.path.join(os.environ['HOME'], '.config', 'glymur') -import ctypes import os import warnings @@ -85,7 +120,12 @@ else: from configparser import ConfigParser from configparser import NoOptionError -_OPENJP2 = _config() +_OPENJP2, _OPENJPEG = _config() +if _OPENJP2 is None and _OPENJPEG is None: + msg = "Neither the glymur configuration file could not be located " + msg += "nor could openjpeg 1.5.1 be located. Glymur can only " + msg += "operate under extremely degraded conditions." + warnings.warn(msg, UserWarning) import numpy as np diff --git a/glymur/test/__init__.py b/glymur/test/__init__.py index 199a1f7..2a62da4 100644 --- a/glymur/test/__init__.py +++ b/glymur/test/__init__.py @@ -1,5 +1,6 @@ from .test_callbacks import TestCallbacks as callbacks from .test_codestream import TestCodestream as codestream +from .test_config import TestSuite as config from .test_jp2k import TestJp2k as jp2k from .test_jp2k_15 import TestSuite as jp2k15 from .test_icc import TestICC as icc diff --git a/glymur/test/test_config.py b/glymur/test/test_config.py index 8f78804..9e5374a 100644 --- a/glymur/test/test_config.py +++ b/glymur/test/test_config.py @@ -1,3 +1,7 @@ +"""These tests are for edge cases where OPENJPEG does not exist, but +OPENJP2 may be present in some form or other. +""" + import imp import os import sys @@ -16,21 +20,33 @@ from glymur import Jp2k from glymur.lib import openjp2 as opj2 +@unittest.skip("Cannot work when both OPENJPEG and OPENJP2 are both present.") +@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, + "Needs openjp2 library first before these tests make sense.") @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") -class TestJp2k(unittest.TestCase): +class TestSuite(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to ignore OPENJPEG if it exists. + cls.openjpeg = glymur.lib.openjpeg._OPENJPEG + glymur.lib.openjp2._OPENJPEG = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJPEG + glymur.lib.openjpeg._OPENJPEG = cls.openjpeg + def setUp(self): - self.jp2file = pkg_resources.resource_filename(glymur.__name__, - "data/nemo.jp2") imp.reload(glymur) imp.reload(glymur.lib.openjp2) + self.jp2file = glymur.data.nemo() def tearDown(self): imp.reload(glymur) imp.reload(glymur.lib.openjp2) - @unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, - "Needs openjp2 library first.") def test_config_file_via_environ(self): """Verify that we can read a configuration file set via environ var.""" with tempfile.TemporaryDirectory() as tdir: From 3d0c89c81480d183e52c5e668348565209c0a3b4 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 4 Jul 2013 17:44:42 -0400 Subject: [PATCH 10/54] Abstracted out these fixtures. --- glymur/test/fixtures.py | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 glymur/test/fixtures.py diff --git a/glymur/test/fixtures.py b/glymur/test/fixtures.py new file mode 100644 index 0000000..ce52fae --- /dev/null +++ b/glymur/test/fixtures.py @@ -0,0 +1,93 @@ +import re +import sys + +import numpy as np + +def mse(A, B): + """Mean Square Error""" + diff = A.astype(np.double) - B.astype(np.double) + #e = np.sqrt(np.mean(diff**2)) + e = np.mean(diff**2) + return e + + +def peak_tolerance(A, B): + """Peak Tolerance""" + diff = np.abs(A.astype(np.double) - B.astype(np.double)) + p = diff.max() + return p + + +def read_pgx(pgx_file): + """Helper function for reading the PGX comparison files. + + Open the file in ascii mode and read the header line. + Will look something like + + PG ML + 8 128 128 + PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d" + """ + header = '' + with open(pgx_file, 'rb') as fp: + while True: + x = fp.read(1) + if x[0] == 10 or x == '\n': + pos = fp.tell() + break + else: + if sys.hexversion < 0x03000000: + header += x + else: + header += chr(x[0]) + + header = header.rstrip() + n = re.split('\s', header) + + if (n[1][0] == 'M') and (sys.byteorder == 'little'): + swapbytes = True + elif (n[1][0] == 'L') and (sys.byteorder == 'big'): + swapbytes = True + else: + swapbytes = False + + if (len(n) == 6): + bitdepth = int(n[3]) + signed = bitdepth < 0 + if signed: + bitdepth = -1 * bitdepth + nrows = int(n[5]) + ncols = int(n[4]) + else: + bitdepth = int(n[2]) + signed = bitdepth < 0 + if signed: + bitdepth = -1 * bitdepth + nrows = int(n[4]) + ncols = int(n[3]) + + if signed: + if bitdepth <= 8: + dtype = np.int8 + elif bitdepth <= 16: + dtype = np.int16 + else: + raise RuntimeError("unhandled bitdepth") + else: + if bitdepth <= 8: + dtype = np.uint8 + elif bitdepth <= 16: + dtype = np.uint16 + else: + raise RuntimeError("unhandled bitdepth") + + shape = [nrows, ncols] + + # Reopen the file in binary mode and seek to the start of the binary + # data + with open(pgx_file, 'rb') as fp: + fp.seek(pos) + data = np.fromfile(file=fp, dtype=dtype).reshape(shape) + + return(data.byteswap(swapbytes)) + + From 6219c33c93d910cba7528ca5ceec160c5e34b51b Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 4 Jul 2013 17:54:17 -0400 Subject: [PATCH 11/54] Added a basic read test to run when openjp2, OPJ_DATA_ROOT not present. --- glymur/test/test_jp2k_15.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index 30f1a6b..6ac9802 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -21,9 +21,7 @@ except: @unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, "Missing openjpeg library.") -@unittest.skipIf(data_root is None, - "OPJ_DATA_ROOT environment variable not set") -class TestNegative(unittest.TestCase): +class TestJp2k(unittest.TestCase): @classmethod def setUpClass(cls): @@ -44,8 +42,7 @@ class TestNegative(unittest.TestCase): def test_bands(self): # Reading individual bands is an advanced maneuver. - jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') - jp2k = Jp2k(jfile) + jp2k = Jp2k(self.j2kfile) with self.assertRaises(NotImplementedError) as ce: jpdata = jp2k.read_bands() @@ -67,6 +64,13 @@ class TestNegative(unittest.TestCase): with self.assertRaises(TypeError) as ce: d = j2k.read(layer=1) + def test_basic(self): + # This test is only useful when openjp2 is not available + # and OPJ_DATA_ROOT is not set. We need at least one + # working read test. + j2k = Jp2k(self.j2kfile) + d = j2k.read() + @unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, "Missing openjpeg library.") From b0fe45b733e1b31190ec907a1825ec73d1787779 Mon Sep 17 00:00:00 2001 From: jevans Date: Thu, 4 Jul 2013 19:03:35 -0400 Subject: [PATCH 12/54] Initial doc updates for 1.5.1 support. --- docs/source/detailed_installation.rst | 14 ++++++---- docs/source/introduction.rst | 38 ++++++++++++++++----------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 5090cdc..4374695 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -58,8 +58,9 @@ repositories:: Raspbian '''''''' -Yeah, this was the first thing I tried after getting my new Raspberry Pi hooked -up (couldn't help myself :-) Raspbian ships with Python 3.2 and 2.7, so these steps detail working with 2.7. +Yeah, this was the first thing I tried after getting my new Raspberry +Pi hooked up (couldn't help myself :-) Raspbian ships with Python +3.2 and 2.7, so these steps detail working with 2.7. Additional required OS packages include:: @@ -79,8 +80,8 @@ one unexpected failure as of the time of writing. Fedora 17 ''''''''' -Fedora 17 ships with Python 3.2 and 2.7, so these steps detail working with -2.7. +Fedora 17 ships with Python 3.2 and 2.7, but OpenJPEG is only at version 1.4, +so these steps detail working with Python 2.7 and the svn version of OpenJPEG. Required RPMs include:: @@ -111,7 +112,10 @@ it was installable via pip:: Windows ------- -Not currently supported. +The only configuration I've tested is Python(xy), which uses Python 2.7. +Python(xy) already comes with numpy, but you will have to install pip and then +contextlib2 as well. This configuration assumes you've installed OpenJPEG +1.5.1. ''''''' Testing diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index f8d4c65..b3998b3 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -2,14 +2,9 @@ Glymur: a Python interface for JPEG 2000 ---------------------------------------- -**Glymur** contains a Python interface to the OpenJPEG library -which allows linux and mac users to read and write JPEG 2000 files. For more -information about OpenJPEG, please consult http://www.openjpeg.org. Glymur -currently relies upon a development version of the OpenJPEG library, and so, -while useable, it is totally at the mercy of any upstream changes -made to the development version of OpenJPEG. - -Glymur supports both reading and writing of JPEG 2000 images (part 1). Writing +**Glymur** is an interface to the OpenJPEG library +which allows one to read and write JPEG 2000 files from within Python. +Glymur supports both reading and writing of JPEG 2000 images. Writing JPEG 2000 images is currently limited to images that can fit in memory, however. @@ -23,9 +18,21 @@ Glymur works on Python 2.7 and 3.3. Python 3.3 is strongly recommended. OpenJPEG Installation ===================== -OpenJPEG must be built as a shared library. In addition, you -currently must compile OpenJPEG from the developmental source that -you can retrieve via subversion. As of this time of writing, svn +The OpenJPEG library version must be either 1.5.1 or the trunk/development +version of OpenJPEG. Version 2.0.0 or versions earlier than 1.5.0 +are not supported. Furthermore, the 1.5.x version of OpenJPEG is +currently only utilized for read-only purposes. For more information +about OpenJPEG, please consult http://www.openjpeg.org. + +If you use MacPorts on the mac or if you have a sufficiently recent version of +Linux, your package manager should already provide you with at least version +1.5.1 of OpenJPEG, which means that glymur can be installed ready to read JPEG +2000 images. If you use windows, I suggest installing version 1.5.1 from +https://code.google.com/p/openjpeg/downloads/list . + +If you wish to take advantage of more of glymur's features, however, then +you must compile OpenJPEG as a shared library from the developmental source +that you can retrieve via subversion. As of this time of writing, svn revision 2345 works. You should download the test data for the purpose of configuring and running OpenJPEG's test suite, check their instructions for all this. You should set the **OPJ_DATA_ROOT** environment variable for the @@ -34,9 +41,6 @@ purpose of running Glymur's test suite. :: $ svn co http://openjpeg.googlecode.com/svn/data $ export OPJ_DATA_ROOT=`pwd`/data -Earlier versions of OpenJPEG through the 2.0 official release will **NOT** -work and are not supported. - Glymur uses ctypes (for the moment) to access the openjp2 library, and because ctypes access libraries in a platform-dependent manner, it is recommended that you create a configuration file to help Glymur properly find @@ -52,6 +56,9 @@ the openjp2 library. You may create the configuration file as follows:: That assumes, of course, that you've installed OpenJPEG into /opt/openjp2-svn. You may also substitute **$XDG_CONFIG_HOME** for **$HOME/.config**. +The configuration file is not required, however, if you wish to only use +OpenJPEG version 1.5.1. + Glymur Installation =================== You can retrieve the source for Glymur from either of @@ -76,5 +83,6 @@ You can run the tests from within python as follows:: >>> import glymur >>> glymur.runtests() -Many tests are currently skipped; the important thing is whether or not any +Many tests are currently skipped; in fact most of them are skipped if you +are relying on OpenJPEG 1.5.1. But the important thing is whether or not any tests fail. From 6c7cab5a47dbad5d4ef850f40ddc3cc6beed4f75 Mon Sep 17 00:00:00 2001 From: John G Evans Date: Fri, 5 Jul 2013 07:49:19 -0400 Subject: [PATCH 13/54] Skipping tests on windows where NameTemporaryFile is used. Should go back and revisit this, see if something else can be done. --- glymur/test/test_jp2box.py | 7 +++++++ glymur/test/test_printing.py | 2 ++ 2 files changed, 9 insertions(+) diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index af85931..1fe5330 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -1,4 +1,5 @@ import doctest +import os import tempfile import xml.etree.cElementTree as ET import unittest @@ -290,6 +291,8 @@ class TestXML(unittest.TestCase): with self.assertRaises((IOError, OSError)) as ce: xmlb = glymur.jp2box.XMLBox(filename=self.xmlfile, xml=xml_object) + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_basic_xml(self): # Should be able to write an XMLBox. j2k = Jp2k(self.j2kfile) @@ -310,6 +313,8 @@ class TestXML(unittest.TestCase): self.assertEqual(ET.tostring(jp2.box[3].xml), b'0') + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_xml_from_file(self): j2k = Jp2k(self.j2kfile) @@ -354,6 +359,8 @@ class TestColourSpecificationBox(unittest.TestCase): def tearDown(self): pass + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_color_specification_box_with_out_enumerated_colorspace(self): j2k = Jp2k(self.j2kfile) diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 5b93e09..8b2e033 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -781,6 +781,8 @@ class TestPrinting(unittest.TestCase): expected = '\n'.join(lines) self.assertEqual(actual, expected) + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_less_common_boxes(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: with open(self.jp2file, 'rb') as ifile: From 585e0b6d841446da712e4d09491442fe17b8322b Mon Sep 17 00:00:00 2001 From: John G Evans Date: Fri, 5 Jul 2013 07:49:19 -0400 Subject: [PATCH 14/54] Skipping tests on windows where NameTemporaryFile is used. Should go back and revisit this, see if something else can be done. --- glymur/test/test_jp2box.py | 7 +++++++ glymur/test/test_printing.py | 2 ++ 2 files changed, 9 insertions(+) diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index af85931..1fe5330 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -1,4 +1,5 @@ import doctest +import os import tempfile import xml.etree.cElementTree as ET import unittest @@ -290,6 +291,8 @@ class TestXML(unittest.TestCase): with self.assertRaises((IOError, OSError)) as ce: xmlb = glymur.jp2box.XMLBox(filename=self.xmlfile, xml=xml_object) + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_basic_xml(self): # Should be able to write an XMLBox. j2k = Jp2k(self.j2kfile) @@ -310,6 +313,8 @@ class TestXML(unittest.TestCase): self.assertEqual(ET.tostring(jp2.box[3].xml), b'0') + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_xml_from_file(self): j2k = Jp2k(self.j2kfile) @@ -354,6 +359,8 @@ class TestColourSpecificationBox(unittest.TestCase): def tearDown(self): pass + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_color_specification_box_with_out_enumerated_colorspace(self): j2k = Jp2k(self.j2kfile) diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 5b93e09..8b2e033 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -781,6 +781,8 @@ class TestPrinting(unittest.TestCase): expected = '\n'.join(lines) self.assertEqual(actual, expected) + @unittest.skipIf(os.name == "nt", + "Problems using NamedTemporaryFile on windows.") def test_less_common_boxes(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: with open(self.jp2file, 'rb') as ifile: From c5ca3306bc7b589ce2bdeabf490eb7131e244338 Mon Sep 17 00:00:00 2001 From: John Evans Date: Fri, 5 Jul 2013 08:14:44 -0400 Subject: [PATCH 15/54] Added release matrix. Should not be packaged up to Pypi. --- MANIFEST.in | 1 + release.txt | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 release.txt diff --git a/MANIFEST.in b/MANIFEST.in index 86279d7..1390b67 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ include *.txt *.md prune build exclude readthedocs-pip-requirements.txt +exclude release.txt diff --git a/release.txt b/release.txt new file mode 100644 index 0000000..147bd75 --- /dev/null +++ b/release.txt @@ -0,0 +1,22 @@ +| OS | Python 2.7 | Python 3.3 | Notes | +|------------|------------|------------|----------------------------------| +| Windows | X | | Python(xy) with OpenJPEG 1.5.1. | +| | | | At least 25 tests should pass | +|------------|------------|------------|----------------------------------| +| Mac | X | | MacPorts with both OpenJPEG 1.5.1| +| | | | and OpenJPEG svn. Maximum number| +| | | | of tests should pass. | +|------------|------------|------------|----------------------------------| +| Mac | | X | MacPorts with both OpenJPEG 1.5.1| +| | | | and OpenJPEG svn. Maximum number| +| | | | of tests should pass. | +|------------|------------|------------|----------------------------------| +| Raspberry | X | | Ships with only 1.3. Should | +| | | | error out gracefully. | +|------------|------------|------------|----------------------------------| +| Fedora 17 | X | | Ships with 1.4. Should error out| +| | | | gracefully. | +|------------|------------|------------|----------------------------------| +| Fedora 18 | | X | Ships with 1.5.1. Some tests | +| | | | should pass. | +|------------|------------|------------|----------------------------------| From 34e5f7a3e16f07e71c396b54856a9fb2e5e26ca6 Mon Sep 17 00:00:00 2001 From: John Evans Date: Fri, 5 Jul 2013 08:22:50 -0400 Subject: [PATCH 16/54] Trying to get markdown correct. --- release.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/release.txt b/release.txt index 147bd75..c553960 100644 --- a/release.txt +++ b/release.txt @@ -1,22 +1,22 @@ | OS | Python 2.7 | Python 3.3 | Notes | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Windows | X | | Python(xy) with OpenJPEG 1.5.1. | | | | | At least 25 tests should pass | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Mac | X | | MacPorts with both OpenJPEG 1.5.1| | | | | and OpenJPEG svn. Maximum number| | | | | of tests should pass. | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Mac | | X | MacPorts with both OpenJPEG 1.5.1| | | | | and OpenJPEG svn. Maximum number| | | | | of tests should pass. | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Raspberry | X | | Ships with only 1.3. Should | | | | | error out gracefully. | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Fedora 17 | X | | Ships with 1.4. Should error out| | | | | gracefully. | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ | Fedora 18 | | X | Ships with 1.5.1. Some tests | | | | | should pass. | -|------------|------------|------------|----------------------------------| ++------------+------------+------------+----------------------------------+ From e40e05042b066454bfdebf41d24e3e77666505e6 Mon Sep 17 00:00:00 2001 From: John Evans Date: Fri, 5 Jul 2013 09:36:01 -0400 Subject: [PATCH 17/54] Massaged installation instructions a bit for OpenJPEG 1.5.1. --- docs/source/detailed_installation.rst | 56 ++++++++++++++++++++++----- docs/source/introduction.rst | 32 +-------------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 4374695..1e6fe4b 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -1,16 +1,54 @@ ------------------------------------------------------ -Detailed Instructions for Package Management, Testing ------------------------------------------------------ +---------------------------------- +Detailed Installation Instructions +---------------------------------- -You only need to read this page if you want detailed +'''''''''''''''''''''' +Glymur Configuration +'''''''''''''''''''''' + +The default glymur installation process relies upon OpenJPEG version +1.5.1 being properly installed on your system. This will, however, +only give you you basic read capabilities, so if you wish to take +advantage of more of glymur's features, you should compile OpenJPEG as +a shared library from the developmental source that you can retrieve +via subversion. As of this time of writing, svn revision 2345 works. +You should also download the test data for the purpose of configuring +and running OpenJPEG's test suite, check their instructions for all this. +You should set the **OPJ_DATA_ROOT** environment variable for the purpose +of running Glymur's test suite. :: + + $ svn co http://openjpeg.googlecode.com/svn/data + $ export OPJ_DATA_ROOT=`pwd`/data + +Glymur uses ctypes (for the moment) to access the openjp2 library, and +because ctypes access libraries in a platform-dependent manner, it is +recommended that you create a configuration file to help Glymur properly find +the openjp2 library. You may create the configuration file as follows:: + + $ mkdir -p ~/.config/glymur + $ cd ~/.config/glymur + $ cat > glymurrc << EOF + > [library] + > openjp2: /opt/openjp2-svn/lib/libopenjp2.so + > EOF + +That assumes, of course, that you've installed OpenJPEG into +/opt/openjp2-svn on a linux system. You may also substitute +**$XDG_CONFIG_HOME** for **$HOME/.config**. + +Again, though, the configuration file is not required if you only wish to +read JPEG 2000 files using OpenJPEG version 1.5.1. + + +''''''''''''''''''''''''''''''''''''''''''' +Package Management Suggestions for Testing +''''''''''''''''''''''''''''''''''''''''''' + +You only need to read this section if you want detailed platform-specific instructions on running as many tests as possible or wish to use your system's package manager to install as many required -packages/RPMs/ports/whatever without going through pip. Otherwise go on to -the next page. +packages/RPMs/ports/whatever without going through pip. -'''''''' -Platform -'''''''' Mac OS X -------- diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index b3998b3..5818c1b 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -27,38 +27,10 @@ about OpenJPEG, please consult http://www.openjpeg.org. If you use MacPorts on the mac or if you have a sufficiently recent version of Linux, your package manager should already provide you with at least version 1.5.1 of OpenJPEG, which means that glymur can be installed ready to read JPEG -2000 images. If you use windows, I suggest installing version 1.5.1 from +2000 images. If you use windows, I suggest using the 1.5.1 windows installer provided +to you by the OpenJPEG folks at https://code.google.com/p/openjpeg/downloads/list . -If you wish to take advantage of more of glymur's features, however, then -you must compile OpenJPEG as a shared library from the developmental source -that you can retrieve via subversion. As of this time of writing, svn -revision 2345 works. You should download the test data for the purpose -of configuring and running OpenJPEG's test suite, check their instructions for -all this. You should set the **OPJ_DATA_ROOT** environment variable for the -purpose of running Glymur's test suite. :: - - $ svn co http://openjpeg.googlecode.com/svn/data - $ export OPJ_DATA_ROOT=`pwd`/data - -Glymur uses ctypes (for the moment) to access the openjp2 library, and -because ctypes access libraries in a platform-dependent manner, it is -recommended that you create a configuration file to help Glymur properly find -the openjp2 library. You may create the configuration file as follows:: - - $ mkdir -p ~/.config/glymur - $ cd ~/.config/glymur - $ cat > glymurrc << EOF - > [library] - > openjp2: /opt/openjp2-svn/lib/libopenjp2.so - > EOF - -That assumes, of course, that you've installed OpenJPEG into /opt/openjp2-svn. -You may also substitute **$XDG_CONFIG_HOME** for **$HOME/.config**. - -The configuration file is not required, however, if you wish to only use -OpenJPEG version 1.5.1. - Glymur Installation =================== You can retrieve the source for Glymur from either of From 36ea74a27e493bfb775d2e0c85495de4b088e220 Mon Sep 17 00:00:00 2001 From: John G Evans Date: Fri, 5 Jul 2013 13:21:13 -0400 Subject: [PATCH 18/54] Trying to get svn version running on python(xy). No luck. But the code is sort of in place. --- glymur/lib/openjp2.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index b6e655c..6e41e66 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -80,7 +80,10 @@ def _get_openjp2_config(): return None try: - _OPENJP2 = ctypes.CDLL(libopenjp2_path) + if os.name == "nt": + _OPENJP2 = ctypes.windll.LoadLibrary(libopenjp2_path) + else: + _OPENJP2 = ctypes.CDLL(libopenjp2_path) except OSError: msg = '"Library {0}" could not be loaded. Operating in degraded mode.' msg = msg.format(libopenjp2_path) @@ -109,6 +112,9 @@ def _get_configdir(): if 'HOME' in os.environ: return os.path.join(os.environ['HOME'], '.config', 'glymur') + if 'USERPROFILE' in os.environ: + return os.path.join(os.environ['USERPROFILE'], 'Application Data', 'glymur') + import os import warnings @@ -656,8 +662,8 @@ class _codestream_info_v2_t(ctypes.Structure): # Restrict the input and output argument types for each function used in the # API. if _OPENJP2 is not None: - _OPENJP2.opj_create_compress.argtypes = [_codec_format_t] _OPENJP2.opj_create_compress.restype = _codec_t_p + _OPENJP2.opj_create_compress.argtypes = [_codec_format_t] _OPENJP2.opj_create_decompress.argtypes = [_codec_format_t] _OPENJP2.opj_create_decompress.restype = _codec_t_p From 32dcb12823b626b354b2f295b58ebeeda369d62c Mon Sep 17 00:00:00 2001 From: John Evans Date: Fri, 5 Jul 2013 16:46:05 -0400 Subject: [PATCH 19/54] pep8 work, #67 --- glymur/jp2k.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 8314b7e..161f8f6 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -621,21 +621,20 @@ class Jp2k(Jp2kBox): opj._set_default_decoder_parameters(ctypes.byref(dparameters)) dparameters.cp_reduce = reduce dparameters.decod_format = self._codec_format - + infile = self.filename.encode() nelts = opj._PATH_LEN - len(infile) infile += b'0' * nelts dparameters.infile = infile - + dinfo = opj._create_decompress(dparameters.decod_format) opj._setup_decoder(dinfo, dparameters) - + with open(self.filename, 'rb') as fp: src = fp.read() cio = opj._cio_open(dinfo, src) - image = opj._decode(dinfo, cio) stack.callback(opj._image_destroy, image) @@ -643,7 +642,7 @@ class Jp2k(Jp2kBox): stack.callback(opj._cio_close, cio) ncomps = image.contents.numcomps - + component = image.contents.comps[0] if component.sgnd: if component.prec <= 8: @@ -659,30 +658,31 @@ class Jp2k(Jp2kBox): dtype = np.uint16 else: raise RuntimeError("Unhandled precision, datatype") - + nrows = image.contents.comps[0].h ncols = image.contents.comps[0].w ncomps = image.contents.numcomps data = np.zeros((nrows, ncols, ncomps), dtype) - + for k in range(image.contents.numcomps): component = image.contents.comps[k] nrows = component.h ncols = component.w - + if nrows == 0 or ncols == 0: # Letting this situation continue would segfault # Python. msg = "Component {0} has dimensions {1} x {2}" msg = msg.format(k, nrows, ncols) raise IOError(msg) - + addr = ctypes.addressof(component.data.contents) with warnings.catch_warnings(): warnings.simplefilter("ignore") - x = np.ctypeslib.as_array( (ctypes.c_int32 * nrows * ncols).from_address(addr)) + nelts = nrows * ncols + x = np.ctypeslib.as_array((ctypes.c_int32 * nelts).from_address(addr)) data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) - + if data.shape[2] == 1: data = data.view() data.shape = data.shape[0:2] From 39e2859a66cb9aa84832ecab4b016d1884e26946 Mon Sep 17 00:00:00 2001 From: John Evans Date: Sat, 6 Jul 2013 07:21:02 -0400 Subject: [PATCH 20/54] Hooked up openjpeg event handlers. #67 --- glymur/jp2k.py | 13 +++++++++- glymur/lib/openjpeg.py | 10 ++++++++ glymur/test/test_callbacks.py | 45 +++++++++++++++++++++++++++++++++++ glymur/test/test_jp2k_15.py | 22 +++++++++++++---- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 161f8f6..6d9d7ce 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -595,7 +595,7 @@ class Jp2k(Jp2kBox): img = self._read_openjpeg(**kwargs) return img - def _read_openjpeg(self, reduce=0): + def _read_openjpeg(self, reduce=0, verbose=False): """Read a JPEG 2000 image using libopenjpeg. Parameters @@ -603,6 +603,8 @@ class Jp2k(Jp2kBox): reduce : int, optional Factor by which to reduce output resolution. Use -1 to get the lowest resolution thumbnail. + verbose : bool, optional + Print informational messages produced by the OpenJPEG library. Returns ------- @@ -629,6 +631,15 @@ class Jp2k(Jp2kBox): dinfo = opj._create_decompress(dparameters.decod_format) + event_mgr = opj.event_mgr_t() + info_handler = ctypes.cast(_info_callback, ctypes.c_void_p) + event_mgr.info_handler = info_handler if verbose else None + event_mgr.warning_handler = ctypes.cast(_warning_callback, + ctypes.c_void_p) + event_mgr.error_handler = ctypes.cast(_error_callback, + ctypes.c_void_p) + opj._set_event_mgr(dinfo, ctypes.byref(event_mgr)) + opj._setup_decoder(dinfo, dparameters) with open(self.filename, 'rb') as fp: diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index b288ab0..f818e1a 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -166,6 +166,16 @@ def _set_default_decoder_parameters(dparams_p): _OPENJPEG.opj_set_default_decoder_parameters(dparams_p) +def _set_event_mgr(dinfo, event_mgr, context=None): + """Wrapper for openjpeg library function opj_set_event_mgr. + """ + argtypes = [ctypes.POINTER(common_struct_t), + ctypes.POINTER(event_mgr_t), + ctypes.c_void_p] + _OPENJPEG.opj_set_event_mgr(ctypes.cast(dinfo, + ctypes.POINTER(common_struct_t)), + event_mgr, context) + def _setup_decoder(dinfo, dparams): """Wrapper for openjpeg library function opj_setup_decoder.""" argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(dparameters_t)] diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 331e20e..2b5f7f6 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -59,5 +59,50 @@ class TestCallbacks(unittest.TestCase): self.assertEqual(actual, expected) +@unittest.skipIf(glymur.lib.openjp2._OPENJPEG is None, + "Missing openjpeg library.") +class TestCallbacks15(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 + cls.openjp2 = glymur.lib.openjp2._OPENJP2 + glymur.lib.openjp2._OPENJP2 = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJP2 + glymur.lib.openjp2._OPENJP2 = cls.openjp2 + + def setUp(self): + # Save sys.stdout. + self.stdout = sys.stdout + sys.stdout = StringIO() + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() + + def tearDown(self): + # Restore stdout. + sys.stdout = self.stdout + + def test_info_callbacks_on_read(self): + # Verify that we get the expected stdio output when our internal info + # callback handler is enabled. + j = glymur.Jp2k(self.j2kfile) + d = j.read(reduce=1, verbose=True) + actual = sys.stdout.getvalue().strip() + + # We can't actually match this because the times will be different. + lines = ['[INFO] tile 1 of 1', + '[INFO] - tiers-1 took 0.050149 s', + '[INFO] - dwt took 0.004188 s', + '[INFO] - tile decoded in 0.058203 s'] + + expected = '\n'.join(lines) + self.assertTrue('[INFO]' in actual) + self.assertTrue('dwt took' in actual) + + + if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index 6ac9802..5708cb4 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -35,6 +35,7 @@ class TestJp2k(unittest.TestCase): glymur.lib.openjp2._OPENJP2 = cls.openjp2 def setUp(self): + self.jp2file = glymur.data.nemo() self.j2kfile = glymur.data.goodstuff() def tearDown(self): @@ -64,10 +65,17 @@ class TestJp2k(unittest.TestCase): with self.assertRaises(TypeError) as ce: d = j2k.read(layer=1) - def test_basic(self): + def test_basic_jp2(self): # This test is only useful when openjp2 is not available # and OPJ_DATA_ROOT is not set. We need at least one - # working read test. + # working JP2 test. + j2k = Jp2k(self.jp2file) + d = j2k.read(reduce=1) + + def test_basic_j2k(self): + # This test is only useful when openjp2 is not available + # and OPJ_DATA_ROOT is not set. We need at least one + # working J2K test. j2k = Jp2k(self.j2kfile) d = j2k.read() @@ -309,7 +317,10 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_10_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + jpdata = jp2k.read(reduce=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') pgxdata = read_pgx(pgxfile) @@ -695,7 +706,10 @@ class TestSuite(unittest.TestCase): def test_NR_DEC_kakadu_v4_4_openjpegv2_broken_j2k_16_decode(self): relpath = 'input/nonregression/kakadu_v4-4_openjpegv2_broken.j2k' jfile = os.path.join(data_root, relpath) - data = Jp2k(jfile).read() + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + data = Jp2k(jfile).read() self.assertTrue(True) def test_NR_DEC_MarkerIsNotCompliant_j2k_17_decode(self): From a57de5d872e0542f70b50b458bc20fd753c16657 Mon Sep 17 00:00:00 2001 From: John Evans Date: Sat, 6 Jul 2013 15:15:15 -0400 Subject: [PATCH 21/54] Closes #70. --- glymur/test/test_callbacks.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 2b5f7f6..fd2f58c 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -1,5 +1,6 @@ import os import pkg_resources +import re import sys import tempfile import unittest @@ -62,6 +63,8 @@ class TestCallbacks(unittest.TestCase): @unittest.skipIf(glymur.lib.openjp2._OPENJPEG is None, "Missing openjpeg library.") class TestCallbacks15(unittest.TestCase): + """This test suite is for OpenJPEG 1.5.1 properties. + """ @classmethod def setUpClass(cls): @@ -92,15 +95,15 @@ class TestCallbacks15(unittest.TestCase): d = j.read(reduce=1, verbose=True) actual = sys.stdout.getvalue().strip() - # We can't actually match this because the times will be different. - lines = ['[INFO] tile 1 of 1', - '[INFO] - tiers-1 took 0.050149 s', - '[INFO] - dwt took 0.004188 s', - '[INFO] - tile decoded in 0.058203 s'] - - expected = '\n'.join(lines) - self.assertTrue('[INFO]' in actual) - self.assertTrue('dwt took' in actual) + regex = re.compile(r"""\[INFO\]\stile\s1\sof\s1\s+ + \[INFO\]\s-\stiers-1\stook\s[0-9]+\.[0-9]+\ss\s+ + \[INFO\]\s-\sdwt\stook\s[0-9]+\.[0-9]+\ss\s+ + \[INFO\]\s-\stile\sdecoded\sin\s[0-9]+\.[0-9]+\ss""", + re.VERBOSE) + if sys.hexversion <= 0x03020000: + self.assertRegexpMatches(actual, regex) + else: + self.assertRegex(actual, regex) From a8219236aa4e9f4614ff6c8933542a9c903fa59a Mon Sep 17 00:00:00 2001 From: jevans Date: Sat, 6 Jul 2013 17:50:39 -0400 Subject: [PATCH 22/54] Erroring out appropriately when _read_openjpeg gets differing sampling If the subsampling factors are different, we should error out when using read with libopenjpeg. Closed #72 --- glymur/jp2k.py | 17 +++++++++++++---- glymur/test/test_jp2k.py | 2 +- glymur/test/test_jp2k_15.py | 5 ++--- glymur/test/test_opj_suite.py | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 6d9d7ce..b0d4157 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -613,9 +613,19 @@ class Jp2k(Jp2kBox): Raises ------ - IOError + RuntimeError If the image has differing subsample factors. """ + # Check for differing subsample factors. + codestream = self.get_codestream(header_only=True) + dxs = np.array(codestream.segment[1].XRsiz) + dys = np.array(codestream.segment[1].YRsiz) + if np.any(dxs - dxs[0]) or np.any(dys - dys[0]): + msg = "Components must all have the same subsampling factors " + msg += "to use this method with OpenJPEG 1.5.1. Please consider " + msg += "using OPENJP2 instead." + raise RuntimeError(msg) + with ExitStack() as stack: # Set decoding parameters. @@ -653,7 +663,6 @@ class Jp2k(Jp2kBox): stack.callback(opj._cio_close, cio) ncomps = image.contents.numcomps - component = image.contents.comps[0] if component.sgnd: if component.prec <= 8: @@ -726,7 +735,7 @@ class Jp2k(Jp2kBox): Raises ------ - IOError + RuntimeError If the image has differing subsample factors. """ # Check for differing subsample factors. @@ -735,7 +744,7 @@ class Jp2k(Jp2kBox): dys = np.array(codestream.segment[1].YRsiz) if np.any(dxs - dxs[0]) or np.any(dys - dys[0]): msg = "Components must all have the same subsampling factors." - raise IOError(msg) + raise RuntimeError(msg) img_array = self._read_common(reduce=reduce, layer=layer, diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index f2da55f..8990eb8 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -319,7 +319,7 @@ class TestJp2k(unittest.TestCase): # Issue 86. filename = os.path.join(data_root, 'input/conformance/p0_05.j2k') j = Jp2k(filename) - with self.assertRaises(IOError): + with self.assertRaises(RuntimeError): j.read() @unittest.skipIf(data_root is None, diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index 5708cb4..90e9fd7 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -794,12 +794,11 @@ class TestSuite(unittest.TestCase): data = Jp2k(jfile).read() self.assertTrue(True) - @unittest.skip("Should have worked, must be investigated.") def test_NR_DEC_file_409752_jp2_40_decode(self): jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2') j = Jp2k(jfile) - data = j.read() - self.assertTrue(True) + with self.assertRaises(RuntimeError) as ce: + data = j.read() if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 05c97dd..fe2485b 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -1068,7 +1068,7 @@ class TestSuite(unittest.TestCase): def test_NR_DEC_file_409752_jp2_40_decode(self): jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2') - with self.assertRaises(IOError): + with self.assertRaises(RuntimeError): data = Jp2k(jfile).read() @unittest.skipIf(sys.hexversion < 0x03020000, From 33898c8f3126fbd3be174cf9185210c762038c42 Mon Sep 17 00:00:00 2001 From: jevans Date: Sat, 6 Jul 2013 18:05:09 -0400 Subject: [PATCH 23/54] Got rid of read_bands tests. Reasserting ValueError tests. read_band is intentionally unimplemented for libopenjpeg. The two ValueError tests originally were cast as RuntimeError tests, as libopenjp2 catches this. Libopenjpeg cannot catch it as easily. --- glymur/test/test_jp2k_15.py | 116 +----------------------------------- 1 file changed, 2 insertions(+), 114 deletions(-) diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py index 90e9fd7..2225bef 100644 --- a/glymur/test/test_jp2k_15.py +++ b/glymur/test/test_jp2k_15.py @@ -236,58 +236,6 @@ class TestSuite(unittest.TestCase): self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.07) - @unittest.skip("reading separate bands not allowed") - def test_ETS_C1P0_p0_05_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 2) - self.assertTrue(mse(jpdata[0], pgxdata) < 0.302) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 2) - self.assertTrue(mse(jpdata[1], pgxdata) < 0.307) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[2], pgxdata) < 2) - self.assertTrue(mse(jpdata[2], pgxdata) < 0.269) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_05_3.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[3], pgxdata) == 0) - self.assertTrue(mse(jpdata[3], pgxdata) == 0) - - @unittest.skip("reading separate bands not allowed") - def test_ETS_C1P0_p0_06_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_06.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 635) - self.assertTrue(mse(jpdata[0], pgxdata) < 11287) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 403) - self.assertTrue(mse(jpdata[1], pgxdata) < 6124) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[2], pgxdata) < 378) - self.assertTrue(mse(jpdata[2], pgxdata) < 3968) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_06_3.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[3], pgxdata) == 0) - self.assertTrue(mse(jpdata[3], pgxdata) == 0) - def test_ETS_C1P0_p0_08_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') jp2k = Jp2k(jfile) @@ -439,31 +387,6 @@ class TestSuite(unittest.TestCase): self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.051) - @unittest.skip("reading separate bands not allowed") - def test_ETS_C1P1_p1_03_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_03.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[0], pgxdata) < 2) - self.assertTrue(mse(jpdata[0], pgxdata) < 0.3) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[1], pgxdata) < 2) - self.assertTrue(mse(jpdata[1], pgxdata) < 0.21) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[2], pgxdata) <= 1) - self.assertTrue(mse(jpdata[2], pgxdata) < 0.2) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_03_3.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[3], pgxdata) - def test_ETS_C1P1_p1_04_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) @@ -516,23 +439,6 @@ class TestSuite(unittest.TestCase): self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 2) self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 0.6) - @unittest.skip("reading separate bands not allowed") - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C1P1_p1_07_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_07.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_07_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[0], pgxdata) <= 0) - self.assertTrue(mse(jpdata[0], pgxdata) <= 0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_07_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[1], pgxdata) <= 0) - self.assertTrue(mse(jpdata[1], pgxdata) <= 0) - def test_ETS_JP2_file1(self): jfile = os.path.join(data_root, 'input/conformance/file1.jp2') jp2k = Jp2k(jfile) @@ -545,15 +451,6 @@ class TestSuite(unittest.TestCase): jpdata = jp2k.read() self.assertEqual(jpdata.shape, (640, 480, 3)) - @unittest.skip("reading separate bands not allowed") - def test_ETS_JP2_file3(self): - jfile = os.path.join(data_root, 'input/conformance/file3.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands() - self.assertEqual(jpdata[0].shape, (640, 480)) - self.assertEqual(jpdata[1].shape, (320, 240)) - self.assertEqual(jpdata[2].shape, (320, 240)) - def test_ETS_JP2_file4(self): jfile = os.path.join(data_root, 'input/conformance/file4.jp2') jp2k = Jp2k(jfile) @@ -612,7 +509,6 @@ class TestSuite(unittest.TestCase): data = jp2.read() self.assertTrue(True) - @unittest.skip("Should have worked, must be investigated.") @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") def test_NR_DEC_broken_jp2_4_decode(self): @@ -621,7 +517,7 @@ class TestSuite(unittest.TestCase): with self.assertWarns(UserWarning) as cw: # colr box has bad length. jp2 = Jp2k(jfile) - with self.assertRaises(IOError): + with self.assertRaises(ValueError): data = jp2.read() self.assertTrue(True) @@ -632,7 +528,6 @@ class TestSuite(unittest.TestCase): data = Jp2k(jfile).read() self.assertTrue(True) - @unittest.skip("Should have worked, must be investigated.") @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") def test_NR_DEC_broken3_jp2_6_decode(self): @@ -642,7 +537,7 @@ class TestSuite(unittest.TestCase): # colr box has bad length. j = Jp2k(jfile) - with self.assertRaises(IOError) as ce: + with self.assertRaises(ValueError) as ce: d = j.read() def test_NR_DEC_broken4_jp2_7_decode(self): @@ -724,13 +619,6 @@ class TestSuite(unittest.TestCase): data = Jp2k(jfile).read() self.assertTrue(True) - @unittest.skip("reading separate bands not allowed") - def test_NR_DEC_merged_jp2_19_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/merged.jp2') - data = Jp2k(jfile).read_bands() - self.assertTrue(True) - def test_NR_DEC_movie_00000_j2k_20_decode(self): jfile = os.path.join(data_root, 'input/nonregression/movie_00000.j2k') From 430892808e5f612f74971ee2737dd0a7eac3b0cd Mon Sep 17 00:00:00 2001 From: jevans Date: Sat, 6 Jul 2013 22:03:31 -0400 Subject: [PATCH 24/54] Refactored libopenjpeg tests into more logical locations. Closes #67. --- glymur/test/__init__.py | 1 - glymur/test/test_jp2k.py | 61 +++ glymur/test/test_jp2k_15.py | 692 ---------------------------------- glymur/test/test_opj_suite.py | 611 ++++++++++++++++++++++++++++++ 4 files changed, 672 insertions(+), 693 deletions(-) delete mode 100644 glymur/test/test_jp2k_15.py diff --git a/glymur/test/__init__.py b/glymur/test/__init__.py index 2a62da4..644bc56 100644 --- a/glymur/test/__init__.py +++ b/glymur/test/__init__.py @@ -2,7 +2,6 @@ from .test_callbacks import TestCallbacks as callbacks from .test_codestream import TestCodestream as codestream from .test_config import TestSuite as config from .test_jp2k import TestJp2k as jp2k -from .test_jp2k_15 import TestSuite as jp2k15 from .test_icc import TestICC as icc from .test_printing import TestPrinting as printing from .test_opj_suite import TestSuite as suite diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 8990eb8..d664820 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -648,5 +648,66 @@ class TestJp2k(unittest.TestCase): self.assertFalse('Make' in exif['Image'].keys()) +@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, + "Missing openjpeg library.") +class TestJp2k15(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 + cls.openjp2 = glymur.lib.openjp2._OPENJP2 + glymur.lib.openjp2._OPENJP2 = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJP2 + glymur.lib.openjp2._OPENJP2 = cls.openjp2 + + def setUp(self): + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() + + def tearDown(self): + pass + + def test_bands(self): + # Reading individual bands is an advanced maneuver. + jp2k = Jp2k(self.j2kfile) + with self.assertRaises(NotImplementedError) as ce: + jpdata = jp2k.read_bands() + + def test_area(self): + # Area option not allowed for 1.5.1. + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(area=(0, 0, 100, 100)) + + def test_tile(self): + # tile option not allowed for 1.5.1. + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(tile=0) + + def test_layer(self): + # layer option not allowed for 1.5.1. + j2k = Jp2k(self.j2kfile) + with self.assertRaises(TypeError) as ce: + d = j2k.read(layer=1) + + def test_basic_jp2(self): + # This test is only useful when openjp2 is not available + # and OPJ_DATA_ROOT is not set. We need at least one + # working JP2 test. + j2k = Jp2k(self.jp2file) + d = j2k.read(reduce=1) + + def test_basic_j2k(self): + # This test is only useful when openjp2 is not available + # and OPJ_DATA_ROOT is not set. We need at least one + # working J2K test. + j2k = Jp2k(self.j2kfile) + d = j2k.read() + + if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_jp2k_15.py b/glymur/test/test_jp2k_15.py deleted file mode 100644 index 2225bef..0000000 --- a/glymur/test/test_jp2k_15.py +++ /dev/null @@ -1,692 +0,0 @@ -import os -import sys -import unittest -import warnings - -import numpy as np - -import glymur -from glymur import Jp2k -from glymur.lib import openjpeg as opj - -from .fixtures import * - -try: - data_root = os.environ['OPJ_DATA_ROOT'] -except KeyError: - data_root = None -except: - raise - - -@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, - "Missing openjpeg library.") -class TestJp2k(unittest.TestCase): - - @classmethod - def setUpClass(cls): - # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 - cls.openjp2 = glymur.lib.openjp2._OPENJP2 - glymur.lib.openjp2._OPENJP2 = None - - @classmethod - def tearDownClass(cls): - # Restore OPENJP2 - glymur.lib.openjp2._OPENJP2 = cls.openjp2 - - def setUp(self): - self.jp2file = glymur.data.nemo() - self.j2kfile = glymur.data.goodstuff() - - def tearDown(self): - pass - - def test_bands(self): - # Reading individual bands is an advanced maneuver. - jp2k = Jp2k(self.j2kfile) - with self.assertRaises(NotImplementedError) as ce: - jpdata = jp2k.read_bands() - - def test_area(self): - # Area option not allowed for 1.5.1. - j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(area=(0, 0, 100, 100)) - - def test_tile(self): - # tile option not allowed for 1.5.1. - j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(tile=0) - - def test_layer(self): - # layer option not allowed for 1.5.1. - j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(layer=1) - - def test_basic_jp2(self): - # This test is only useful when openjp2 is not available - # and OPJ_DATA_ROOT is not set. We need at least one - # working JP2 test. - j2k = Jp2k(self.jp2file) - d = j2k.read(reduce=1) - - def test_basic_j2k(self): - # This test is only useful when openjp2 is not available - # and OPJ_DATA_ROOT is not set. We need at least one - # working J2K test. - j2k = Jp2k(self.j2kfile) - d = j2k.read() - - -@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, - "Missing openjpeg library.") -@unittest.skipIf(data_root is None, - "OPJ_DATA_ROOT environment variable not set") -class TestSuite(unittest.TestCase): - - @classmethod - def setUpClass(cls): - # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 - cls.openjp2 = glymur.lib.openjp2._OPENJP2 - glymur.lib.openjp2._OPENJP2 = None - - @classmethod - def tearDownClass(cls): - # Restore OPENJP2 - glymur.lib.openjp2._OPENJP2 = cls.openjp2 - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_ETS_C0P0_p0_01_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_01.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C0P0_p0_02_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') - with warnings.catch_warnings(): - # There's a 0xff30 marker segment. Not illegal, but we don't - # really know what to do with it. Just ignore. - warnings.simplefilter("ignore") - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_02.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C0P0_p0_09_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=2) - - pgxfile = os.path.join(data_root, - 'baseline/conformance/c0p0_09.pgx') - pgxdata = read_pgx(pgxfile) - - self.assertTrue(peak_tolerance(jpdata, pgxdata) < 4) - self.assertTrue(mse(jpdata, pgxdata) < 1.47) - - def test_ETS_C0P0_p0_11_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, - 'baseline/conformance/c0p0_11.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C0P0_p0_12_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, - 'baseline/conformance/c0p0_12.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C0P0_p0_16_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, - 'baseline/conformance/c0p0_16.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C0P1_p1_01_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, - 'baseline/conformance/c0p1_01.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_01_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_01_0.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_02_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') - with warnings.catch_warnings(): - # There's a 0xff30 marker segment. Not illegal, but we don't - # really know what to do with it. Just ignore. - warnings.simplefilter("ignore") - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_02_0.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_03_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_03_0.pgx') - pgxdata = read_pgx(pgxfile) - - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_04_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) - self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.776) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) - self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.626) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) - self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.07) - - def test_ETS_C1P0_p0_08_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_1.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_2.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) - - def test_ETS_C1P0_p0_09_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_09_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_10_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') - jp2k = Jp2k(jfile) - with warnings.catch_warnings(): - # This file has an invalid ICC profile - warnings.simplefilter("ignore") - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_1.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_2.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) - - def test_ETS_C1P0_p0_11_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_11_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C1P0_p0_12_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_12_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C1P0_p0_13_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_1.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_2.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_3.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 3], pgxdata) - - def test_ETS_C1P0_p0_14_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_1.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_2.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) - - def test_ETS_C1P0_p0_15_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_15_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P0_p0_16_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_16_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P1_p1_01_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_01_0.pgx') - pgxdata = read_pgx(pgxfile) - np.testing.assert_array_equal(jpdata, pgxdata) - - def test_ETS_C1P1_p1_02_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) - self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.765) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) - self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.616) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) - self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.051) - - def test_ETS_C1P1_p1_04_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_04_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata, pgxdata) < 624) - self.assertTrue(mse(jpdata, pgxdata) < 3080) - - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C1P1_p1_05_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_05.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 40) - self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 8.458) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 40) - self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 9.816) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 40) - self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 10.154) - - @unittest.skip("fprintf stderr output in r2343.") - def test_ETS_C1P1_p1_06_j2k(self): - jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_0.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 2) - self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.6) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_1.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 2) - self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.6) - - pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_2.pgx') - pgxdata = read_pgx(pgxfile) - self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 2) - self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 0.6) - - def test_ETS_JP2_file1(self): - jfile = os.path.join(data_root, 'input/conformance/file1.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (512, 768, 3)) - - def test_ETS_JP2_file2(self): - jfile = os.path.join(data_root, 'input/conformance/file2.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (640, 480, 3)) - - def test_ETS_JP2_file4(self): - jfile = os.path.join(data_root, 'input/conformance/file4.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (512, 768)) - - def test_ETS_JP2_file5(self): - jfile = os.path.join(data_root, 'input/conformance/file5.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (512, 768, 3)) - - def test_ETS_JP2_file6(self): - jfile = os.path.join(data_root, 'input/conformance/file6.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (512, 768)) - - def test_ETS_JP2_file7(self): - jfile = os.path.join(data_root, 'input/conformance/file7.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (640, 480, 3)) - - def test_ETS_JP2_file8(self): - jfile = os.path.join(data_root, 'input/conformance/file8.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (400, 700)) - - def test_ETS_JP2_file9(self): - jfile = os.path.join(data_root, 'input/conformance/file9.jp2') - jp2k = Jp2k(jfile) - jpdata = jp2k.read() - self.assertEqual(jpdata.shape, (512, 768, 3)) - - def test_NR_DEC_Bretagne2_j2k_1_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/Bretagne2.j2k') - jp2 = Jp2k(jfile) - data = jp2.read() - self.assertTrue(True) - - def test_NR_DEC__00042_j2k_2_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/_00042.j2k') - jp2 = Jp2k(jfile) - data = jp2.read() - self.assertTrue(True) - - @unittest.skip("fprintf stderr output in r2343.") - def test_NR_DEC_123_j2c_3_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/123.j2c') - jp2 = Jp2k(jfile) - data = jp2.read() - self.assertTrue(True) - - @unittest.skipIf(sys.hexversion < 0x03020000, - "Uses features introduced in 3.2.") - def test_NR_DEC_broken_jp2_4_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/broken.jp2') - with self.assertWarns(UserWarning) as cw: - # colr box has bad length. - jp2 = Jp2k(jfile) - with self.assertRaises(ValueError): - data = jp2.read() - self.assertTrue(True) - - def test_NR_DEC_broken2_jp2_5_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/broken2.jp2') - with self.assertRaises(IOError): - data = Jp2k(jfile).read() - self.assertTrue(True) - - @unittest.skipIf(sys.hexversion < 0x03020000, - "Uses features introduced in 3.2.") - def test_NR_DEC_broken3_jp2_6_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/broken3.jp2') - with self.assertWarns(UserWarning) as cw: - # colr box has bad length. - j = Jp2k(jfile) - - with self.assertRaises(ValueError) as ce: - d = j.read() - - def test_NR_DEC_broken4_jp2_7_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/broken4.jp2') - with self.assertRaises(IOError): - data = Jp2k(jfile).read() - self.assertTrue(True) - - @unittest.skip("fprintf stderr output in r2343.") - def test_NR_DEC_bug_j2c_8_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/bug.j2c') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_buxI_j2k_9_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/buxI.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_buxR_j2k_10_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/buxR.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_Cannotreaddatawithnosizeknown_j2k_11_decode(self): - relpath = 'input/nonregression/Cannotreaddatawithnosizeknown.j2k' - jfile = os.path.join(data_root, relpath) - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_cthead1_j2k_12_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/cthead1.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_CT_Phillips_JPEG2K_Decompr_Problem_j2k_13_decode(self): - relpath = 'input/nonregression/CT_Phillips_JPEG2K_Decompr_Problem.j2k' - jfile = os.path.join(data_root, relpath) - data = Jp2k(jfile).read() - self.assertTrue(True) - - @unittest.skip("fprintf stderr output in r2343.") - def test_NR_DEC_illegalcolortransform_j2k_14_decode(self): - # Stream too short, expected SOT. - jfile = os.path.join(data_root, - 'input/nonregression/illegalcolortransform.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_j2k32_j2k_15_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/j2k32.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_kakadu_v4_4_openjpegv2_broken_j2k_16_decode(self): - relpath = 'input/nonregression/kakadu_v4-4_openjpegv2_broken.j2k' - jfile = os.path.join(data_root, relpath) - with warnings.catch_warnings(): - # This file has an invalid ICC profile - warnings.simplefilter("ignore") - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_MarkerIsNotCompliant_j2k_17_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/MarkerIsNotCompliant.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_Marrin_jp2_18_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/Marrin.jp2') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_movie_00000_j2k_20_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/movie_00000.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_movie_00001_j2k_21_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/movie_00001.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_movie_00002_j2k_22_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/movie_00002.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_orb_blue_lin_j2k_j2k_23_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/orb-blue10-lin-j2k.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_orb_blue_win_j2k_j2k_24_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/orb-blue10-win-j2k.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_orb_blue_lin_jp2_25_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/orb-blue10-lin-jp2.jp2') - with warnings.catch_warnings(): - # This file has an invalid ICC profile - warnings.simplefilter("ignore") - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_orb_blue_win_jp2_26_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/orb-blue10-win-jp2.jp2') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_relax_jp2_27_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/relax.jp2') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_test_lossless_j2k_28_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/test_lossless.j2k') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_issue104_jpxstream_jp2_33_decode(self): - jfile = os.path.join(data_root, - 'input/nonregression/issue104_jpxstream.jp2') - data = Jp2k(jfile).read() - self.assertTrue(True) - - def test_NR_DEC_file_409752_jp2_40_decode(self): - jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2') - j = Jp2k(jfile) - with self.assertRaises(RuntimeError) as ce: - data = j.read() - -if __name__ == "__main__": - unittest.main() diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index fe2485b..a6f59dc 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -23,6 +23,7 @@ import numpy as np from glymur import Jp2k import glymur + from .fixtures import * try: @@ -7331,5 +7332,615 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) + +@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, + "Missing openjpeg library.") +@unittest.skipIf(data_root is None, + "OPJ_DATA_ROOT environment variable not set") +class TestSuite15(unittest.TestCase): + """Suite of tests for libopenjpeg 1.5.1""" + + @classmethod + def setUpClass(cls): + # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 + cls.openjp2 = glymur.lib.openjp2._OPENJP2 + glymur.lib.openjp2._OPENJP2 = None + + @classmethod + def tearDownClass(cls): + # Restore OPENJP2 + glymur.lib.openjp2._OPENJP2 = cls.openjp2 + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_ETS_C0P0_p0_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_01.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') + with warnings.catch_warnings(): + # There's a 0xff30 marker segment. Not illegal, but we don't + # really know what to do with it. Just ignore. + warnings.simplefilter("ignore") + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_02.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_09_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=2) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_09.pgx') + pgxdata = read_pgx(pgxfile) + + self.assertTrue(peak_tolerance(jpdata, pgxdata) < 4) + self.assertTrue(mse(jpdata, pgxdata) < 1.47) + + def test_ETS_C0P0_p0_11_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_11.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C0P0_p0_12_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_12.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P0_p0_16_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p0_16.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C0P1_p1_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, + 'baseline/conformance/c0p1_01.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_01_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') + with warnings.catch_warnings(): + # There's a 0xff30 marker segment. Not illegal, but we don't + # really know what to do with it. Just ignore. + warnings.simplefilter("ignore") + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_02_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_03_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_03_0.pgx') + pgxdata = read_pgx(pgxfile) + + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_04_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.776) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.626) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.07) + + def test_ETS_C1P0_p0_08_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=1) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_09_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_09_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_10_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') + jp2k = Jp2k(jfile) + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_11_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_11_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P0_p0_12_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_12_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P0_p0_13_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_3.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 3], pgxdata) + + def test_ETS_C1P0_p0_14_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 0], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_1.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 1], pgxdata) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_2.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata[:, :, 2], pgxdata) + + def test_ETS_C1P0_p0_15_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_15_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P0_p0_16_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_16_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P1_p1_01_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_01_0.pgx') + pgxdata = read_pgx(pgxfile) + np.testing.assert_array_equal(jpdata, pgxdata) + + def test_ETS_C1P1_p1_02_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read(reduce=0) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 5) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.765) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 4) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.616) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 6) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 1.051) + + def test_ETS_C1P1_p1_04_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_04_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata, pgxdata) < 624) + self.assertTrue(mse(jpdata, pgxdata) < 3080) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P1_p1_05_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_05.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 8.458) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 9.816) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_05_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 40) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 10.154) + + @unittest.skip("fprintf stderr output in r2343.") + def test_ETS_C1P1_p1_06_j2k(self): + jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_0.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 0], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 0], pgxdata) < 0.6) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_1.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 1], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 1], pgxdata) < 0.6) + + pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_06_2.pgx') + pgxdata = read_pgx(pgxfile) + self.assertTrue(peak_tolerance(jpdata[:, :, 2], pgxdata) < 2) + self.assertTrue(mse(jpdata[:, :, 2], pgxdata) < 0.6) + + def test_ETS_JP2_file1(self): + jfile = os.path.join(data_root, 'input/conformance/file1.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_ETS_JP2_file2(self): + jfile = os.path.join(data_root, 'input/conformance/file2.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (640, 480, 3)) + + def test_ETS_JP2_file4(self): + jfile = os.path.join(data_root, 'input/conformance/file4.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768)) + + def test_ETS_JP2_file5(self): + jfile = os.path.join(data_root, 'input/conformance/file5.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_ETS_JP2_file6(self): + jfile = os.path.join(data_root, 'input/conformance/file6.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768)) + + def test_ETS_JP2_file7(self): + jfile = os.path.join(data_root, 'input/conformance/file7.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (640, 480, 3)) + + def test_ETS_JP2_file8(self): + jfile = os.path.join(data_root, 'input/conformance/file8.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (400, 700)) + + def test_ETS_JP2_file9(self): + jfile = os.path.join(data_root, 'input/conformance/file9.jp2') + jp2k = Jp2k(jfile) + jpdata = jp2k.read() + self.assertEqual(jpdata.shape, (512, 768, 3)) + + def test_NR_DEC_Bretagne2_j2k_1_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/Bretagne2.j2k') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + def test_NR_DEC__00042_j2k_2_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/_00042.j2k') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_123_j2c_3_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/123.j2c') + jp2 = Jp2k(jfile) + data = jp2.read() + self.assertTrue(True) + + @unittest.skipIf(sys.hexversion < 0x03020000, + "Uses features introduced in 3.2.") + def test_NR_DEC_broken_jp2_4_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken.jp2') + with self.assertWarns(UserWarning) as cw: + # colr box has bad length. + jp2 = Jp2k(jfile) + with self.assertRaises(ValueError): + data = jp2.read() + self.assertTrue(True) + + def test_NR_DEC_broken2_jp2_5_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken2.jp2') + with self.assertRaises(IOError): + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skipIf(sys.hexversion < 0x03020000, + "Uses features introduced in 3.2.") + def test_NR_DEC_broken3_jp2_6_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken3.jp2') + with self.assertWarns(UserWarning) as cw: + # colr box has bad length. + j = Jp2k(jfile) + + with self.assertRaises(ValueError) as ce: + d = j.read() + + def test_NR_DEC_broken4_jp2_7_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/broken4.jp2') + with self.assertRaises(IOError): + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_bug_j2c_8_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/bug.j2c') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_buxI_j2k_9_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/buxI.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_buxR_j2k_10_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/buxR.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_Cannotreaddatawithnosizeknown_j2k_11_decode(self): + relpath = 'input/nonregression/Cannotreaddatawithnosizeknown.j2k' + jfile = os.path.join(data_root, relpath) + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_cthead1_j2k_12_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/cthead1.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_CT_Phillips_JPEG2K_Decompr_Problem_j2k_13_decode(self): + relpath = 'input/nonregression/CT_Phillips_JPEG2K_Decompr_Problem.j2k' + jfile = os.path.join(data_root, relpath) + data = Jp2k(jfile).read() + self.assertTrue(True) + + @unittest.skip("fprintf stderr output in r2343.") + def test_NR_DEC_illegalcolortransform_j2k_14_decode(self): + # Stream too short, expected SOT. + jfile = os.path.join(data_root, + 'input/nonregression/illegalcolortransform.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_j2k32_j2k_15_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/j2k32.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_kakadu_v4_4_openjpegv2_broken_j2k_16_decode(self): + relpath = 'input/nonregression/kakadu_v4-4_openjpegv2_broken.j2k' + jfile = os.path.join(data_root, relpath) + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_MarkerIsNotCompliant_j2k_17_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/MarkerIsNotCompliant.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_Marrin_jp2_18_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/Marrin.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_movie_00000_j2k_20_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00000.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_movie_00001_j2k_21_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00001.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_movie_00002_j2k_22_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/movie_00002.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_lin_j2k_j2k_23_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-lin-j2k.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_win_j2k_j2k_24_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-win-j2k.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_lin_jp2_25_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-lin-jp2.jp2') + with warnings.catch_warnings(): + # This file has an invalid ICC profile + warnings.simplefilter("ignore") + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_orb_blue_win_jp2_26_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/orb-blue10-win-jp2.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_relax_jp2_27_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/relax.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_test_lossless_j2k_28_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/test_lossless.j2k') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_issue104_jpxstream_jp2_33_decode(self): + jfile = os.path.join(data_root, + 'input/nonregression/issue104_jpxstream.jp2') + data = Jp2k(jfile).read() + self.assertTrue(True) + + def test_NR_DEC_file_409752_jp2_40_decode(self): + jfile = os.path.join(data_root, 'input/nonregression/file409752.jp2') + j = Jp2k(jfile) + with self.assertRaises(RuntimeError) as ce: + data = j.read() + if __name__ == "__main__": unittest.main() From ceb71ccbf2cf50304d676d8c7a4549ace470c20a Mon Sep 17 00:00:00 2001 From: jevans Date: Sat, 6 Jul 2013 22:43:53 -0400 Subject: [PATCH 25/54] pylint work. --- glymur/codestream.py | 54 ++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index 327dd19..0515877 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -701,12 +701,12 @@ class Codestream(object): return QCCsegment(**kwargs) - def _parseQCDsegment(self, f): + def _parseQCDsegment(self, fptr): """Parse the QCD segment. Parameters ---------- - f : file + fptr : file Open file object. Returns @@ -714,20 +714,20 @@ class Codestream(object): QCD Segment instance. """ kwargs = {} - kwargs['offset'] = f.tell() - 2 + kwargs['offset'] = fptr.tell() - 2 - buffer = f.read(3) - length, sqcd = struct.unpack('>HB', buffer) + read_buffer = fptr.read(3) + length, sqcd = struct.unpack('>HB', read_buffer) kwargs['length'] = length kwargs['Sqcd'] = sqcd kwargs['_guardBits'] = (sqcd & 0xe0) >> 5 - buffer = f.read(length - 3) + read_buffer = fptr.read(length - 3) - mantissa, exponent = self._parseQuantization(buffer, sqcd) + mantissa, exponent = self._parseQuantization(read_buffer, sqcd) - kwargs['SPqcd'] = buffer + kwargs['SPqcd'] = read_buffer kwargs['_exponent'] = exponent kwargs['_mantissa'] = mantissa @@ -748,15 +748,15 @@ class Codestream(object): kwargs = {} kwargs['offset'] = f.tell() - 2 - buffer = f.read(2) - length, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + length, = struct.unpack('>H', read_buffer) if self._Csiz < 257: - buffer = f.read(3) - data = struct.unpack('>BBB', buffer) + read_buffer = f.read(3) + data = struct.unpack('>BBB', read_buffer) else: - buffer = f.read(4) - data = struct.unpack('>HBB', buffer) + read_buffer = f.read(4) + data = struct.unpack('>HBB', read_buffer) kwargs['length'] = length kwargs['Crgn'] = data[0] @@ -765,12 +765,12 @@ class Codestream(object): return RGNsegment(**kwargs) - def _parseSODsegment(self, f): + def _parseSODsegment(self, fptr): """Parse the SOD segment. Parameters ---------- - f : file + fptr : file Open file object. Returns @@ -778,17 +778,17 @@ class Codestream(object): SOD segment instance. """ kwargs = {} - kwargs['offset'] = f.tell() - 2 + kwargs['offset'] = fptr.tell() - 2 kwargs['length'] = 0 return SODsegment(**kwargs) - def _parseSOTsegment(self, f): + def _parseSOTsegment(self, fptr): """Parse the SOT segment. Parameters ---------- - f : file + fptr : file Open file object. Returns @@ -796,10 +796,10 @@ class Codestream(object): SOT segment instance. """ kwargs = {} - kwargs['offset'] = f.tell() - 2 + kwargs['offset'] = fptr.tell() - 2 - buffer = f.read(10) - data = struct.unpack('>HHIBB', buffer) + read_buffer = fptr.read(10) + data = struct.unpack('>HHIBB', read_buffer) kwargs['length'] = data[0] kwargs['Isot'] = data[1] @@ -1682,13 +1682,13 @@ class TLMsegment(Segment): return msg -def _parse_precinct_size(buffer): +def _parse_precinct_size(spcod): """Compute precinct size from SPcod or SPcoc.""" - SPcocd = np.frombuffer(buffer, dtype=np.uint8) + spcod = np.frombuffer(spcod, dtype=np.uint8) precinct_size = [] - for x in SPcocd: - ep2 = (x & 0xF0) >> 4 - ep1 = x & 0x0F + for item in spcod: + ep2 = (item & 0xF0) >> 4 + ep1 = item & 0x0F precinct_size.append((2 ** ep1, 2 ** ep2)) return precinct_size From 0162117ee2e916652c8a1301533640930a692b26 Mon Sep 17 00:00:00 2001 From: John Evans Date: Sun, 7 Jul 2013 13:36:32 -0400 Subject: [PATCH 26/54] pylint work. Focused on the codestream object. More to do, but the changes were considerable. --- glymur/codestream.py | 1534 ++++++------ glymur/jp2k.py | 16 +- glymur/test/__init__.py | 1 + glymur/test/test_codestream.py | 4 +- glymur/test/test_jp2box.py | 48 +- glymur/test/test_jp2k.py | 6 +- glymur/test/test_opj_suite.py | 3474 +++++++++++++-------------- glymur/test/test_opj_suite_write.py | 454 ++-- glymur/test/test_printing.py | 1 + 9 files changed, 2782 insertions(+), 2756 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index 0515877..0bba795 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -3,6 +3,7 @@ The module contains classes used to store information parsed from JPEG 2000 codestreams. """ +# pylint: disable=C0302,R0902,R0903,R0913 import math import struct @@ -47,34 +48,35 @@ class Codestream(object): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, f, header_only=True): + def __init__(self, fptr, header_only=True): """ Parameters ---------- - f : file + fptr : file Open file object. header_only : bool, optional If True, only marker segments in the main header are parsed. Supplying False may impose a large performance penalty. """ - self._parse_tile_part_bit_stream_flag = False + # Do we parse the tile part bit stream or not? + self._parse_tpart_flag = False self.segment = [] # First two bytes are the SOC marker - buffer = f.read(2) - marker_id, = struct.unpack('>H', buffer) - segment = SOCsegment(offset=f.tell() - 2, length=0) + read_buffer = fptr.read(2) + marker_id, = struct.unpack('>H', read_buffer) + segment = SOCsegment(offset=fptr.tell() - 2, length=0) self.segment.append(segment) tile_offset = [] tile_length = [] while True: - offset = f.tell() - buffer = f.read(2) - marker_id, = struct.unpack('>H', buffer) + offset = fptr.tell() + read_buffer = fptr.read(2) + marker_id, = struct.unpack('>H', read_buffer) if marker_id >= 0xff30 and marker_id <= 0xff3f: the_id = '0x{0:x}'.format(marker_id) @@ -83,44 +85,52 @@ class Codestream(object): elif marker_id == 0xff51: # Need to keep track of the number of components from SIZ for # other markers - segment = self._parseSIZsegment(f) - self._Csiz = len(segment.Ssiz) + segment = _parse_siz_segment(fptr) + self._csiz = len(segment.ssiz) elif marker_id == 0xff52: - segment = self._parseCODsegment(f) + segment = _parse_cod_segment(fptr) + + sop = (segment.scod & 2) > 0 + eph = (segment.scod & 4) > 0 + + if sop or eph: + self._parse_tpart_flag = True + else: + self._parse_tpart_flag = False elif marker_id == 0xff53: - segment = self._parseCOCsegment(f) + segment = self._parse_coc_segment(fptr) elif marker_id == 0xff55: - segment = self._parseTLMsegment(f) + segment = _parse_tlm_segment(fptr) elif marker_id == 0xff58: - segment = self._parsePLTsegment(f) + segment = _parse_plt_segment(fptr) elif marker_id == 0xff5c: - segment = self._parseQCDsegment(f) + segment = _parse_qcd_segment(fptr) elif marker_id == 0xff5d: - segment = self._parseQCCsegment(f) + segment = self._parse_qcc_segment(fptr) elif marker_id == 0xff5e: - segment = self._parseRGNsegment(f) + segment = self._parse_rgn_segment(fptr) elif marker_id == 0xff5f: - segment = self._parsePODsegment(f) + segment = self._parse_pod_segment(fptr) elif marker_id == 0xff60: - segment = self._parsePPMsegment(f) + segment = _parse_ppm_segment(fptr) elif marker_id == 0xff61: - segment = self._parsePPTsegment(f) + segment = _parse_ppt_segment(fptr) elif marker_id == 0xff63: - segment = self._parseCRGsegment(f) + segment = _parse_crg_segment(fptr, self._csiz) elif marker_id == 0xff64: - segment = self._parseCMEsegment(f) + segment = _parse_cme_segment(fptr) elif marker_id == 0xff90: # Need to keep easy access to tile offsets and lengths for when @@ -129,50 +139,50 @@ class Codestream(object): # Stop parsing as soon as we hit the first Start Of Tile. return - segment = self._parseSOTsegment(f) + segment = _parse_sot_segment(fptr) if segment.offset not in tile_offset: tile_offset.append(segment.offset) - tile_length.append(segment.Psot) + tile_length.append(segment.psot) else: msg = "Inconsistent start-of-tile (SOT) marker segment " msg += "encountered in tile with index {0}. " msg += "Codestream parsing terminated." - msg = msg.format(segment.Isot) + msg = msg.format(segment.isot) warnings.warn(msg) return elif marker_id == 0xff93: # start of data. Need to seek past the current tile part. # The last SOT marker segment has the info that we need. - segment = self._parseSODsegment(f) + segment = _parse_sod_segment(fptr) elif marker_id == 0xffd9: # end of codestream - segment = self._parseEOCsegment(f) + segment = _parse_eoc_segment(fptr) self.segment.append(segment) break elif marker_id in _valid_markers: # It's a reserved marker that I don't know anything about. # See table A-1 in ISO/IEC FCD15444-1. - segment = self._parseGenericSegment(f, marker_id) + segment = _parse_generic_segment(fptr, marker_id) elif ((marker_id & 0xff00) >> 8) == 255: # Peek ahead to see if the next two bytes are a marker or not. # Then seek back. msg = "Unrecognized marker id: 0x{0:x}".format(marker_id) warnings.warn(msg) - cpos = f.tell() - buffer = f.read(2) - next_item, = struct.unpack('>H', buffer) - f.seek(cpos) + cpos = fptr.tell() + read_buffer = fptr.read(2) + next_item, = struct.unpack('>H', read_buffer) + fptr.seek(cpos) if ((next_item & 0xff00) >> 8) == 255: # No segment associated with this marker, so reset # to two bytes after it. segment = Segment(id='0x{0:x}'.format(marker_id), offset=offset, length=0) else: - segment = self._parseGenericSegment(f, marker_id) + segment = _parse_generic_segment(fptr, marker_id) else: msg = 'Invalid marker id encountered at byte {0:d} ' @@ -184,41 +194,37 @@ class Codestream(object): if marker_id == 0xff93: # If SOD, then we need to seek past the tile part bit stream. - x = f.tell() - if self._parse_tile_part_bit_stream_flag: + if self._parse_tpart_flag: # But first parse the tile part bit stream for SOP and # EPH segments. - self._parse_tile_part_bit_stream(f, segment, + self._parse_tile_part_bit_stream(fptr, segment, tile_length[-1]) - f.seek(tile_offset[-1] + tile_length[-1]) + fptr.seek(tile_offset[-1] + tile_length[-1]) - def _parse_tile_part_bit_stream(self, f, sod_marker, tile_length): + def _parse_tile_part_bit_stream(self, fptr, sod_marker, tile_length): """Parse the tile part bit stream for SOP, EPH marker segments.""" - buffer = f.read(tile_length) + read_buffer = fptr.read(tile_length) # The tile length could possibly be too large and extend past # the end of file. We need to be a bit resilient. - count = min(tile_length, len(buffer)) - packet = np.frombuffer(buffer, dtype=np.uint8, count=count) + count = min(tile_length, len(read_buffer)) + packet = np.frombuffer(read_buffer, dtype=np.uint8, count=count) indices = np.where(packet == 0xff) for idx in indices[0]: try: if packet[idx+1] == 0x91 and (idx < (len(packet) - 5)): - kwargs = {} - kwargs['offset'] = sod_marker.offset + 2 + idx - kwargs['length'] = 4 + offset = sod_marker.offset + 2 + idx + length = 4 nsop = packet[(idx + 4):(idx+6)].view('uint16')[0] if sys.byteorder == 'little': nsop = nsop.byteswap() - kwargs['Nsop'] = nsop - segment = SOPsegment(**kwargs) + segment = SOPsegment(nsop, length, offset) self.segment.append(segment) elif packet[idx + 1] == 0x92: - kwargs = {} - kwargs['offset'] = sod_marker.offset + 2 + idx - kwargs['length'] = 0 - segment = EPHsegment(**kwargs) + offset = sod_marker.offset + 2 + idx + length = 0 + segment = EPHsegment(length, offset) self.segment.append(segment) except IndexError: continue @@ -233,170 +239,12 @@ class Codestream(object): msg += ''.join(strs) return msg - def _parseSIZsegment(self, f): - """Parse the SIZ segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - SIZsegment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(38) - data = struct.unpack('>HHIIIIIIIIH', buffer) - - kwargs['length'] = data[0] - kwargs['Rsiz'] = data[1] - - Xsiz = data[2] - Ysiz = data[3] - XOsiz = data[4] - YOsiz = data[5] - XTsiz = data[6] - YTsiz = data[7] - XTOsiz = data[8] - YTOsiz = data[9] - - num_tiles_x = (Xsiz - XOsiz) / (XTsiz - XTOsiz) - num_tiles_y = (Ysiz - YOsiz) / (YTsiz - YTOsiz) - numtiles = math.ceil(num_tiles_x) * math.ceil(num_tiles_y) - if numtiles > 65535: - msg = "Invalid number of tiles ({0}).".format(numtiles) - warnings.warn(msg) - - kwargs['Xsiz'] = Xsiz - kwargs['Ysiz'] = Ysiz - kwargs['XOsiz'] = XOsiz - kwargs['YOsiz'] = YOsiz - kwargs['XTsiz'] = XTsiz - kwargs['YTsiz'] = YTsiz - kwargs['XTOsiz'] = XTOsiz - kwargs['YTOsiz'] = YTOsiz - - num_components = data[10] - buffer = f.read(num_components * 3) - data = struct.unpack('>' + 'B' * num_components * 3, buffer) - - Ssiz = data[0::3] - kwargs['Ssiz'] = Ssiz - kwargs['_bitdepth'] = tuple(((x & 0x7f) + 1) for x in Ssiz) - kwargs['_signed'] = tuple(((x & 0xb0) > 0) for x in Ssiz) - - ssf = [] - for j, subsampling in enumerate(list(zip(data[1::3], data[2::3]))): - if 0 in subsampling: - msg = "Invalid subsampling value for component {0}: " - msg += "dx={1}, dy={2}." - msg = msg.format(j, subsampling[0], subsampling[1]) - warnings.warn(msg) - kwargs['XRsiz'] = data[1::3] - kwargs['YRsiz'] = data[2::3] - - return SIZsegment(**kwargs) - - def _parseGenericSegment(self, f, marker_id): - """Parse a generic marker segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - Segment instance. - """ - kwargs = {} - offset = f.tell() - 2 - - buffer = f.read(2) - length, = struct.unpack('>H', buffer) - data = f.read(length-2) - - segment = Segment(id='0x{0:x}'.format(marker_id), - offset=offset, length=length) - segment.data = data - return segment - - def _parseCMEsegment(self, f): - """Parse the CME marker segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - CME segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(4) - data = struct.unpack('>HH', buffer) - kwargs['length'] = data[0] - kwargs['Rcme'] = data[1] - kwargs['Ccme'] = f.read(kwargs['length'] - 4) - - return CMEsegment(**kwargs) - - def _parseCRGsegment(self, f): - """Parse the CRG marker segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - CRG segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(2) - length, = struct.unpack('>H', buffer) - kwargs['length'] = length - - buffer = f.read(4 * self._Csiz) - data = struct.unpack('>' + 'HH' * self._Csiz, buffer) - kwargs['Xcrg'] = data[0::2] - kwargs['Ycrg'] = data[1::2] - - return CRGsegment(**kwargs) - - def _parseEOCsegment(self, f): - """Parse the EOC marker segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - EOC Segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - kwargs['length'] = 0 - - return EOCsegment(**kwargs) - - def _parseCOCsegment(self, f): + def _parse_coc_segment(self, fptr): """Parse the COC marker segment. Parameters ---------- - f : file + fptr : file Open file object. Returns @@ -404,469 +252,127 @@ class Codestream(object): COC segment instance. """ kwargs = {} - offset = f.tell() - 2 + offset = fptr.tell() - 2 kwargs['offset'] = offset - buffer = f.read(2) - length, = struct.unpack('>H', buffer) + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) kwargs['length'] = length - if self._Csiz <= 255: - buffer = f.read(1) - component, = struct.unpack('>B', buffer) + if self._csiz <= 255: + read_buffer = fptr.read(1) + component, = struct.unpack('>B', read_buffer) else: - buffer = f.read(2) - component, = struct.unpack('>H', buffer) - kwargs['Ccoc'] = component + read_buffer = fptr.read(2) + component, = struct.unpack('>H', read_buffer) + ccoc = component - buffer = f.read(1) - kwargs['Scoc'], = struct.unpack('>B', buffer) + read_buffer = fptr.read(1) + scoc, = struct.unpack('>B', read_buffer) - n = offset + 2 + length - f.tell() - buffer = f.read(n) - SPcoc = np.frombuffer(buffer, dtype=np.uint8) - kwargs['SPcoc'] = SPcoc + numbytes = offset + 2 + length - fptr.tell() + read_buffer = fptr.read(numbytes) + spcoc = np.frombuffer(read_buffer, dtype=np.uint8) + spcoc = spcoc - e1 = SPcoc[1] - e2 = SPcoc[2] - _code_block_size = (4 * math.pow(2, e2), 4 * math.pow(2, e1)) - kwargs['_code_block_size'] = _code_block_size + return COCsegment(ccoc, scoc, spcoc, length, offset) - if len(SPcoc) > 5: - kwargs['_precinct_size'] = _parse_precinct_size(SPcoc[5:]) - else: - kwargs['_precinct_size'] = None - - return COCsegment(**kwargs) - - def _parseCODsegment(self, f): - """Parse the COD segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - COD segment instance. - """ - kwargs = {} - offset = f.tell() - 2 - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(3) - length, Scod = struct.unpack('>HB', buffer) - kwargs['length'] = length - kwargs['Scod'] = Scod - - sop = (Scod & 2) > 0 - eph = (Scod & 4) > 0 - - if sop or eph: - self._parse_tile_part_bit_stream_flag = True - else: - self._parse_tile_part_bit_stream_flag = False - - n = offset + 2 + length - f.tell() - SPcod = f.read(n) - kwargs['SPcod'] = np.frombuffer(SPcod, dtype=np.uint8) - - params = struct.unpack('>BHBBBBBB', SPcod[0:9]) - kwargs['_layers'] = params[1] - kwargs['_numresolutions'] = params[3] - - if params[3] > opj2._J2K_MAXRLVLS: - msg = "Invalid number of resolutions ({0})." - msg = msg.format(params[3] + 1) - warnings.warn(msg) - - cblk_width = 4 * math.pow(2, params[4]) - cblk_height = 4 * math.pow(2, params[5]) - code_block_size = (cblk_height, cblk_width) - kwargs['_code_block_size'] = code_block_size - - if len(SPcod) > 9: - kwargs['_precinct_size'] = _parse_precinct_size(SPcod[9:]) - else: - kwargs['_precinct_size'] = None - - return CODsegment(**kwargs) - - def _parsePODsegment(self, f): + def _parse_pod_segment(self, fptr): """Parse the POD segment. Parameters ---------- - f : file + fptr : file Open file object. Returns ------- POD segment instance. """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 + offset = fptr.tell() - 2 - buffer = f.read(2) - length, = struct.unpack('>H', buffer) + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) - if self._Csiz < 257: - n = int((length - 2) / 7) - buffer = f.read(n * 7) - fmt = '>' + 'BBHBBB' * n + if self._csiz < 257: + numbytes = int((length - 2) / 7) + read_buffer = fptr.read(numbytes * 7) + fmt = '>' + 'BBHBBB' * numbytes else: - n = int((length - 2) / 9) - buffer = f.read(n * 9) - fmt = '>' + 'BHHBHB' * n + numbytes = int((length - 2) / 9) + read_buffer = fptr.read(numbytes * 9) + fmt = '>' + 'BHHBHB' * numbytes - data = struct.unpack(fmt, buffer) + pod_params = struct.unpack(fmt, read_buffer) - kwargs['length'] = length - kwargs['RSpod'] = data[0::6] - kwargs['CSpod'] = data[1::6] - kwargs['LYEpod'] = data[2::6] - kwargs['REpod'] = data[3::6] - kwargs['CEpod'] = data[4::6] - kwargs['Ppod'] = data[5::6] + return PODsegment(pod_params, length, offset) - return PODsegment(**kwargs) - - def _parsePPMsegment(self, f): - """Parse the PPM segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - PPM segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(3) - length, zppm = struct.unpack('>HB', buffer) - kwargs['length'] = length - kwargs['Zppm'] = zppm - - n = length - 3 - kwargs['data'] = f.read(n) - - return PPMsegment(**kwargs) - - def _parsePLTsegment(self, f): - """Parse the PLT segment. - - The packet headers are not parsed, i.e. they remain "uninterpreted" - raw data beffers. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - PLT segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(3) - length, zplt = struct.unpack('>HB', buffer) - kwargs['length'] = length - kwargs['Zplt'] = zplt - - n = length - 3 - buffer = f.read(n) - iplt = np.frombuffer(buffer, dtype=np.uint8) - - packet_len = [] - plen = 0 - for x in iplt: - plen |= (x & 0x7f) - if x & 0x80: - # Continue by or-ing in the next byte. - plen <<= 7 - else: - packet_len.append(plen) - plen = 0 - - kwargs['Iplt'] = packet_len - - return PLTsegment(**kwargs) - - def _parsePPTsegment(self, f): - """Parse the PPT segment. - - The packet headers are not parsed, i.e. they remain "uninterpreted" - raw data beffers. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - PPT segment instance. - """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 - - buffer = f.read(3) - length, zppt = struct.unpack('>HB', buffer) - kwargs['length'] = length - kwargs['Zppt'] = zppt - - n = length - 3 - kwargs['Ippt'] = f.read(n) - - return PPTsegment(**kwargs) - - def _parseQuantization(self, buffer, sqcd): - """Tease out the quantization values. - - Args: - buffer: sequence of bytes from the QCC and QCD segments. - """ - n = len(buffer) - - exponent = [] - mantissa = [] - - if sqcd & 0x1f == 0: # no quantization - data = struct.unpack('>' + 'B' * n, buffer) - for j in range(len(data)): - exponent.append(data[j] >> 3) - mantissa.append(0) - else: - fmt = '>' + 'H' * int(n / 2) - data = struct.unpack(fmt, buffer) - for j in range(len(data)): - exponent.append(data[j] >> 11) - mantissa.append(data[j] & 0x07ff) - - return mantissa, exponent - - def _parseQCCsegment(self, f): + def _parse_qcc_segment(self, fptr): """Parse the QCC segment. Parameters ---------- - f : file + fptr : file Open file object. Returns ------- QCC Segment instance. """ - kwargs = {} - offset = f.tell() - 2 - kwargs['offset'] = offset + offset = fptr.tell() - 2 - buffer = f.read(2) - length, = struct.unpack('>H', buffer) - kwargs['length'] = length + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) - if self._Csiz > 256: - buffer = f.read(3) + if self._csiz > 256: + read_buffer = fptr.read(3) fmt = '>HB' - n = length - 5 + mantissa_exponent_buffer_length = length - 5 else: - buffer = f.read(2) + read_buffer = fptr.read(2) fmt = '>BB' - n = length - 4 - Cqcc, Sqcc = struct.unpack(fmt, buffer) - if Cqcc >= self._Csiz: + mantissa_exponent_buffer_length = length - 4 + cqcc, sqcc = struct.unpack(fmt, read_buffer) + if cqcc >= self._csiz: msg = "Invalid component number (%d), " msg += "number of components is only %d." - msg = msg.format(Cqcc, self._Csiz) + msg = msg.format(cqcc, self._csiz) warnings.warn(msg) - kwargs['Cqcc'] = Cqcc - kwargs['Sqcc'] = Sqcc - kwargs['_guardBits'] = (Sqcc & 0xe0) >> 5 + spqcc = fptr.read(mantissa_exponent_buffer_length) - buffer = f.read(n) + return QCCsegment(cqcc, sqcc, spqcc, length, offset) - mantissa, exponent = self._parseQuantization(buffer, Sqcc) - - kwargs['SPqcc'] = buffer - kwargs['_exponent'] = exponent - kwargs['_mantissa'] = mantissa - - return QCCsegment(**kwargs) - - def _parseQCDsegment(self, fptr): - """Parse the QCD segment. - - Parameters - ---------- - fptr : file - Open file object. - - Returns - ------- - QCD Segment instance. - """ - kwargs = {} - kwargs['offset'] = fptr.tell() - 2 - - read_buffer = fptr.read(3) - length, sqcd = struct.unpack('>HB', read_buffer) - kwargs['length'] = length - kwargs['Sqcd'] = sqcd - - kwargs['_guardBits'] = (sqcd & 0xe0) >> 5 - - read_buffer = fptr.read(length - 3) - - mantissa, exponent = self._parseQuantization(read_buffer, sqcd) - - kwargs['SPqcd'] = read_buffer - kwargs['_exponent'] = exponent - kwargs['_mantissa'] = mantissa - - return QCDsegment(**kwargs) - - def _parseRGNsegment(self, f): + def _parse_rgn_segment(self, fptr): """Parse the RGN segment. Parameters ---------- - f : file + fptr : file Open file object. Returns ------- RGN segment instance. """ - kwargs = {} - kwargs['offset'] = f.tell() - 2 + offset = fptr.tell() - 2 - read_buffer = f.read(2) + read_buffer = fptr.read(2) length, = struct.unpack('>H', read_buffer) - if self._Csiz < 257: - read_buffer = f.read(3) + if self._csiz < 257: + read_buffer = fptr.read(3) data = struct.unpack('>BBB', read_buffer) else: - read_buffer = f.read(4) + read_buffer = fptr.read(4) data = struct.unpack('>HBB', read_buffer) - kwargs['length'] = length - kwargs['Crgn'] = data[0] - kwargs['Srgn'] = data[1] - kwargs['SPrgn'] = data[2] + length = length + crgn = data[0] + srgn = data[1] + sprgn = data[2] - return RGNsegment(**kwargs) - - def _parseSODsegment(self, fptr): - """Parse the SOD segment. - - Parameters - ---------- - fptr : file - Open file object. - - Returns - ------- - SOD segment instance. - """ - kwargs = {} - kwargs['offset'] = fptr.tell() - 2 - kwargs['length'] = 0 - - return SODsegment(**kwargs) - - def _parseSOTsegment(self, fptr): - """Parse the SOT segment. - - Parameters - ---------- - fptr : file - Open file object. - - Returns - ------- - SOT segment instance. - """ - kwargs = {} - kwargs['offset'] = fptr.tell() - 2 - - read_buffer = fptr.read(10) - data = struct.unpack('>HHIBB', read_buffer) - - kwargs['length'] = data[0] - kwargs['Isot'] = data[1] - kwargs['Psot'] = data[2] - kwargs['TPsot'] = data[3] - kwargs['TNsot'] = data[4] - - return SOTsegment(**kwargs) - - def _parseTLMsegment(self, f): - """Parse the TLM segment. - - Parameters - ---------- - f : file - Open file object. - - Returns - ------- - TLM segment instance. - """ - kwargs = {} - offset = f.tell() - 2 - kwargs['offset'] = offset - - buffer = f.read(2) - length, = struct.unpack('>H', buffer) - kwargs['length'] = length - - buffer = f.read(2) - Ztlm, Stlm = struct.unpack('>BB', buffer) - st = (Stlm >> 4) & 0x3 - sp = (Stlm >> 6) & 0x1 - - nbytes = length - 4 - if st == 0: - ntiles = nbytes / ((sp + 1) * 2) - else: - ntiles = nbytes / (st + (sp + 1) * 2) - - buffer = f.read(nbytes) - if st == 0: - Ttlm = None - fmt = '' - elif st == 1: - fmt = 'B' - elif st == 2: - fmt = 'H' - - if sp == 0: - fmt += 'H' - else: - fmt += 'I' - - data = struct.unpack('>' + fmt * int(ntiles), buffer) - if st == 0: - Ttlm = None - Ptlm = data - else: - Ttlm = data[0::2] - Ptlm = data[1::2] - - kwargs['Ztlm'] = Ztlm - kwargs['Ttlm'] = Ttlm - kwargs['Ptlm'] = Ptlm - - return TLMsegment(**kwargs) + return RGNsegment(length, offset, crgn, srgn, sprgn) class Segment(object): @@ -886,6 +392,7 @@ class Segment(object): self.id = id self.offset = offset self.length = length + self._data = None def __str__(self): msg = '{0} marker segment @ ({1}, {2})'.format(self.id, @@ -893,18 +400,6 @@ class Segment(object): self.length) return msg - def _print_quantization_style(self, sqcc): - """Only to be used with QCC and QCD segments.""" - - msg = '\n Quantization style: ' - if sqcc & 0x1f == 0: - msg += 'no quantization, ' - elif sqcc & 0x1f == 1: - msg += 'scalar implicit, ' - elif sqcc & 0x1f == 2: - msg += 'scalar explicit, ' - return msg - class COCsegment(Segment): """COC (Coding style Component) segment information. @@ -918,11 +413,11 @@ class COCsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Ccoc : byte + ccoc : int Index of associated component. - Scoc : byte + scoc : int Coding style for this component. - SPcoc : byte array + spcoc : byte array Coding style parameters for this component. References @@ -931,32 +426,45 @@ class COCsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, ccoc, scoc, spcoc, length, offset): Segment.__init__(self, id='COC') - self.__dict__.update(**kwargs) + self.ccoc = ccoc + self.scoc = scoc + self.spcoc = spcoc + + self._code_block_size = (4 * math.pow(2, self.spcoc[2]), + 4 * math.pow(2, self.spcoc[1])) + + if len(self.spcoc) > 5: + self._precinct_size = _parse_precinct_size(self.spcoc[5:]) + else: + self._precinct_size = None + + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) - msg += '\n Associated component: {0}'.format(self.Ccoc) + msg += '\n Associated component: {0}'.format(self.ccoc) msg += '\n Coding style for this component: ' - if self.Scoc == 0: + if self.scoc == 0: msg += 'Entropy coder, PARTITION = 0' - elif self.Scoc & 0x01: + elif self.scoc & 0x01: msg += 'Entropy coder, PARTITION = 1' msg += '\n Coding style parameters:' msg += '\n Number of resolutions: {0}' msg += '\n Code block height, width: ({1} x {2})' msg += '\n Wavelet transform: {3}' - msg = msg.format(self.SPcoc[0] + 1, + msg = msg.format(self.spcoc[0] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.SPcoc[4]]) + _wavelet_transform_display[self.spcoc[4]]) msg += '\n ' - msg += _context_string(self.SPcoc[3]) + msg += _context_string(self.spcoc[3]) if self._precinct_size is not None: msg += '\n Precinct size: ' @@ -978,9 +486,9 @@ class CODsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Scod : int + scod : int Default coding style. - SPcod : bytes + spcod : bytes Coding style parameters, including quality layers, multicomponent transform usage, decomposition levels, code block size, style of code- block passes, and which wavelet transform is used. @@ -991,9 +499,31 @@ class CODsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, scod, spcod, length, offset): Segment.__init__(self, id='COD') - self.__dict__.update(**kwargs) + self.scod = scod + self.spcod = spcod + self.length = length + self.offset = offset + + params = struct.unpack('>BHBBBBBB', self.spcod[0:9]) + self._layers = params[1] + self._numresolutions = params[3] + + if params[3] > opj2._J2K_MAXRLVLS: + msg = "Invalid number of resolutions ({0})." + msg = msg.format(params[3] + 1) + warnings.warn(msg) + + cblk_width = 4 * math.pow(2, params[4]) + cblk_height = 4 * math.pow(2, params[5]) + code_block_size = (cblk_height, cblk_width) + self._code_block_size = code_block_size + + if len(self.spcod) > 9: + self._precinct_size = _parse_precinct_size(self.spcod[9:]) + else: + self._precinct_size = None def __str__(self): msg = Segment.__str__(self) @@ -1002,15 +532,15 @@ class CODsegment(Segment): msg += '\n Entropy coder, {0} partitions' msg += '\n SOP marker segments: {1}' msg += '\n EPH marker segments: {2}' - msg = msg.format('with' if (self.Scod & 1) else 'without', - ((self.Scod & 2) > 0), - ((self.Scod & 4) > 0)) + msg = msg.format('with' if (self.scod & 1) else 'without', + ((self.scod & 2) > 0), + ((self.scod & 4) > 0)) - if self.SPcod[3] == 0: + if self.spcod[3] == 0: mct = 'no transform specified' - elif self.SPcod[3] & 0x01: + elif self.spcod[3] & 0x01: mct = 'reversible' - elif self.SPcod[3] & 0x02: + elif self.spcod[3] & 0x02: mct = 'irreversible' else: mct = 'unknown' @@ -1025,13 +555,13 @@ class CODsegment(Segment): ' Wavelet transform: {6}'] msg += '\n '.join(lines) - msg = msg.format(_progression_order_display[self.SPcod[0]], + msg = msg.format(_progression_order_display[self.spcod[0]], self._layers, mct, - self.SPcod[4] + 1, + self.spcod[4] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.SPcod[8]]) + _wavelet_transform_display[self.spcod[8]]) msg += '\n Precinct size: ' if self._precinct_size is None: @@ -1041,7 +571,7 @@ class CODsegment(Segment): msg += '({0}, {1})'.format(pps[0], pps[1]) msg += '\n ' - msg += _context_string(self.SPcod[7]) + msg += _context_string(self.spcod[7]) return msg @@ -1058,10 +588,10 @@ class CMEsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Rcme : int + rcme : int Registration value of the marker segment. Zero means general binary values, otherwise probably a string encoded in latin-1. - Ccme: bytes + ccme: bytes Raw bytes representing the comment data. References @@ -1070,19 +600,22 @@ class CMEsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, rcme, ccme, length, offset): Segment.__init__(self, id='CME') - self.__dict__.update(**kwargs) + self.rcme = rcme + self.ccme = ccme + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) + '\n' - if self.Rcme == 1: + if self.rcme == 1: # latin-1 string msg += ' "{0}"' - msg = msg.format(self.Ccme.decode('latin-1')) + msg = msg.format(self.ccme.decode('latin-1')) else: - msg += " binary data (Rcme = {0}): {1} bytes" - msg = msg.format(self.Rcme, len(self.Ccme)) + msg += " binary data (rcme = {0}): {1} bytes" + msg = msg.format(self.rcme, len(self.ccme)) return msg @@ -1098,19 +631,22 @@ class CRGsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Xcrg, Ycrg : int + xcrg, ycrg : int Horizontal, vertical offset for each component """ - def __init__(self, **kwargs): + def __init__(self, xcrg, ycrg, length, offset): Segment.__init__(self, id='CRG') - self.__dict__.update(**kwargs) + self.xcrg = xcrg + self.ycrg = ycrg + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) msg += '\n Vertical, Horizontal offset: ' - for j in range(len(self.Xcrg)): - msg += ' ({0:.2f}, {1:.2f})'.format(self.Ycrg[j]/65535.0, - self.Xcrg[j]/65535.0) + for j in range(len(self.xcrg)): + msg += ' ({0:.2f}, {1:.2f})'.format(self.ycrg[j]/65535.0, + self.xcrg[j]/65535.0) return msg @@ -1134,9 +670,10 @@ class EOCsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, length, offset): Segment.__init__(self, id='EOC') - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset class PODsegment(Segment): @@ -1151,17 +688,17 @@ class PODsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - RSpod : tuple + rspod : tuple resolution indices for start of a progression - CSpod : tuple + cspod : tuple component indices for start of a progression - LYEpod : tuple + lyepod : tuple layer indices for end of a progression - REpod : tuple + repod : tuple resolution indices for end of a progression - CEpod : tuple + cdpod : tuple component indices for end of a progression - Ppod : tuple + ppod : tuple progression order for each change References @@ -1170,13 +707,21 @@ class PODsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, pod_params, length, offset): Segment.__init__(self, id='POD') - self.__dict__.update(**kwargs) + + self.rspod = pod_params[0::6] + self.cspod = pod_params[1::6] + self.lyepod = pod_params[2::6] + self.repod = pod_params[3::6] + self.cdpod = pod_params[4::6] + self.ppod = pod_params[5::6] + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) - for j in range(len(self.RSpod)): + for j in range(len(self.rspod)): msg += '\n ' lines = ['Progression change {0}:', @@ -1188,12 +733,12 @@ class PODsegment(Segment): ' Progression order: {6}'] submsg = '\n '.join(lines) msg += submsg.format(j, - self.RSpod[j], - self.CSpod[j], - self.LYEpod[j], - self.REpod[j], - self.CEpod[j], - _progression_order_display[self.Ppod[j]]) + self.rspod[j], + self.cspod[j], + self.lyepod[j], + self.repod[j], + self.cdpod[j], + _progression_order_display[self.ppod[j]]) return msg @@ -1210,9 +755,9 @@ class PLTsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Zplt : int + zplt : int Index of this segment relative to other PLT segments. - Iplt : list + iplt : list Packet lengths. References @@ -1221,15 +766,18 @@ class PLTsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, zplt, iplt, length, offset): Segment.__init__(self, id='PLT') - self.__dict__.update(**kwargs) + self.zplt = zplt + self.iplt = iplt + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) msg += "\n Index: {0}" msg += "\n Iplt: {1}" - msg = msg.format(self.Zplt, self.Iplt) + msg = msg.format(self.zplt, self.iplt) return msg @@ -1246,10 +794,8 @@ class PPMsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Zppm : int + zppm : int Index of this segment relative to other PPM segments. - data: byte array - Raw data buffer, constitutes both Nppm and Ippm fields. References ---------- @@ -1257,15 +803,21 @@ class PPMsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, zppm, data, length, offset): Segment.__init__(self, id='PPM') - self.__dict__.update(**kwargs) + self.zppm = zppm + + # both Nppm and Ippms information stored in _data + self._data = data + + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) msg += '\n Index: {0}' msg += '\n Data: {1} uninterpreted bytes' - msg = msg.format(self.Zppm, len(self.data)) + msg = msg.format(self.zppm, len(self._data)) return msg @@ -1281,9 +833,9 @@ class PPTsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Zppt : int + zppt : int Index of this segment relative to other PPT segments - Ippt : list + ippt : list Uninterpreted packet headers. References @@ -1292,15 +844,18 @@ class PPTsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, zppt, ippt, length, offset): Segment.__init__(self, id='PPT') - self.__dict__.update(**kwargs) + self.zppt = zppt + self.ippt = ippt + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) msg += '\n Index: {0}' msg += '\n Packet headers: {1} uninterpreted bytes' - msg = msg.format(self.Zppt, len(self.Ippt)) + msg = msg.format(self.zppt, len(self.ippt)) return msg @@ -1316,11 +871,11 @@ class QCCsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Cqcc : int + cqcc : int Index of associated component. - Sqcc : int + sqcc : int Quantization style for this component. - SPqcc : iterable bytes + spqcc : iterable bytes Quantization value for each sub-band. References @@ -1329,16 +884,24 @@ class QCCsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, cqcc, sqcc, spqcc, length, offset): Segment.__init__(self, id='QCC') - self.__dict__.update(**kwargs) + self.cqcc = cqcc + self.sqcc = sqcc + self.spqcc = spqcc + self.length = length + self.offset = offset + + self._mantissa, self._exponent = parse_quantization(self.spqcc, + self.sqcc) + self._guard_bits = (self.sqcc & 0xe0) >> 5 def __str__(self): msg = Segment.__str__(self) - msg += '\n Associated Component: {0}'.format(self.Cqcc) - msg += self._print_quantization_style(self.Sqcc) - msg += '{0} guard bits'.format(self._guardBits) + msg += '\n Associated Component: {0}'.format(self.cqcc) + msg += _print_quantization_style(self.sqcc) + msg += '{0} guard bits'.format(self._guard_bits) step_size = zip(self._mantissa, self._exponent) msg += '\n Step size: ' + str(list(step_size)) @@ -1357,9 +920,9 @@ class QCDsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Sqcd : int + sqcd : int Quantization style for all components. - SPqcd : iterable bytes + spqcd : iterable bytes Quantization step size values (uninterpreted). References @@ -1368,16 +931,25 @@ class QCDsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, sqcd, spqcd, length, offset): Segment.__init__(self, id='QCD') - self.__dict__.update(**kwargs) + + self.sqcd = sqcd + self.spqcd = spqcd + self.length = length + self.offset = offset + + mantissa, exponent = parse_quantization(self.spqcd, self.sqcd) + self._mantissa = mantissa + self._exponent = exponent + self._guard_bits = (self.sqcd & 0xe0) >> 5 def __str__(self): msg = Segment.__str__(self) - msg += self._print_quantization_style(self.Sqcd) + msg += _print_quantization_style(self.sqcd) - msg += '{0} guard bits'.format(self._guardBits) + msg += '{0} guard bits'.format(self._guard_bits) step_size = zip(self._mantissa, self._exponent) msg += '\n Step size: ' + str(list(step_size)) @@ -1396,11 +968,11 @@ class RGNsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Crgn : int + crgn : int Associated component. - Srgn : int + srgn : int ROI style. - SPrgn : int + sprgn : int Parameter for ROI style. References @@ -1409,9 +981,13 @@ class RGNsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, length, offset, crgn, srgn, sprgn): Segment.__init__(self, id='RGN') - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset + self.crgn = crgn + self.srgn = srgn + self.sprgn = sprgn def __str__(self): msg = Segment.__str__(self) @@ -1419,7 +995,7 @@ class RGNsegment(Segment): msg += '\n Associated component: {0}' msg += '\n ROI style: {1}' msg += '\n Parameter: {2}' - msg = msg.format(self.Crgn, self.Srgn, self.SPrgn) + msg = msg.format(self.crgn, self.srgn, self.sprgn) return msg @@ -1436,19 +1012,19 @@ class SIZsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Rsiz : int + rsiz : int Capabilities (profile) of codestream. - Xsiz, Ysiz : int + xsiz, ysiz : int Width, height of reference grid. - XOsiz, YOsiz : int + xosiz, yosiz : int Horizontal, vertical offset of reference grid. - XTsiz, YTsiz : int + xtsiz, ytsiz : int Width and height of reference tile with respect to the reference grid. - XTOsiz, YTOsiz : int + xtosiz, ytosiz : int Horizontal and vertical offsets of tile from origin of reference grid. - Ssiz : iterable bytes + ssiz : iterable bytes Precision (depth) in bits and sign of each component. - XRsiz, YRsiz : int + xrsiz, yrsiz : int Horizontal and vertical sample separations with respect to reference grid. @@ -1458,9 +1034,48 @@ class SIZsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, xy_buffer, component_buffer, length, offset): Segment.__init__(self, id='SIZ') - self.__dict__.update(**kwargs) + + data = struct.unpack('>HIIIIIIIIH', xy_buffer) + + self.rsiz = data[0] + self.xsiz = data[1] + self.ysiz = data[2] + self.xosiz = data[3] + self.yosiz = data[4] + self.xtsiz = data[5] + self.ytsiz = data[6] + self.xtosiz = data[7] + self.ytosiz = data[8] + # disregarding the last element in data + + num_tiles_x = (self.xsiz - self.xosiz) / (self.xtsiz - self.xtosiz) + num_tiles_y = (self.ysiz - self.yosiz) / (self.ytsiz - self.ytosiz) + numtiles = math.ceil(num_tiles_x) * math.ceil(num_tiles_y) + if numtiles > 65535: + msg = "Invalid number of tiles ({0}).".format(numtiles) + warnings.warn(msg) + + data = struct.unpack('>' + 'B' * len(component_buffer), + component_buffer) + + self.ssiz = data[0::3] + + for j, subsampling in enumerate(list(zip(data[1::3], data[2::3]))): + if 0 in subsampling: + msg = "Invalid subsampling value for component {0}: " + msg += "dx={1}, dy={2}." + msg = msg.format(j, subsampling[0], subsampling[1]) + warnings.warn(msg) + self.xrsiz = data[1::3] + self.yrsiz = data[2::3] + + self._bitdepth = tuple(((x & 0x7f) + 1) for x in self.ssiz) + self._signed = tuple(((x & 0xb0) > 0) for x in self.ssiz) + + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) @@ -1475,14 +1090,14 @@ class SIZsegment(Segment): 'Signed: {10}', 'Vertical, Horizontal Subsampling: {11}'] msg += '\n '.join(lines) - msg = msg.format(_capabilities_display[self.Rsiz], - self.Ysiz, self.Xsiz, - self.YOsiz, self.XOsiz, - self.YTsiz, self.XTsiz, - self.YTOsiz, self.XTOsiz, + msg = msg.format(_capabilities_display[self.rsiz], + self.ysiz, self.xsiz, + self.yosiz, self.xosiz, + self.ytsiz, self.xtsiz, + self.ytosiz, self.xtosiz, self._bitdepth, self._signed, - tuple(zip(self.YRsiz, self.XRsiz))) + tuple(zip(self.yrsiz, self.xrsiz))) return msg @@ -1532,9 +1147,10 @@ class SODsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, length, offset): Segment.__init__(self, id='SOD') - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset class EPHsegment(Segment): @@ -1557,13 +1173,14 @@ class EPHsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, length, offset): Segment.__init__(self, id='EPH') - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset class SOPsegment(Segment): - """Container for Start of Pata (SOP) segment information. + """Container for Start of Packet (SOP) segment information. Attributes ---------- @@ -1574,6 +1191,8 @@ class SOPsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. + nsop : int + Packet sequence number. References ---------- @@ -1581,13 +1200,15 @@ class SOPsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, nsop, length, offset): Segment.__init__(self, id='SOP') - self.__dict__.update(**kwargs) + self.nsop = nsop + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) - msg += '\n Nsop: {0}'.format(self.Nsop) + msg += '\n Nsop: {0}'.format(self.nsop) return msg @@ -1603,14 +1224,14 @@ class SOTsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Isot : int + isot : int Index of this particular tile. - Psot : int + psot : int Length, in bytes, from first byte of this SOT marker segment to the end of the data of that tile part. - TPsot : int + tpsot : int Tile part instance. - TNsot : int + tnsot : int Number of tile-parts of a tile in codestream. References @@ -1619,9 +1240,14 @@ class SOTsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, isot, psot, tpsot, tnsot, length, offset): Segment.__init__(self, id='SOT') - self.__dict__.update(**kwargs) + self.isot = isot + self.psot = psot + self.tpsot = tpsot + self.tnsot = tnsot + self.length = length + self.offset = offset def __str__(self): msg = Segment.__str__(self) @@ -1631,10 +1257,10 @@ class SOTsegment(Segment): 'Tile part instance: {2}', 'Number of tile parts: {3}'] msg += '\n '.join(lines) - msg = msg.format(self.Isot, - self.Psot, - self.TPsot, - self.TNsot) + msg = msg.format(self.isot, + self.psot, + self.tpsot, + self.tnsot) return msg @@ -1650,11 +1276,11 @@ class TLMsegment(Segment): length : int Length of marker segment in bytes. This number does not include the two bytes constituting the marker. - Ztlm : int + ztlm : int index relative to other TML marksers - Ttlm : int + ttlm : int number of the ith tile-part - Ptlm : int + ptlm : int length in bytes from beginning of the SOT marker of the ith tile-part to the end of the data for that tile part @@ -1664,9 +1290,13 @@ class TLMsegment(Segment): 15444-1:2004 - Information technology -- JPEG 2000 image coding system: Core coding system """ - def __init__(self, **kwargs): + def __init__(self, length, offset, ztlm, ttlm, ptlm): Segment.__init__(self, id='TLM') - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset + self.ztlm = ztlm + self.ttlm = ttlm + self.ptlm = ptlm def __str__(self): msg = Segment.__str__(self) @@ -1675,9 +1305,9 @@ class TLMsegment(Segment): 'Tile number: {1}', 'Length: {2}'] msg += '\n '.join(lines) - msg = msg.format(self.Ztlm, - self.Ttlm, - self.Ptlm) + msg = msg.format(self.ztlm, + self.ttlm, + self.ptlm) return msg @@ -1710,3 +1340,397 @@ def _context_string(context): ((context & 0x10) > 0), ((context & 0x20) > 0)) return msg + + +def parse_quantization(read_buffer, sqcd): + """Tease out the quantization values. + + Parameters + ---------- + read_buffer: sequence of bytes from the QCC and QCD segments. + + Returns + ------ + Tuple of mantissa, exponents from quantization buffer. + """ + numbytes = len(read_buffer) + + exponent = [] + mantissa = [] + + if sqcd & 0x1f == 0: # no quantization + data = struct.unpack('>' + 'B' * numbytes, read_buffer) + for j in range(len(data)): + exponent.append(data[j] >> 3) + mantissa.append(0) + else: + fmt = '>' + 'H' * int(numbytes / 2) + data = struct.unpack(fmt, read_buffer) + for j in range(len(data)): + exponent.append(data[j] >> 11) + mantissa.append(data[j] & 0x07ff) + + return mantissa, exponent + + +def _print_quantization_style(sqcc): + """Only to be used with QCC and QCD segments.""" + + msg = '\n Quantization style: ' + if sqcc & 0x1f == 0: + msg += 'no quantization, ' + elif sqcc & 0x1f == 1: + msg += 'scalar implicit, ' + elif sqcc & 0x1f == 2: + msg += 'scalar explicit, ' + return msg + + +def _parse_tlm_segment(fptr): + """Parse the TLM segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + TLM segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) + + read_buffer = fptr.read(2) + ztlm, stlm = struct.unpack('>BB', read_buffer) + ttlm_st = (stlm >> 4) & 0x3 + ptlm_sp = (stlm >> 6) & 0x1 + + nbytes = length - 4 + if ttlm_st == 0: + ntiles = nbytes / ((ptlm_sp + 1) * 2) + else: + ntiles = nbytes / (ttlm_st + (ptlm_sp + 1) * 2) + + read_buffer = fptr.read(nbytes) + if ttlm_st == 0: + ttlm = None + fmt = '' + elif ttlm_st == 1: + fmt = 'B' + elif ttlm_st == 2: + fmt = 'H' + + if ptlm_sp == 0: + fmt += 'H' + else: + fmt += 'I' + + data = struct.unpack('>' + fmt * int(ntiles), read_buffer) + if ttlm_st == 0: + ttlm = None + ptlm = data + else: + ttlm = data[0::2] + ptlm = data[1::2] + + return TLMsegment(length, offset, ztlm, ttlm, ptlm) + + +def _parse_sot_segment(fptr): + """Parse the SOT segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + SOT segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(10) + data = struct.unpack('>HHIBB', read_buffer) + + length = data[0] + isot = data[1] + psot = data[2] + tpsot = data[3] + tnsot = data[4] + + return SOTsegment(isot, psot, tpsot, tnsot, length, offset) + + +def _parse_sod_segment(fptr): + """Parse the SOD segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + SOD segment instance. + """ + offset = fptr.tell() - 2 + length = 0 + + return SODsegment(length, offset) + + +def _parse_qcd_segment(fptr): + """Parse the QCD segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + QCD Segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(3) + length, sqcd = struct.unpack('>HB', read_buffer) + spqcd = fptr.read(length - 3) + + return QCDsegment(sqcd, spqcd, length, offset) + + +def _parse_ppt_segment(fptr): + """Parse the PPT segment. + + The packet headers are not parsed, i.e. they remain "uninterpreted" + raw data beffers. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + PPT segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(3) + length, zppt = struct.unpack('>HB', read_buffer) + length = length + zppt = zppt + + numbytes = length - 3 + ippt = fptr.read(numbytes) + + return PPTsegment(zppt, ippt, length, offset) + + +def _parse_plt_segment(fptr): + """Parse the PLT segment. + + The packet headers are not parsed, i.e. they remain "uninterpreted" + raw data beffers. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + PLT segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(3) + length, zplt = struct.unpack('>HB', read_buffer) + + numbytes = length - 3 + read_buffer = fptr.read(numbytes) + iplt = np.frombuffer(read_buffer, dtype=np.uint8) + + packet_len = [] + plen = 0 + for byte in iplt: + plen |= (byte & 0x7f) + if byte & 0x80: + # Continue by or-ing in the next byte. + plen <<= 7 + else: + packet_len.append(plen) + plen = 0 + + iplt = packet_len + + return PLTsegment(zplt, iplt, length, offset) + + +def _parse_ppm_segment(fptr): + """Parse the PPM segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + PPM segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(3) + length, zppm = struct.unpack('>HB', read_buffer) + + numbytes = length - 3 + read_buffer = fptr.read(numbytes) + + return PPMsegment(zppm, read_buffer, length, offset) + + +def _parse_crg_segment(fptr, csiz): + """Parse the CRG marker segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + CRG segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) + + read_buffer = fptr.read(4 * csiz) + data = struct.unpack('>' + 'HH' * csiz, read_buffer) + xcrg = data[0::2] + ycrg = data[1::2] + + return CRGsegment(xcrg, ycrg, length, offset) + + +def _parse_eoc_segment(fptr): + """Parse the EOC marker segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + EOC Segment instance. + """ + offset = fptr.tell() - 2 + length = 0 + + return EOCsegment(length, offset) + + +def _parse_cme_segment(fptr): + """Parse the CME marker segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + CME segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(4) + data = struct.unpack('>HH', read_buffer) + length = data[0] + rcme = data[1] + ccme = fptr.read(length - 4) + + return CMEsegment(rcme, ccme, length, offset) + + +def _parse_siz_segment(fptr): + """Parse the SIZ segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + SIZsegment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) + + xy_buffer = fptr.read(36) + + num_components, = struct.unpack('>H', xy_buffer[-2:]) + + component_buffer = fptr.read(num_components * 3) + + return SIZsegment(xy_buffer, component_buffer, length, offset) + + +def _parse_cod_segment(fptr): + """Parse the COD segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + COD segment instance. + """ + offset = fptr.tell() - 2 + offset = fptr.tell() - 2 + + read_buffer = fptr.read(3) + length, scod = struct.unpack('>HB', read_buffer) + + numbytes = offset + 2 + length - fptr.tell() + spcod = fptr.read(numbytes) + spcod = np.frombuffer(spcod, dtype=np.uint8) + + return CODsegment(scod, spcod, length, offset) + + +def _parse_generic_segment(fptr, marker_id): + """Parse a generic marker segment. + + Parameters + ---------- + fptr : file + Open file object. + + Returns + ------- + Segment instance. + """ + offset = fptr.tell() - 2 + + read_buffer = fptr.read(2) + length, = struct.unpack('>H', read_buffer) + data = fptr.read(length-2) + + segment = Segment(id='0x{0:x}'.format(marker_id), + offset=offset, length=length) + segment._data = data + return segment diff --git a/glymur/jp2k.py b/glymur/jp2k.py index b0d4157..53cbf09 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -440,9 +440,9 @@ class Jp2k(Jp2kBox): JP2HeaderBox(), ContiguousCodestreamBox()] c = self.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) boxes[2].box = [ImageHeaderBox(height=height, width=width, num_components=num_components), @@ -618,8 +618,8 @@ class Jp2k(Jp2kBox): """ # Check for differing subsample factors. codestream = self.get_codestream(header_only=True) - dxs = np.array(codestream.segment[1].XRsiz) - dys = np.array(codestream.segment[1].YRsiz) + dxs = np.array(codestream.segment[1].xrsiz) + dys = np.array(codestream.segment[1].yrsiz) if np.any(dxs - dxs[0]) or np.any(dys - dys[0]): msg = "Components must all have the same subsampling factors " msg += "to use this method with OpenJPEG 1.5.1. Please consider " @@ -740,8 +740,8 @@ class Jp2k(Jp2kBox): """ # Check for differing subsample factors. codestream = self.get_codestream(header_only=True) - dxs = np.array(codestream.segment[1].XRsiz) - dys = np.array(codestream.segment[1].YRsiz) + dxs = np.array(codestream.segment[1].xrsiz) + dys = np.array(codestream.segment[1].yrsiz) if np.any(dxs - dxs[0]) or np.any(dys - dys[0]): msg = "Components must all have the same subsampling factors." raise RuntimeError(msg) @@ -798,7 +798,7 @@ class Jp2k(Jp2kBox): if reduce == -1: # Get the lowest resolution thumbnail. codestream = self.get_codestream() - reduce = codestream.segment[2].SPcod[4] + reduce = codestream.segment[2].spcod[4] dparam.cp_reduce = reduce if area is not None: diff --git a/glymur/test/__init__.py b/glymur/test/__init__.py index 644bc56..89c7eea 100644 --- a/glymur/test/__init__.py +++ b/glymur/test/__init__.py @@ -5,6 +5,7 @@ from .test_jp2k import TestJp2k as jp2k from .test_icc import TestICC as icc from .test_printing import TestPrinting as printing from .test_opj_suite import TestSuite as suite +from .test_opj_suite import TestSuiteDump as suitedump from .test_opj_suite_write import TestSuiteWrite as suitew from .test_opj_suite_neg import TestSuiteNegative as suiteneg from .test_jp2box import TestJp2Boxes as box diff --git a/glymur/test/test_codestream.py b/glymur/test/test_codestream.py index 4acfb79..d28d32f 100644 --- a/glymur/test/test_codestream.py +++ b/glymur/test/test_codestream.py @@ -56,7 +56,7 @@ class TestCodestream(unittest.TestCase): self.assertEqual(c.segment[2].id, '0xff6f') self.assertEqual(c.segment[2].length, 3) - self.assertEqual(c.segment[2].data, b'\x00') + self.assertEqual(c.segment[2]._data, b'\x00') @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") @@ -86,7 +86,7 @@ class TestCodestream(unittest.TestCase): self.assertEqual(c.segment[2].id, '0xff79') self.assertEqual(c.segment[2].length, 3) - self.assertEqual(c.segment[2].data, b'\x00') + self.assertEqual(c.segment[2]._data, b'\x00') if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 1fe5330..abc9f88 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -58,9 +58,9 @@ class TestChannelDefinition(unittest.TestCase): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) self.jP = JPEG2000SignatureBox() self.ftyp = FileTypeBox() @@ -268,9 +268,9 @@ class TestXML(unittest.TestCase): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) self.jP = JPEG2000SignatureBox() self.ftyp = FileTypeBox() @@ -345,9 +345,9 @@ class TestColourSpecificationBox(unittest.TestCase): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) self.jP = JPEG2000SignatureBox() self.ftyp = FileTypeBox() @@ -521,9 +521,9 @@ class TestJp2Boxes(unittest.TestCase): JP2HeaderBox(), ContiguousCodestreamBox()] c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) boxes[2].box = [ImageHeaderBox(height=height, width=width, num_components=num_components), @@ -540,9 +540,9 @@ class TestJp2Boxes(unittest.TestCase): JP2HeaderBox(), ContiguousCodestreamBox()] c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) boxes[2].box = [ColourSpecificationBox(colorspace=glymur.core.SRGB), ImageHeaderBox(height=height, width=width, @@ -554,9 +554,9 @@ class TestJp2Boxes(unittest.TestCase): def test_first_2_boxes_not_jP_and_ftyp(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) jP = JPEG2000SignatureBox() ftyp = FileTypeBox() @@ -574,9 +574,9 @@ class TestJp2Boxes(unittest.TestCase): def test_jp2h_not_preceeding_jp2c(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) jP = JPEG2000SignatureBox() ftyp = FileTypeBox() @@ -594,9 +594,9 @@ class TestJp2Boxes(unittest.TestCase): def test_missing_codestream(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() - height = c.segment[1].Ysiz - width = c.segment[1].Xsiz - num_components = len(c.segment[1].XRsiz) + height = c.segment[1].ysiz + width = c.segment[1].xsiz + num_components = len(c.segment[1].xrsiz) jP = JPEG2000SignatureBox() ftyp = FileTypeBox() diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index d664820..e20ab50 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -153,7 +153,7 @@ class TestJp2k(unittest.TestCase): np.testing.assert_array_equal(actdata, expdata) c = ofile.get_codestream() - self.assertEqual(c.segment[2].SPcod[3], 0) # no mct + self.assertEqual(c.segment[2].spcod[3], 0) # no mct def test_write_grayscale_with_mct(self): # MCT usage makes no sense for grayscale images. @@ -175,7 +175,7 @@ class TestJp2k(unittest.TestCase): np.testing.assert_array_equal(actdata, expdata) c = ofile.get_codestream() - self.assertEqual(c.segment[2].SPcod[0], glymur.core.CPRL) + self.assertEqual(c.segment[2].spcod[0], glymur.core.CPRL) def test_jp2_boxes(self): # Verify the boxes of a JP2 file. @@ -344,7 +344,7 @@ class TestJp2k(unittest.TestCase): c = j.get_codestream() # Code block size is reported as XY in the codestream. - self.assertEqual(tuple(c.segment[2].SPcod[5:7]), (3, 2)) + self.assertEqual(tuple(c.segment[2].spcod[5:7]), (3, 2)) def test_negative_too_many_dimensions(self): # OpenJP2 only allows 2D or 3D images. diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index a6f59dc..f4d9b84 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -1521,61 +1521,61 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 128) - self.assertEqual(c.segment[1].Ysiz, 128) + self.assertEqual(c.segment[1].xsiz, 128) + self.assertEqual(c.segment[1].ysiz, 128) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # QCD: Quantization default - self.assertEqual(c.segment[2].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[2]._guardBits, 2) + self.assertEqual(c.segment[2].sqcd & 0x1f, 0) + self.assertEqual(c.segment[2]._guard_bits, 2) self.assertEqual(c.segment[2]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10]) self.assertEqual(c.segment[2]._mantissa, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) # COD: Coding style default - self.assertFalse(c.segment[3].Scod & 2) # no sop - self.assertFalse(c.segment[3].Scod & 4) # no eph - self.assertEqual(c.segment[3].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[3].scod & 2) # no sop + self.assertFalse(c.segment[3].scod & 4) # no eph + self.assertEqual(c.segment[3].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[3]._layers, 1) # layers = 1 - self.assertEqual(c.segment[3].SPcod[3], 0) # mct - self.assertEqual(c.segment[3].SPcod[4], 3) # layers + self.assertEqual(c.segment[3].spcod[3], 0) # mct + self.assertEqual(c.segment[3].spcod[4], 3) # layers self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcod[7] & 0x01) + self.assertFalse(c.segment[3].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcod[7] & 0x02) + self.assertFalse(c.segment[3].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcod[7] & 0x04) + self.assertFalse(c.segment[3].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcod[7] & 0x08) + self.assertFalse(c.segment[3].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcod[7] & 0x0010) + self.assertFalse(c.segment[3].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcod[7] & 0x0020) - self.assertEqual(c.segment[3].SPcod[8], + self.assertFalse(c.segment[3].spcod[7] & 0x0020) + self.assertEqual(c.segment[3].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # SOT: start of tile part - self.assertEqual(c.segment[4].Isot, 0) - self.assertEqual(c.segment[4].Psot, 7314) - self.assertEqual(c.segment[4].TPsot, 0) - self.assertEqual(c.segment[4].TNsot, 1) + self.assertEqual(c.segment[4].isot, 0) + self.assertEqual(c.segment[4].psot, 7314) + self.assertEqual(c.segment[4].tpsot, 0) + self.assertEqual(c.segment[4].tnsot, 1) def test_NR_p0_02_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_02.j2k') @@ -1583,72 +1583,72 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 127) - self.assertEqual(c.segment[1].Ysiz, 126) + self.assertEqual(c.segment[1].xsiz, 127) + self.assertEqual(c.segment[1].ysiz, 126) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (127, 126)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (127, 126)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(2, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # sop - self.assertTrue(c.segment[2].Scod & 4) # eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertTrue(c.segment[2].scod & 2) # sop + self.assertTrue(c.segment[2].scod & 4) # eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 6) # layers = 6 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertTrue(c.segment[2].SPcod[7] & 0x0010) + self.assertTrue(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertTrue(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 0) - self.assertEqual(c.segment[3].SPcoc[0], 3) # levels + self.assertEqual(c.segment[3].ccoc, 0) + self.assertEqual(c.segment[3].spcoc[0], 3) # levels self.assertEqual(tuple(c.segment[3]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[3].SPcoc[3] & 0x04) + self.assertTrue(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertTrue(c.segment[3].SPcoc[3] & 0x0010) + self.assertTrue(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertTrue(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[4]._guardBits, 3) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[4]._guard_bits, 3) self.assertEqual(c.segment[4]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10]) self.assertEqual(c.segment[4]._mantissa, @@ -1656,19 +1656,19 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[5].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[5].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[5].Ccme.decode('latin-1'), + self.assertEqual(c.segment[5].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # One unknown marker self.assertEqual(c.segment[6].id, '0xff30') # SOT: start of tile part - self.assertEqual(c.segment[7].Isot, 0) - self.assertEqual(c.segment[7].Psot, 6047) - self.assertEqual(c.segment[7].TPsot, 0) - self.assertEqual(c.segment[7].TNsot, 1) + self.assertEqual(c.segment[7].isot, 0) + self.assertEqual(c.segment[7].psot, 6047) + self.assertEqual(c.segment[7].tpsot, 0) + self.assertEqual(c.segment[7].tnsot, 1) # SOD: start of data # Just one. @@ -1689,112 +1689,112 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 256) - self.assertEqual(c.segment[1].Ysiz, 256) + self.assertEqual(c.segment[1].xsiz, 256) + self.assertEqual(c.segment[1].ysiz, 256) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (4,)) # signed self.assertEqual(c.segment[1]._signed, (True,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertTrue(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 8) # 8 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 1) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 1) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 1) # scalar implicit - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 1) # scalar implicit + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._exponent, [0]) self.assertEqual(c.segment[3]._mantissa, [0]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[4].Cqcc, 0) - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].cqcc, 0) + self.assertEqual(c.segment[4]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[4].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[4].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[4]._exponent, [4, 5, 5, 6]) self.assertEqual(c.segment[4]._mantissa, [0, 0, 0, 0]) # POD: progression order change - self.assertEqual(c.segment[5].RSpod, (0,)) - self.assertEqual(c.segment[5].CSpod, (0,)) - self.assertEqual(c.segment[5].LYEpod, (8,)) - self.assertEqual(c.segment[5].REpod, (33,)) - self.assertEqual(c.segment[5].CEpod, (255,)) - self.assertEqual(c.segment[5].Ppod, (glymur.core.LRCP,)) + self.assertEqual(c.segment[5].rspod, (0,)) + self.assertEqual(c.segment[5].cspod, (0,)) + self.assertEqual(c.segment[5].lyepod, (8,)) + self.assertEqual(c.segment[5].repod, (33,)) + self.assertEqual(c.segment[5].cdpod, (255,)) + self.assertEqual(c.segment[5].ppod, (glymur.core.LRCP,)) # CRG: component registration - self.assertEqual(c.segment[6].Xcrg, (65424,)) - self.assertEqual(c.segment[6].Ycrg, (32558,)) + self.assertEqual(c.segment[6].xcrg, (65424,)) + self.assertEqual(c.segment[6].ycrg, (32558,)) # COM: comment # Registration - self.assertEqual(c.segment[7].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[7].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[7].Ccme.decode('latin-1'), + self.assertEqual(c.segment[7].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # COM: comment # Registration - self.assertEqual(c.segment[8].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[8].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[8].Ccme.decode('latin-1'), + self.assertEqual(c.segment[8].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000," + "2001 Algo Vision Technology") # COM: comment # Registration - self.assertEqual(c.segment[9].Rcme, glymur.core.RCME_BINARY) + self.assertEqual(c.segment[9].rcme, glymur.core.RCME_BINARY) # Comment value - self.assertEqual(len(c.segment[9].Ccme), 62) + self.assertEqual(len(c.segment[9].ccme), 62) # TLM (tile-part length) - self.assertEqual(c.segment[10].Ztlm, 0) - self.assertEqual(c.segment[10].Ttlm, (0, 1, 2, 3)) - self.assertEqual(c.segment[10].Ptlm, (4267, 2117, 4080, 2081)) + self.assertEqual(c.segment[10].ztlm, 0) + self.assertEqual(c.segment[10].ttlm, (0, 1, 2, 3)) + self.assertEqual(c.segment[10].ptlm, (4267, 2117, 4080, 2081)) # SOT: start of tile part - self.assertEqual(c.segment[11].Isot, 0) - self.assertEqual(c.segment[11].Psot, 4267) - self.assertEqual(c.segment[11].TPsot, 0) - self.assertEqual(c.segment[11].TNsot, 1) + self.assertEqual(c.segment[11].isot, 0) + self.assertEqual(c.segment[11].psot, 4267) + self.assertEqual(c.segment[11].tpsot, 0) + self.assertEqual(c.segment[11].tnsot, 1) # RGN: region of interest - self.assertEqual(c.segment[12].Crgn, 0) - self.assertEqual(c.segment[12].Srgn, 0) - self.assertEqual(c.segment[12].SPrgn, 7) + self.assertEqual(c.segment[12].crgn, 0) + self.assertEqual(c.segment[12].srgn, 0) + self.assertEqual(c.segment[12].sprgn, 7) # SOD: start of data # Just one. @@ -1806,46 +1806,46 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 640) - self.assertEqual(c.segment[1].Ysiz, 480) + self.assertEqual(c.segment[1].xsiz, 640) + self.assertEqual(c.segment[1].ysiz, 480) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (640, 480)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (1, 1), (1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 20) # 20 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 6) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 6) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128), (128, 128), (128, 128), (128, 128), @@ -1853,8 +1853,8 @@ class TestSuiteDump(unittest.TestCase): # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # scalar expounded - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # scalar expounded + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._exponent, [16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 11, 11, 11, 11, 11, 11]) @@ -1865,10 +1865,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[4].Cqcc, 1) + self.assertEqual(c.segment[4].cqcc, 1) # quantization type - self.assertEqual(c.segment[4].Sqcc & 0x1f, 2) # none - self.assertEqual(c.segment[4]._guardBits, 3) + self.assertEqual(c.segment[4].sqcc & 0x1f, 2) # none + self.assertEqual(c.segment[4]._guard_bits, 3) self.assertEqual(c.segment[4]._exponent, [14, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 9, 9, 9, 9, 9, 9]) @@ -1879,10 +1879,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 2) + self.assertEqual(c.segment[5].cqcc, 2) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 2) # none - self.assertEqual(c.segment[5]._guardBits, 3) + self.assertEqual(c.segment[5].sqcc & 0x1f, 2) # none + self.assertEqual(c.segment[5]._guard_bits, 3) self.assertEqual(c.segment[5]._exponent, [14, 14, 14, 14, 13, 13, 13, 12, 12, 12, 11, 11, 11, 9, 9, 9, 9, 9, 9]) @@ -1893,16 +1893,16 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[6].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[6].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[6].Ccme.decode('latin-1'), + self.assertEqual(c.segment[6].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[7].Isot, 0) - self.assertEqual(c.segment[7].Psot, 264383) - self.assertEqual(c.segment[7].TPsot, 0) - self.assertEqual(c.segment[7].TNsot, 1) + self.assertEqual(c.segment[7].isot, 0) + self.assertEqual(c.segment[7].psot, 264383) + self.assertEqual(c.segment[7].tpsot, 0) + self.assertEqual(c.segment[7].tnsot, 1) # SOD: start of data # Just one. @@ -1914,94 +1914,94 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1024) - self.assertEqual(c.segment[1].Ysiz, 1024) + self.assertEqual(c.segment[1].xsiz, 1024) + self.assertEqual(c.segment[1].ysiz, 1024) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1024, 1024)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (1, 1), (2, 2), (2, 2)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 7) # 7 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 6) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 6) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 1) - self.assertEqual(c.segment[3].SPcoc[0], 3) # levels + self.assertEqual(c.segment[3].ccoc, 1) + self.assertEqual(c.segment[3].spcoc[0], 3) # levels self.assertEqual(tuple(c.segment[3]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcoc[3] & 0x04) + self.assertFalse(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertFalse(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) # COC: Coding style component - self.assertEqual(c.segment[4].Ccoc, 3) - self.assertEqual(c.segment[4].SPcoc[0], 6) # levels + self.assertEqual(c.segment[4].ccoc, 3) + self.assertEqual(c.segment[4].spcoc[0], 6) # levels self.assertEqual(tuple(c.segment[4]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[4].SPcoc[3] & 0x01) + self.assertFalse(c.segment[4].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[4].SPcoc[3] & 0x02) + self.assertFalse(c.segment[4].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[4].SPcoc[3] & 0x04) + self.assertFalse(c.segment[4].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[4].SPcoc[3] & 0x08) + self.assertFalse(c.segment[4].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[4].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[4].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[4].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[4].SPcoc[4], + self.assertFalse(c.segment[4].spcoc[3] & 0x0020) + self.assertEqual(c.segment[4].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[5].Sqcd & 0x1f, 2) # scalar expounded - self.assertEqual(c.segment[5]._guardBits, 3) + self.assertEqual(c.segment[5].sqcd & 0x1f, 2) # scalar expounded + self.assertEqual(c.segment[5]._guard_bits, 3) self.assertEqual(c.segment[5]._exponent, [16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 11, 11, 11, 11, 11, 11]) @@ -2012,19 +2012,19 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 0) + self.assertEqual(c.segment[6].cqcc, 0) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 1) # scalar derived - self.assertEqual(c.segment[6]._guardBits, 3) + self.assertEqual(c.segment[6].sqcc & 0x1f, 1) # scalar derived + self.assertEqual(c.segment[6]._guard_bits, 3) self.assertEqual(c.segment[6]._exponent, [14]) self.assertEqual(c.segment[6]._mantissa, [0]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[7].Cqcc, 3) + self.assertEqual(c.segment[7].cqcc, 3) # quantization type - self.assertEqual(c.segment[7].Sqcc & 0x1f, 0) # none - self.assertEqual(c.segment[7]._guardBits, 3) + self.assertEqual(c.segment[7].sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[7]._guard_bits, 3) self.assertEqual(c.segment[7]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -2032,21 +2032,21 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[8].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[8].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[8].Ccme.decode('latin-1'), + self.assertEqual(c.segment[8].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # TLM (tile-part length) - self.assertEqual(c.segment[9].Ztlm, 0) - self.assertEqual(c.segment[9].Ttlm, (0,)) - self.assertEqual(c.segment[9].Ptlm, (1310540,)) + self.assertEqual(c.segment[9].ztlm, 0) + self.assertEqual(c.segment[9].ttlm, (0,)) + self.assertEqual(c.segment[9].ptlm, (1310540,)) # SOT: start of tile part - self.assertEqual(c.segment[10].Isot, 0) - self.assertEqual(c.segment[10].Psot, 1310540) - self.assertEqual(c.segment[10].TPsot, 0) - self.assertEqual(c.segment[10].TNsot, 1) + self.assertEqual(c.segment[10].isot, 0) + self.assertEqual(c.segment[10].psot, 1310540) + self.assertEqual(c.segment[10].tpsot, 0) + self.assertEqual(c.segment[10].tnsot, 1) # SOD: start of data # Just one. @@ -2058,53 +2058,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 513) - self.assertEqual(c.segment[1].Ysiz, 129) + self.assertEqual(c.segment[1].xsiz, 513) + self.assertEqual(c.segment[1].ysiz, 129) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (513, 129)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (513, 129)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12, 12, 12, 12)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (2, 1), (1, 2), (2, 2)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RPCL) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.RPCL) self.assertEqual(c.segment[2]._layers, 4) # 4 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 6) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 6) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # scalar expounded - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # scalar expounded + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [512, 518, 522, 524, 516, 524, 522, 527, 523, 549, 557, 561, 853, 852, 700, 163, 78, 1508, 1831]) @@ -2114,10 +2114,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[4].Cqcc, 1) + self.assertEqual(c.segment[4].cqcc, 1) # quantization type - self.assertEqual(c.segment[4].Sqcc & 0x1f, 2) # scalar derived - self.assertEqual(c.segment[4]._guardBits, 4) + self.assertEqual(c.segment[4].sqcc & 0x1f, 2) # scalar derived + self.assertEqual(c.segment[4]._guard_bits, 4) self.assertEqual(c.segment[4]._mantissa, [1527, 489, 665, 506, 487, 502, 493, 493, 500, 485, 505, 491, 490, 491, 499, 509, 503, 496, 558]) @@ -2127,10 +2127,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 2) + self.assertEqual(c.segment[5].cqcc, 2) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 2) # scalar derived - self.assertEqual(c.segment[5]._guardBits, 5) + self.assertEqual(c.segment[5].sqcc & 0x1f, 2) # scalar derived + self.assertEqual(c.segment[5]._guard_bits, 5) self.assertEqual(c.segment[5]._mantissa, [1337, 728, 890, 719, 716, 726, 700, 718, 704, 704, 712, 712, 717, 719, 701, 749, 753, 718, 841]) @@ -2140,50 +2140,50 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 3) + self.assertEqual(c.segment[6].cqcc, 3) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 0) # none - self.assertEqual(c.segment[6]._guardBits, 6) + self.assertEqual(c.segment[6].sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[6]._guard_bits, 6) self.assertEqual(c.segment[6]._mantissa, [0] * 19) self.assertEqual(c.segment[6]._exponent, [12, 13, 13, 14, 13, 13, 14, 13, 13, 14, 13, 13, 14, 13, 13, 14, 13, 13, 14]) # COC: Coding style component - self.assertEqual(c.segment[7].Ccoc, 3) - self.assertEqual(c.segment[7].SPcoc[0], 6) # levels + self.assertEqual(c.segment[7].ccoc, 3) + self.assertEqual(c.segment[7].spcoc[0], 6) # levels self.assertEqual(tuple(c.segment[7]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[7].SPcoc[3] & 0x01) + self.assertFalse(c.segment[7].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[7].SPcoc[3] & 0x02) + self.assertFalse(c.segment[7].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[7].SPcoc[3] & 0x04) + self.assertFalse(c.segment[7].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[7].SPcoc[3] & 0x08) + self.assertFalse(c.segment[7].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[7].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[7].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[7].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[7].SPcoc[4], + self.assertFalse(c.segment[7].spcoc[3] & 0x0020) + self.assertEqual(c.segment[7].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # RGN: region of interest - self.assertEqual(c.segment[8].Crgn, 0) # component - self.assertEqual(c.segment[8].Srgn, 0) # implicit - self.assertEqual(c.segment[8].SPrgn, 11) + self.assertEqual(c.segment[8].crgn, 0) # component + self.assertEqual(c.segment[8].srgn, 0) # implicit + self.assertEqual(c.segment[8].sprgn, 11) # SOT: start of tile part - self.assertEqual(c.segment[9].Isot, 0) - self.assertEqual(c.segment[9].Psot, 33582) - self.assertEqual(c.segment[9].TPsot, 0) - self.assertEqual(c.segment[9].TNsot, 1) + self.assertEqual(c.segment[9].isot, 0) + self.assertEqual(c.segment[9].psot, 33582) + self.assertEqual(c.segment[9].tpsot, 0) + self.assertEqual(c.segment[9].tnsot, 1) # RGN: region of interest - self.assertEqual(c.segment[10].Crgn, 0) # component - self.assertEqual(c.segment[10].Srgn, 0) # implicit - self.assertEqual(c.segment[10].SPrgn, 9) + self.assertEqual(c.segment[10].crgn, 0) # component + self.assertEqual(c.segment[10].srgn, 0) # implicit + self.assertEqual(c.segment[10].sprgn, 9) # SOD: start of data # Just one. @@ -2195,80 +2195,80 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 2048) - self.assertEqual(c.segment[1].Ysiz, 2048) + self.assertEqual(c.segment[1].xsiz, 2048) + self.assertEqual(c.segment[1].ysiz, 2048) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12, 12, 12)) # signed self.assertEqual(c.segment[1]._signed, (True, True, True)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (1, 1), (1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) - self.assertTrue(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertTrue(c.segment[2].scod & 2) + self.assertTrue(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 8) # 8 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 10) self.assertEqual(c.segment[3]._exponent, [14, 15, 15, 16, 15, 15, 16, 15, 15, 16]) # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-3.0.7") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 9951) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 0) # unknown + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 9951) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 0) # unknown # POD: progression order change - self.assertEqual(c.segment[6].RSpod, (0,)) - self.assertEqual(c.segment[6].CSpod, (0,)) - self.assertEqual(c.segment[6].LYEpod, (9,)) - self.assertEqual(c.segment[6].REpod, (3,)) - self.assertEqual(c.segment[6].CEpod, (3,)) - self.assertEqual(c.segment[6].Ppod, (glymur.core.LRCP,)) + self.assertEqual(c.segment[6].rspod, (0,)) + self.assertEqual(c.segment[6].cspod, (0,)) + self.assertEqual(c.segment[6].lyepod, (9,)) + self.assertEqual(c.segment[6].repod, (3,)) + self.assertEqual(c.segment[6].cdpod, (3,)) + self.assertEqual(c.segment[6].ppod, (glymur.core.LRCP,)) # PLT: packet length, tile part - self.assertEqual(c.segment[7].Zplt, 0) + self.assertEqual(c.segment[7].zplt, 0) #self.assertEqual(c.segment[7].iplt), 99) # SOD: start of data @@ -2280,113 +2280,113 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 513) - self.assertEqual(c.segment[1].Ysiz, 3072) + self.assertEqual(c.segment[1].xsiz, 513) + self.assertEqual(c.segment[1].ysiz, 3072) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (513, 3072)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (513, 3072)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12, 12, 12)) # signed self.assertEqual(c.segment[1]._signed, (True, True, True)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (1, 1), (1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) - self.assertTrue(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.CPRL) + self.assertTrue(c.segment[2].scod & 2) + self.assertTrue(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.CPRL) self.assertEqual(c.segment[2]._layers, 30) # 30 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 7) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 7) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 0) - self.assertEqual(c.segment[3].SPcoc[0], 6) # levels + self.assertEqual(c.segment[3].ccoc, 0) + self.assertEqual(c.segment[3].spcoc[0], 6) # levels self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcoc[3] & 0x04) + self.assertFalse(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertFalse(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # COC: Coding style component - self.assertEqual(c.segment[4].Ccoc, 1) - self.assertEqual(c.segment[4].SPcoc[0], 7) # levels + self.assertEqual(c.segment[4].ccoc, 1) + self.assertEqual(c.segment[4].spcoc[0], 7) # levels self.assertEqual(tuple(c.segment[4]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[4].SPcoc[3] & 0x01) + self.assertFalse(c.segment[4].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[4].SPcoc[3] & 0x02) + self.assertFalse(c.segment[4].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[4].SPcoc[3] & 0x04) + self.assertFalse(c.segment[4].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[4].SPcoc[3] & 0x08) + self.assertFalse(c.segment[4].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[4].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[4].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[4].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[4].SPcoc[4], + self.assertFalse(c.segment[4].spcoc[3] & 0x0020) + self.assertEqual(c.segment[4].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # COC: Coding style component - self.assertEqual(c.segment[5].Ccoc, 2) - self.assertEqual(c.segment[5].SPcoc[0], 8) # levels + self.assertEqual(c.segment[5].ccoc, 2) + self.assertEqual(c.segment[5].spcoc[0], 8) # levels self.assertEqual(tuple(c.segment[5]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[5].SPcoc[3] & 0x01) + self.assertFalse(c.segment[5].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[5].SPcoc[3] & 0x02) + self.assertFalse(c.segment[5].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[5].SPcoc[3] & 0x04) + self.assertFalse(c.segment[5].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[5].SPcoc[3] & 0x08) + self.assertFalse(c.segment[5].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[5].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[5].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[5].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[5].SPcoc[4], + self.assertFalse(c.segment[5].spcoc[3] & 0x0020) + self.assertEqual(c.segment[5].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[6].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[6]._guardBits, 4) + self.assertEqual(c.segment[6].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[6]._guard_bits, 4) self.assertEqual(c.segment[6]._mantissa, [0] * 22) self.assertEqual(c.segment[6]._exponent, [11, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, @@ -2394,10 +2394,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[7].Cqcc, 0) + self.assertEqual(c.segment[7].cqcc, 0) # quantization type - self.assertEqual(c.segment[7].Sqcc & 0x1f, 0) # none - self.assertEqual(c.segment[7]._guardBits, 4) + self.assertEqual(c.segment[7].sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[7]._guard_bits, 4) self.assertEqual(c.segment[7]._mantissa, [0] * 19) self.assertEqual(c.segment[7]._exponent, [11, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, @@ -2405,10 +2405,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[8].Cqcc, 2) + self.assertEqual(c.segment[8].cqcc, 2) # quantization type - self.assertEqual(c.segment[8].Sqcc & 0x1f, 0) # none - self.assertEqual(c.segment[8]._guardBits, 4) + self.assertEqual(c.segment[8].sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[8]._guard_bits, 4) self.assertEqual(c.segment[8]._mantissa, [0] * 25) self.assertEqual(c.segment[8]._exponent, [11, 12, 12, 13, 12, 12, 13, 12, 12, 13, 12, 12, 13, @@ -2416,16 +2416,16 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[9].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[9].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[9].Ccme.decode('latin-1'), + self.assertEqual(c.segment[9].ccme.decode('latin-1'), "Kakadu-3.0.7") # SOT: start of tile part - self.assertEqual(c.segment[10].Isot, 0) - self.assertEqual(c.segment[10].Psot, 3820593) - self.assertEqual(c.segment[10].TPsot, 0) - self.assertEqual(c.segment[10].TNsot, 1) # unknown + self.assertEqual(c.segment[10].isot, 0) + self.assertEqual(c.segment[10].psot, 3820593) + self.assertEqual(c.segment[10].tpsot, 0) + self.assertEqual(c.segment[10].tnsot, 1) # unknown def test_NR_p0_09_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') @@ -2433,53 +2433,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2, or full capabilities - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 17) - self.assertEqual(c.segment[1].Ysiz, 37) + self.assertEqual(c.segment[1].xsiz, 17) + self.assertEqual(c.segment[1].ysiz, 37) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (17, 37)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (17, 37)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # scalar expounded - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # scalar expounded + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [1915, 1884, 1884, 1853, 1884, 1884, 1853, 1962, 1962, 1986, 53, 53, 120, 26, 26, 1983]) @@ -2489,16 +2489,16 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-3.0.7") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 478) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 1) # unknown + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 478) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 1) # unknown # SOD: start of data # Just one. @@ -2513,134 +2513,134 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 256) - self.assertEqual(c.segment[1].Ysiz, 256) + self.assertEqual(c.segment[1].xsiz, 256) + self.assertEqual(c.segment[1].ysiz, 256) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(4, 4), (4, 4), (4, 4)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 2) # 2 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 0) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 0) self.assertEqual(c.segment[3]._mantissa, [0] * 10) self.assertEqual(c.segment[3]._exponent, [11, 12, 12, 13, 12, 12, 13, 12, 12, 13]) # SOT: start of tile part - self.assertEqual(c.segment[4].Isot, 0) - self.assertEqual(c.segment[4].Psot, 2453) - self.assertEqual(c.segment[4].TPsot, 0) - self.assertEqual(c.segment[4].TNsot, 0) + self.assertEqual(c.segment[4].isot, 0) + self.assertEqual(c.segment[4].psot, 2453) + self.assertEqual(c.segment[4].tpsot, 0) + self.assertEqual(c.segment[4].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[5].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[6].Isot, 1) - self.assertEqual(c.segment[6].Psot, 2403) - self.assertEqual(c.segment[6].TPsot, 0) - self.assertEqual(c.segment[6].TNsot, 0) + self.assertEqual(c.segment[6].isot, 1) + self.assertEqual(c.segment[6].psot, 2403) + self.assertEqual(c.segment[6].tpsot, 0) + self.assertEqual(c.segment[6].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[7].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[8].Isot, 2) - self.assertEqual(c.segment[8].Psot, 2420) - self.assertEqual(c.segment[8].TPsot, 0) - self.assertEqual(c.segment[8].TNsot, 0) + self.assertEqual(c.segment[8].isot, 2) + self.assertEqual(c.segment[8].psot, 2420) + self.assertEqual(c.segment[8].tpsot, 0) + self.assertEqual(c.segment[8].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[9].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[10].Isot, 3) - self.assertEqual(c.segment[10].Psot, 2472) - self.assertEqual(c.segment[10].TPsot, 0) - self.assertEqual(c.segment[10].TNsot, 0) + self.assertEqual(c.segment[10].isot, 3) + self.assertEqual(c.segment[10].psot, 2472) + self.assertEqual(c.segment[10].tpsot, 0) + self.assertEqual(c.segment[10].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[11].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[12].Isot, 0) - self.assertEqual(c.segment[12].Psot, 1043) - self.assertEqual(c.segment[12].TPsot, 1) - self.assertEqual(c.segment[12].TNsot, 2) + self.assertEqual(c.segment[12].isot, 0) + self.assertEqual(c.segment[12].psot, 1043) + self.assertEqual(c.segment[12].tpsot, 1) + self.assertEqual(c.segment[12].tnsot, 2) # SOD: start of data self.assertEqual(c.segment[13].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[14].Isot, 1) - self.assertEqual(c.segment[14].Psot, 1101) - self.assertEqual(c.segment[14].TPsot, 1) - self.assertEqual(c.segment[14].TNsot, 2) + self.assertEqual(c.segment[14].isot, 1) + self.assertEqual(c.segment[14].psot, 1101) + self.assertEqual(c.segment[14].tpsot, 1) + self.assertEqual(c.segment[14].tnsot, 2) # SOD: start of data self.assertEqual(c.segment[15].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[16].Isot, 3) - self.assertEqual(c.segment[16].Psot, 1054) - self.assertEqual(c.segment[16].TPsot, 1) - self.assertEqual(c.segment[16].TNsot, 2) + self.assertEqual(c.segment[16].isot, 3) + self.assertEqual(c.segment[16].psot, 1054) + self.assertEqual(c.segment[16].tpsot, 1) + self.assertEqual(c.segment[16].tnsot, 2) # SOD: start of data self.assertEqual(c.segment[17].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[18].Isot, 2) - self.assertEqual(c.segment[18].Psot, 14) - self.assertEqual(c.segment[18].TPsot, 1) - self.assertEqual(c.segment[18].TNsot, 0) + self.assertEqual(c.segment[18].isot, 2) + self.assertEqual(c.segment[18].psot, 14) + self.assertEqual(c.segment[18].tpsot, 1) + self.assertEqual(c.segment[18].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[19].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[20].Isot, 2) - self.assertEqual(c.segment[20].Psot, 1089) - self.assertEqual(c.segment[20].TPsot, 2) - self.assertEqual(c.segment[20].TNsot, 0) + self.assertEqual(c.segment[20].isot, 2) + self.assertEqual(c.segment[20].psot, 1089) + self.assertEqual(c.segment[20].tpsot, 2) + self.assertEqual(c.segment[20].tnsot, 0) # SOD: start of data self.assertEqual(c.segment[21].id, 'SOD') @@ -2654,68 +2654,68 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 128) - self.assertEqual(c.segment[1].Ysiz, 1) + self.assertEqual(c.segment[1].xsiz, 128) + self.assertEqual(c.segment[1].ysiz, 1) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertTrue(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertTrue(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 0) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 0) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertTrue(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 2)]) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [0]) self.assertEqual(c.segment[3]._exponent, [8]) # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 118) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 1) + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 118) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[6].id, 'SOD') @@ -2735,69 +2735,69 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 3) - self.assertEqual(c.segment[1].Ysiz, 5) + self.assertEqual(c.segment[1].xsiz, 3) + self.assertEqual(c.segment[1].ysiz, 5) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (3, 5)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (3, 5)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertTrue(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [0] * 10) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10]) # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 162) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 1) + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 162) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[6].id, 'SOD') @@ -2817,119 +2817,119 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1) - self.assertEqual(c.segment[1].Ysiz, 1) + self.assertEqual(c.segment[1].xsiz, 1) + self.assertEqual(c.segment[1].ysiz, 1) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (1, 1)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1, 1)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, tuple([8] * 257)) # signed self.assertEqual(c.segment[1]._signed, tuple([False] * 257)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 257) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 1) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 1) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertTrue(c.segment[2].SPcod[7] & 0x0010) + self.assertTrue(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 2) - self.assertEqual(c.segment[3].SPcoc[0], 1) # levels + self.assertEqual(c.segment[3].ccoc, 2) + self.assertEqual(c.segment[3].spcoc[0], 1) # levels self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcoc[3] & 0x04) + self.assertFalse(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertFalse(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[4]._guard_bits, 2) self.assertEqual(c.segment[4]._mantissa, [0] * 4) self.assertEqual(c.segment[4]._exponent, [8, 9, 9, 10]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 1) - self.assertEqual(c.segment[5]._guardBits, 3) + self.assertEqual(c.segment[5].cqcc, 1) + self.assertEqual(c.segment[5]._guard_bits, 3) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[5].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[5]._exponent, [9, 10, 10, 11]) self.assertEqual(c.segment[5]._mantissa, [0, 0, 0, 0]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 2) - self.assertEqual(c.segment[6]._guardBits, 2) + self.assertEqual(c.segment[6].cqcc, 2) + self.assertEqual(c.segment[6]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[6].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[6]._exponent, [9, 10, 10, 11]) self.assertEqual(c.segment[6]._mantissa, [0, 0, 0, 0]) # RGN: region of interest - self.assertEqual(c.segment[7].Crgn, 3) - self.assertEqual(c.segment[7].Srgn, 0) - self.assertEqual(c.segment[7].SPrgn, 11) + self.assertEqual(c.segment[7].crgn, 3) + self.assertEqual(c.segment[7].srgn, 0) + self.assertEqual(c.segment[7].sprgn, 11) # POD: progression order change - self.assertEqual(c.segment[8].RSpod, (0, 0)) - self.assertEqual(c.segment[8].CSpod, (0, 128)) - self.assertEqual(c.segment[8].LYEpod, (1, 1)) - self.assertEqual(c.segment[8].REpod, (33, 33)) - self.assertEqual(c.segment[8].CEpod, (128, 257)) - self.assertEqual(c.segment[8].Ppod, + self.assertEqual(c.segment[8].rspod, (0, 0)) + self.assertEqual(c.segment[8].cspod, (0, 128)) + self.assertEqual(c.segment[8].lyepod, (1, 1)) + self.assertEqual(c.segment[8].repod, (33, 33)) + self.assertEqual(c.segment[8].cdpod, (128, 257)) + self.assertEqual(c.segment[8].ppod, (glymur.core.RLCP, glymur.core.CPRL)) # COM: comment # Registration - self.assertEqual(c.segment[9].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[9].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[9].Ccme.decode('latin-1'), + self.assertEqual(c.segment[9].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[10].Isot, 0) - self.assertEqual(c.segment[10].Psot, 1537) - self.assertEqual(c.segment[10].TPsot, 0) - self.assertEqual(c.segment[10].TNsot, 1) + self.assertEqual(c.segment[10].isot, 0) + self.assertEqual(c.segment[10].psot, 1537) + self.assertEqual(c.segment[10].tpsot, 0) + self.assertEqual(c.segment[10].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[11].id, 'SOD') @@ -2943,52 +2943,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 49) - self.assertEqual(c.segment[1].Ysiz, 49) + self.assertEqual(c.segment[1].xsiz, 49) + self.assertEqual(c.segment[1].ysiz, 49) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (49, 49)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (49, 49)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # 1 layer - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [10, 11, 11, 12, 11, 11, 12, 11, 11, 12, 11, 11, 12, @@ -2996,16 +2996,16 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-3.0.7") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 1528) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 1) + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 1528) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[6].id, 'SOD') @@ -3019,112 +3019,112 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 0 - self.assertEqual(c.segment[1].Rsiz, 1) + self.assertEqual(c.segment[1].rsiz, 1) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 256) - self.assertEqual(c.segment[1].Ysiz, 256) + self.assertEqual(c.segment[1].xsiz, 256) + self.assertEqual(c.segment[1].ysiz, 256) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (4,)) # signed self.assertEqual(c.segment[1]._signed, (True,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertTrue(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 8) # layers = 8 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 1) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 1) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 1) # derived - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 1) # derived + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0]) self.assertEqual(c.segment[3]._exponent, [0]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[4].Cqcc, 0) - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].cqcc, 0) + self.assertEqual(c.segment[4]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[4].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[4].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[4]._mantissa, [0] * 4) self.assertEqual(c.segment[4]._exponent, [4, 5, 5, 6]) # POD: progression order change - self.assertEqual(c.segment[5].RSpod, (0,)) - self.assertEqual(c.segment[5].CSpod, (0,)) - self.assertEqual(c.segment[5].LYEpod, (8,)) - self.assertEqual(c.segment[5].REpod, (33,)) - self.assertEqual(c.segment[5].CEpod, (255,)) - self.assertEqual(c.segment[5].Ppod, (glymur.core.LRCP,)) + self.assertEqual(c.segment[5].rspod, (0,)) + self.assertEqual(c.segment[5].cspod, (0,)) + self.assertEqual(c.segment[5].lyepod, (8,)) + self.assertEqual(c.segment[5].repod, (33,)) + self.assertEqual(c.segment[5].cdpod, (255,)) + self.assertEqual(c.segment[5].ppod, (glymur.core.LRCP,)) # CRG: component registration - self.assertEqual(c.segment[6].Xcrg, (65424,)) - self.assertEqual(c.segment[6].Ycrg, (32558,)) + self.assertEqual(c.segment[6].xcrg, (65424,)) + self.assertEqual(c.segment[6].ycrg, (32558,)) # COM: comment # Registration - self.assertEqual(c.segment[7].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[7].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[7].Ccme.decode('latin-1'), + self.assertEqual(c.segment[7].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # COM: comment # Registration - self.assertEqual(c.segment[8].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[8].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[8].Ccme.decode('latin-1'), + self.assertEqual(c.segment[8].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000," + "2001 Algo Vision Technology") # COM: comment # Registration - self.assertEqual(c.segment[9].Rcme, glymur.core.RCME_BINARY) + self.assertEqual(c.segment[9].rcme, glymur.core.RCME_BINARY) # Comment value - self.assertEqual(len(c.segment[9].Ccme), 62) + self.assertEqual(len(c.segment[9].ccme), 62) # TLM: tile-part length - self.assertEqual(c.segment[10].Ztlm, 0) - self.assertEqual(c.segment[10].Ttlm, (0, 1, 2, 3)) - self.assertEqual(c.segment[10].Ptlm, (4267, 2117, 4080, 2081)) + self.assertEqual(c.segment[10].ztlm, 0) + self.assertEqual(c.segment[10].ttlm, (0, 1, 2, 3)) + self.assertEqual(c.segment[10].ptlm, (4267, 2117, 4080, 2081)) # SOT: start of tile part - self.assertEqual(c.segment[11].Isot, 0) - self.assertEqual(c.segment[11].Psot, 4267) - self.assertEqual(c.segment[11].TPsot, 0) - self.assertEqual(c.segment[11].TNsot, 1) + self.assertEqual(c.segment[11].isot, 0) + self.assertEqual(c.segment[11].psot, 4267) + self.assertEqual(c.segment[11].tpsot, 0) + self.assertEqual(c.segment[11].tnsot, 1) # RGN: region of interest - self.assertEqual(c.segment[12].Crgn, 0) - self.assertEqual(c.segment[12].Srgn, 0) - self.assertEqual(c.segment[12].SPrgn, 7) + self.assertEqual(c.segment[12].crgn, 0) + self.assertEqual(c.segment[12].srgn, 0) + self.assertEqual(c.segment[12].sprgn, 7) # SOD: start of data self.assertEqual(c.segment[13].id, 'SOD') @@ -3132,10 +3132,10 @@ class TestSuiteDump(unittest.TestCase): # 16 SOP markers would be here if we were looking for them # SOT: start of tile part - self.assertEqual(c.segment[31].Isot, 1) - self.assertEqual(c.segment[31].Psot, 2117) - self.assertEqual(c.segment[31].TPsot, 0) - self.assertEqual(c.segment[31].TNsot, 1) + self.assertEqual(c.segment[31].isot, 1) + self.assertEqual(c.segment[31].psot, 2117) + self.assertEqual(c.segment[31].tpsot, 0) + self.assertEqual(c.segment[31].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[32].id, 'SOD') @@ -3143,10 +3143,10 @@ class TestSuiteDump(unittest.TestCase): # 16 SOP markers would be here if we were looking for them # SOT: start of tile part - self.assertEqual(c.segment[49].Isot, 2) - self.assertEqual(c.segment[49].Psot, 4080) - self.assertEqual(c.segment[49].TPsot, 0) - self.assertEqual(c.segment[49].TNsot, 1) + self.assertEqual(c.segment[49].isot, 2) + self.assertEqual(c.segment[49].psot, 4080) + self.assertEqual(c.segment[49].tpsot, 0) + self.assertEqual(c.segment[49].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[50].id, 'SOD') @@ -3154,10 +3154,10 @@ class TestSuiteDump(unittest.TestCase): # 16 SOP markers would be here if we were looking for them # SOT: start of tile part - self.assertEqual(c.segment[67].Isot, 3) - self.assertEqual(c.segment[67].Psot, 2081) - self.assertEqual(c.segment[67].TPsot, 0) - self.assertEqual(c.segment[67].TNsot, 1) + self.assertEqual(c.segment[67].isot, 3) + self.assertEqual(c.segment[67].psot, 2081) + self.assertEqual(c.segment[67].tpsot, 0) + self.assertEqual(c.segment[67].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[68].id, 'SOD') @@ -3173,61 +3173,61 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 128) - self.assertEqual(c.segment[1].Ysiz, 128) + self.assertEqual(c.segment[1].xsiz, 128) + self.assertEqual(c.segment[1].ysiz, 128) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) - self.assertFalse(c.segment[2].Scod & 4) - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) + self.assertFalse(c.segment[2].scod & 4) + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 10) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10]) # SOT: start of tile part - self.assertEqual(c.segment[4].Isot, 0) - self.assertEqual(c.segment[4].Psot, 7331) - self.assertEqual(c.segment[4].TPsot, 0) - self.assertEqual(c.segment[4].TNsot, 1) + self.assertEqual(c.segment[4].isot, 0) + self.assertEqual(c.segment[4].psot, 7331) + self.assertEqual(c.segment[4].tpsot, 0) + self.assertEqual(c.segment[4].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[5].id, 'SOD') @@ -3241,87 +3241,87 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 127) - self.assertEqual(c.segment[1].Ysiz, 227) + self.assertEqual(c.segment[1].xsiz, 127) + self.assertEqual(c.segment[1].ysiz, 227) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (5, 128)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (5, 128)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (127, 126)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (127, 126)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (1, 101)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (1, 101)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(2, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # SOP - self.assertTrue(c.segment[2].Scod & 4) # EPH - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertTrue(c.segment[2].scod & 2) # SOP + self.assertTrue(c.segment[2].scod & 4) # EPH + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 5) # layers = 5 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertTrue(c.segment[2].SPcod[7] & 0x0010) + self.assertTrue(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertTrue(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 0) - self.assertEqual(c.segment[3].SPcoc[0], 3) # level + self.assertEqual(c.segment[3].ccoc, 0) + self.assertEqual(c.segment[3].spcoc[0], 3) # level self.assertEqual(tuple(c.segment[3]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[3].SPcoc[3] & 0x04) + self.assertTrue(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertTrue(c.segment[3].SPcoc[3] & 0x0010) + self.assertTrue(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertTrue(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[4]._guardBits, 3) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[4]._guard_bits, 3) self.assertEqual(c.segment[4]._mantissa, [0] * 10) self.assertEqual(c.segment[4]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10]) # COM: comment # Registration - self.assertEqual(c.segment[5].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[5].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[5].Ccme.decode('latin-1'), + self.assertEqual(c.segment[5].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[6].Isot, 0) - self.assertEqual(c.segment[6].Psot, 4627) - self.assertEqual(c.segment[6].TPsot, 0) - self.assertEqual(c.segment[6].TNsot, 1) + self.assertEqual(c.segment[6].isot, 0) + self.assertEqual(c.segment[6].psot, 4627) + self.assertEqual(c.segment[6].tpsot, 0) + self.assertEqual(c.segment[6].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[7].id, 'SOD') @@ -3341,46 +3341,46 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 640) - self.assertEqual(c.segment[1].Ysiz, 480) + self.assertEqual(c.segment[1].xsiz, 640) + self.assertEqual(c.segment[1].ysiz, 480) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (640, 480)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, tuple([8] * 3)) # signed self.assertEqual(c.segment[1]._signed, tuple([False] * 3)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 19) # layers = 19 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 6) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 6) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertTrue(c.segment[2].SPcod[7] & 0x02) + self.assertTrue(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertTrue(c.segment[2].SPcod[7] & 0x08) + self.assertTrue(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128), (256, 256), (512, 512), (1024, 1024), @@ -3388,8 +3388,8 @@ class TestSuiteDump(unittest.TestCase): # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [1814, 1815, 1815, 1817, 1821, 1821, 1827, 1845, 1845, 1868, 1925, 1925, 2007, 32, 32, 131, 2002, 2002, @@ -3400,10 +3400,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[4].Cqcc, 1) - self.assertEqual(c.segment[4]._guardBits, 3) + self.assertEqual(c.segment[4].cqcc, 1) + self.assertEqual(c.segment[4]._guard_bits, 3) # quantization type - self.assertEqual(c.segment[4].Sqcc & 0x1f, 2) # expounded + self.assertEqual(c.segment[4].sqcc & 0x1f, 2) # expounded self.assertEqual(c.segment[4]._mantissa, [1814, 1815, 1815, 1817, 1821, 1821, 1827, 1845, 1845, 1868, 1925, 1925, 2007, 32, 32, 131, 2002, 2002, @@ -3414,10 +3414,10 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 2) - self.assertEqual(c.segment[5]._guardBits, 3) + self.assertEqual(c.segment[5].cqcc, 2) + self.assertEqual(c.segment[5]._guard_bits, 3) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 2) # expounded + self.assertEqual(c.segment[5].sqcc & 0x1f, 2) # expounded self.assertEqual(c.segment[5]._mantissa, [1814, 1815, 1815, 1817, 1821, 1821, 1827, 1845, 1845, 1868, 1925, 1925, 2007, 32, 32, 131, 2002, 2002, @@ -3428,20 +3428,20 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[6].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[6].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[6].Ccme.decode('latin-1'), + self.assertEqual(c.segment[6].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[7].Isot, 0) - self.assertEqual(c.segment[7].Psot, 262838) - self.assertEqual(c.segment[7].TPsot, 0) - self.assertEqual(c.segment[7].TNsot, 1) + self.assertEqual(c.segment[7].isot, 0) + self.assertEqual(c.segment[7].psot, 262838) + self.assertEqual(c.segment[7].tpsot, 0) + self.assertEqual(c.segment[7].tnsot, 1) # PPT: packed packet headers, tile-part header self.assertEqual(c.segment[8].id, 'PPT') - self.assertEqual(c.segment[8].Zppt, 0) + self.assertEqual(c.segment[8].zppt, 0) # SOD: start of data self.assertEqual(c.segment[9].id, 'SOD') @@ -3455,91 +3455,91 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1024) - self.assertEqual(c.segment[1].Ysiz, 1024) + self.assertEqual(c.segment[1].xsiz, 1024) + self.assertEqual(c.segment[1].ysiz, 1024) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1024, 1024)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, tuple([8] * 4)) # signed self.assertEqual(c.segment[1]._signed, tuple([False] * 4)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (1, 1), (2, 2), (2, 2)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 10) # layers = 10 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 6) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 6) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertTrue(c.segment[2].SPcod[7] & 0x01) + self.assertTrue(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 1) - self.assertEqual(c.segment[3].SPcoc[0], 3) # level + self.assertEqual(c.segment[3].ccoc, 1) + self.assertEqual(c.segment[3].spcoc[0], 3) # level self.assertEqual(tuple(c.segment[3]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertTrue(c.segment[3].SPcoc[3] & 0x01) + self.assertTrue(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[3].SPcoc[3] & 0x04) + self.assertTrue(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertFalse(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) # COC: Coding style component - self.assertEqual(c.segment[4].Ccoc, 3) - self.assertEqual(c.segment[4].SPcoc[0], 6) # level + self.assertEqual(c.segment[4].ccoc, 3) + self.assertEqual(c.segment[4].spcoc[0], 6) # level self.assertEqual(tuple(c.segment[4]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertTrue(c.segment[4].SPcoc[3] & 0x01) + self.assertTrue(c.segment[4].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[4].SPcoc[3] & 0x02) + self.assertFalse(c.segment[4].spcoc[3] & 0x02) # Termination on each coding pass - self.assertTrue(c.segment[4].SPcoc[3] & 0x04) + self.assertTrue(c.segment[4].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[4].SPcoc[3] & 0x08) + self.assertFalse(c.segment[4].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[4].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[4].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[4].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[4].SPcoc[4], + self.assertFalse(c.segment[4].spcoc[3] & 0x0020) + self.assertEqual(c.segment[4].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[5].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[5]._guardBits, 3) + self.assertEqual(c.segment[5].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[5]._guard_bits, 3) self.assertEqual(c.segment[5]._mantissa, [1814, 1815, 1815, 1817, 1821, 1821, 1827, 1845, 1845, 1868, 1925, 1925, 2007, 32, 32, 131, 2002, 2002, @@ -3550,19 +3550,19 @@ class TestSuiteDump(unittest.TestCase): # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 0) - self.assertEqual(c.segment[6]._guardBits, 3) + self.assertEqual(c.segment[6].cqcc, 0) + self.assertEqual(c.segment[6]._guard_bits, 3) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 1) # derived + self.assertEqual(c.segment[6].sqcc & 0x1f, 1) # derived self.assertEqual(c.segment[6]._mantissa, [0]) self.assertEqual(c.segment[6]._exponent, [14]) # QCC: Quantization component # associated component - self.assertEqual(c.segment[7].Cqcc, 3) - self.assertEqual(c.segment[7]._guardBits, 3) + self.assertEqual(c.segment[7].cqcc, 3) + self.assertEqual(c.segment[7]._guard_bits, 3) # quantization type - self.assertEqual(c.segment[7].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[7].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[7]._mantissa, [0] * 19) self.assertEqual(c.segment[7]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, @@ -3570,25 +3570,25 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[8].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[8].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[8].Ccme.decode('latin-1'), + self.assertEqual(c.segment[8].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # PPM: packed packet headers, main header self.assertEqual(c.segment[9].id, 'PPM') - self.assertEqual(c.segment[9].Zppm, 0) + self.assertEqual(c.segment[9].zppm, 0) # TLM (tile-part length) - self.assertEqual(c.segment[10].Ztlm, 0) - self.assertEqual(c.segment[10].Ttlm, (0,)) - self.assertEqual(c.segment[10].Ptlm, (1366780,)) + self.assertEqual(c.segment[10].ztlm, 0) + self.assertEqual(c.segment[10].ttlm, (0,)) + self.assertEqual(c.segment[10].ptlm, (1366780,)) # SOT: start of tile part - self.assertEqual(c.segment[11].Isot, 0) - self.assertEqual(c.segment[11].Psot, 1366780) - self.assertEqual(c.segment[11].TPsot, 0) - self.assertEqual(c.segment[11].TNsot, 1) + self.assertEqual(c.segment[11].isot, 0) + self.assertEqual(c.segment[11].psot, 1366780) + self.assertEqual(c.segment[11].tpsot, 0) + self.assertEqual(c.segment[11].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[12].id, 'SOD') @@ -3602,61 +3602,61 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1024) - self.assertEqual(c.segment[1].Ysiz, 1024) + self.assertEqual(c.segment[1].xsiz, 1024) + self.assertEqual(c.segment[1].ysiz, 1024) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 3) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 3) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [84, 423, 408, 435, 450, 435, 470, 549, 520, 618]) self.assertEqual(c.segment[3]._exponent, [8, 10, 10, 10, 9, 9, 9, 8, 8, 8]) # TLM (tile-part length) - self.assertEqual(c.segment[4].Ztlm, 0) - self.assertIsNone(c.segment[4].Ttlm) - self.assertEqual(c.segment[4].Ptlm, + self.assertEqual(c.segment[4].ztlm, 0) + self.assertIsNone(c.segment[4].ttlm) + self.assertEqual(c.segment[4].ptlm, (350, 356, 402, 245, 402, 564, 675, 283, 317, 299, 330, 333, 346, 403, 839, 667, 328, 349, 274, 325, 501, 561, 756, 710, 779, 620, 628, 675, 600, 66195, @@ -3667,30 +3667,30 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[5].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[5].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[5].Ccme.decode('latin-1'), + self.assertEqual(c.segment[5].ccme.decode('latin-1'), "Created by Aware, Inc.") # SOT: start of tile part - self.assertEqual(c.segment[6].Isot, 0) - self.assertEqual(c.segment[6].Psot, 350) - self.assertEqual(c.segment[6].TPsot, 0) - self.assertEqual(c.segment[6].TNsot, 1) + self.assertEqual(c.segment[6].isot, 0) + self.assertEqual(c.segment[6].psot, 350) + self.assertEqual(c.segment[6].tpsot, 0) + self.assertEqual(c.segment[6].tnsot, 1) # SOD: start of data self.assertEqual(c.segment[7].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[8].Isot, 1) - self.assertEqual(c.segment[8].Psot, 356) - self.assertEqual(c.segment[8].TPsot, 0) - self.assertEqual(c.segment[8].TNsot, 1) + self.assertEqual(c.segment[8].isot, 1) + self.assertEqual(c.segment[8].psot, 356) + self.assertEqual(c.segment[8].tpsot, 0) + self.assertEqual(c.segment[8].tnsot, 1) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[9].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[9]._guardBits, 2) + self.assertEqual(c.segment[9].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[9]._guard_bits, 2) self.assertEqual(c.segment[9]._mantissa, [75, 1093, 1098, 1115, 1157, 1134, 1186, 1217, 1245, 1248]) @@ -3701,10 +3701,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[10].id, 'SOD') # SOT: start of tile part - self.assertEqual(c.segment[11].Isot, 2) - self.assertEqual(c.segment[11].Psot, 402) - self.assertEqual(c.segment[11].TPsot, 0) - self.assertEqual(c.segment[11].TNsot, 1) + self.assertEqual(c.segment[11].isot, 2) + self.assertEqual(c.segment[11].psot, 402) + self.assertEqual(c.segment[11].tpsot, 0) + self.assertEqual(c.segment[11].tnsot, 1) # and so on @@ -3717,7 +3717,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(len(ids), 64) # Tiles should be in order, right? - tiles = [x.Isot for x in c.segment if x.id == 'SOT'] + tiles = [x.isot for x in c.segment if x.id == 'SOT'] self.assertEqual(tiles, list(range(64))) # EOC: end of codestream @@ -3729,50 +3729,50 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 529) - self.assertEqual(c.segment[1].Ysiz, 524) + self.assertEqual(c.segment[1].xsiz, 529) + self.assertEqual(c.segment[1].ysiz, 524) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (17, 12)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (17, 12)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (37, 37)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (37, 37)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (8, 2)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (8, 2)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # sop - self.assertTrue(c.segment[2].Scod & 4) # eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertTrue(c.segment[2].scod & 2) # sop + self.assertTrue(c.segment[2].scod & 4) # eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 2) # levels = 2 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 7) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 7) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 8)) # cblk # Selective arithmetic coding bypass - self.assertTrue(c.segment[2].SPcod[7] & 0x01) + self.assertTrue(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertTrue(c.segment[2].SPcod[7] & 0x08) + self.assertTrue(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertTrue(c.segment[2].SPcod[7] & 0x0010) + self.assertTrue(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16)] * 8) - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [1813, 1814, 1814, 1814, 1815, 1815, 1817, 1821, 1821, 1827, 1845, 1845, 1868, 1925, 1925, 2007, @@ -3783,24 +3783,24 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # 225 consecutive PPM segments. - zppm = [x.Zppm for x in c.segment[5:230]] + zppm = [x.zppm for x in c.segment[5:230]] self.assertEqual(zppm, list(range(225))) # SOT: start of tile part - self.assertEqual(c.segment[230].Isot, 0) - self.assertEqual(c.segment[230].Psot, 580) - self.assertEqual(c.segment[230].TPsot, 0) - self.assertEqual(c.segment[230].TNsot, 1) + self.assertEqual(c.segment[230].isot, 0) + self.assertEqual(c.segment[230].psot, 580) + self.assertEqual(c.segment[230].tpsot, 0) + self.assertEqual(c.segment[230].tnsot, 1) # 225 total SOT segments - Isot = [x.Isot for x in c.segment if x.id == 'SOT'] - self.assertEqual(Isot, list(range(225))) + isot = [x.isot for x in c.segment if x.id == 'SOT'] + self.assertEqual(isot, list(range(225))) # scads of SOP, EPH segments sop = [x.id for x in c.segment if x.id == 'SOP'] @@ -3817,52 +3817,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 12) - self.assertEqual(c.segment[1].Ysiz, 12) + self.assertEqual(c.segment[1].xsiz, 12) + self.assertEqual(c.segment[1].ysiz, 12) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (3, 3)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (3, 3)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # sop - self.assertTrue(c.segment[2].Scod & 4) # eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertTrue(c.segment[2].scod & 2) # sop + self.assertTrue(c.segment[2].scod & 4) # eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 4) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 4) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertTrue(c.segment[2].SPcod[7] & 0x08) + self.assertTrue(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertTrue(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertTrue(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) # expounded - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # expounded + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [1821, 1845, 1845, 1868, 1925, 1925, 2007, 32, 32, 131, 2002, 2002, 1888]) @@ -3872,20 +3872,20 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[5].Isot, 0) - self.assertEqual(c.segment[5].Psot, 349) - self.assertEqual(c.segment[5].TPsot, 0) - self.assertEqual(c.segment[5].TNsot, 1) + self.assertEqual(c.segment[5].isot, 0) + self.assertEqual(c.segment[5].psot, 349) + self.assertEqual(c.segment[5].tpsot, 0) + self.assertEqual(c.segment[5].tnsot, 1) # PPT: packed packet headers, tile-part header self.assertEqual(c.segment[6].id, 'PPT') - self.assertEqual(c.segment[6].Zppt, 0) + self.assertEqual(c.segment[6].zppt, 0) # scads of SOP, EPH segments @@ -3898,8 +3898,8 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(len(ppts), 16) # 16 SOT segments - Isots = [x.Isot for x in c.segment if x.id == 'SOT'] - self.assertEqual(Isots, list(range(16))) + isots = [x.isot for x in c.segment if x.id == 'SOT'] + self.assertEqual(isots, list(range(16))) # EOC: end of codestream self.assertEqual(c.segment[-1].id, 'EOC') @@ -3910,87 +3910,87 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "1" means profile 1 - self.assertEqual(c.segment[1].Rsiz, 2) + self.assertEqual(c.segment[1].rsiz, 2) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 12) - self.assertEqual(c.segment[1].Ysiz, 12) + self.assertEqual(c.segment[1].xsiz, 12) + self.assertEqual(c.segment[1].ysiz, 12) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (4, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (4, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (12, 12)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (12, 12)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (4, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (4, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(4, 1), (1, 1)]) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # sop - self.assertTrue(c.segment[2].Scod & 4) # eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RPCL) + self.assertTrue(c.segment[2].scod & 2) # sop + self.assertTrue(c.segment[2].scod & 4) # eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RPCL) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 1) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 1) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(1, 1), (2, 2)]) # COC: Coding style component - self.assertEqual(c.segment[3].Ccoc, 1) - self.assertEqual(c.segment[3].SPcoc[0], 1) # level + self.assertEqual(c.segment[3].ccoc, 1) + self.assertEqual(c.segment[3].spcoc[0], 1) # level self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcoc[3] & 0x01) + self.assertFalse(c.segment[3].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcoc[3] & 0x02) + self.assertFalse(c.segment[3].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcoc[3] & 0x04) + self.assertFalse(c.segment[3].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcoc[3] & 0x08) + self.assertFalse(c.segment[3].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[3].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[3].SPcoc[4], + self.assertFalse(c.segment[3].spcoc[3] & 0x0020) + self.assertEqual(c.segment[3].spcoc[4], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[3]._precinct_size, [(2, 2), (4, 4)]) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) # none - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) # none + self.assertEqual(c.segment[4]._guard_bits, 2) self.assertEqual(c.segment[4]._mantissa, [0] * 4) self.assertEqual(c.segment[4]._exponent, [8, 9, 9, 10]) # COM: comment # Registration - self.assertEqual(c.segment[5].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[5].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[5].Ccme.decode('latin-1'), + self.assertEqual(c.segment[5].ccme.decode('latin-1'), "Creator: AV-J2K (c) 2000,2001 Algo Vision") # SOT: start of tile part - self.assertEqual(c.segment[6].Isot, 0) - self.assertEqual(c.segment[6].Psot, 434) - self.assertEqual(c.segment[6].TPsot, 0) - self.assertEqual(c.segment[6].TNsot, 1) + self.assertEqual(c.segment[6].isot, 0) + self.assertEqual(c.segment[6].psot, 434) + self.assertEqual(c.segment[6].tpsot, 0) + self.assertEqual(c.segment[6].tnsot, 1) # scads of SOP, EPH segments @@ -4130,12 +4130,12 @@ class TestSuiteDump(unittest.TestCase): # sub-sampling codestream = jp2.get_codestream() - self.assertEqual(codestream.segment[1].XRsiz[0], 1) - self.assertEqual(codestream.segment[1].YRsiz[0], 1) - self.assertEqual(codestream.segment[1].XRsiz[1], 2) - self.assertEqual(codestream.segment[1].YRsiz[1], 2) - self.assertEqual(codestream.segment[1].XRsiz[2], 2) - self.assertEqual(codestream.segment[1].YRsiz[2], 2) + self.assertEqual(codestream.segment[1].xrsiz[0], 1) + self.assertEqual(codestream.segment[1].yrsiz[0], 1) + self.assertEqual(codestream.segment[1].xrsiz[1], 2) + self.assertEqual(codestream.segment[1].yrsiz[1], 2) + self.assertEqual(codestream.segment[1].xrsiz[2], 2) + self.assertEqual(codestream.segment[1].yrsiz[2], 2) def test_NR_file4_dump(self): # One 8-bit component in the sRGB-grey colourspace. @@ -4441,54 +4441,54 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "3" means profile 3 - self.assertEqual(c.segment[1].Rsiz, 3) + self.assertEqual(c.segment[1].rsiz, 3) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1920) - self.assertEqual(c.segment[1].Ysiz, 1080) + self.assertEqual(c.segment[1].xsiz, 1920) + self.assertEqual(c.segment[1].ysiz, 1080) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1920, 1080)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12, 12, 12)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.CPRL) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.CPRL) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size[0], (128, 128)) self.assertEqual(c.segment[2]._precinct_size[1:], [(256, 256)] * 5) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [1824, 1776, 1776, 1728, 1792, 1792, 1760, 1872, 1872, 1896, 5, 5, 71, 2003, 2003, 1890]) @@ -4497,30 +4497,30 @@ class TestSuiteDump(unittest.TestCase): 16, 16, 14, 14, 14, 14, 14, 14]) # COC: Coding style component - self.assertEqual(c.segment[4].Ccoc, 1) - self.assertEqual(c.segment[4].SPcoc[0], 5) # level + self.assertEqual(c.segment[4].ccoc, 1) + self.assertEqual(c.segment[4].spcoc[0], 5) # level self.assertEqual(tuple(c.segment[4]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[4].SPcoc[3] & 0x01) + self.assertFalse(c.segment[4].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[4].SPcoc[3] & 0x02) + self.assertFalse(c.segment[4].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[4].SPcoc[3] & 0x04) + self.assertFalse(c.segment[4].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[4].SPcoc[3] & 0x08) + self.assertFalse(c.segment[4].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[4].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[4].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[4].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[4].SPcoc[4], + self.assertFalse(c.segment[4].spcoc[3] & 0x0020) + self.assertEqual(c.segment[4].spcoc[4], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 1) - self.assertEqual(c.segment[5]._guardBits, 2) + self.assertEqual(c.segment[5].cqcc, 1) + self.assertEqual(c.segment[5]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 2) + self.assertEqual(c.segment[5].sqcc & 0x1f, 2) self.assertEqual(c.segment[5]._mantissa, [1824, 1776, 1776, 1728, 1792, 1792, 1760, 1872, 1872, 1896, 5, 5, 71, 2003, 2003, 1890]) @@ -4529,30 +4529,30 @@ class TestSuiteDump(unittest.TestCase): 14, 14, 14]) # COC: Coding style component - self.assertEqual(c.segment[6].Ccoc, 2) - self.assertEqual(c.segment[6].SPcoc[0], 5) # level + self.assertEqual(c.segment[6].ccoc, 2) + self.assertEqual(c.segment[6].spcoc[0], 5) # level self.assertEqual(tuple(c.segment[6]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[6].SPcoc[3] & 0x01) + self.assertFalse(c.segment[6].spcoc[3] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[6].SPcoc[3] & 0x02) + self.assertFalse(c.segment[6].spcoc[3] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[6].SPcoc[3] & 0x04) + self.assertFalse(c.segment[6].spcoc[3] & 0x04) # Vertically causal context - self.assertFalse(c.segment[6].SPcoc[3] & 0x08) + self.assertFalse(c.segment[6].spcoc[3] & 0x08) # Predictable termination - self.assertFalse(c.segment[6].SPcoc[3] & 0x0010) + self.assertFalse(c.segment[6].spcoc[3] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[6].SPcoc[3] & 0x0020) - self.assertEqual(c.segment[6].SPcoc[4], + self.assertFalse(c.segment[6].spcoc[3] & 0x0020) + self.assertEqual(c.segment[6].spcoc[4], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) # QCC: Quantization component # associated component - self.assertEqual(c.segment[7].Cqcc, 2) - self.assertEqual(c.segment[7]._guardBits, 2) + self.assertEqual(c.segment[7].cqcc, 2) + self.assertEqual(c.segment[7]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[7].Sqcc & 0x1f, 2) # none + self.assertEqual(c.segment[7].sqcc & 0x1f, 2) # none self.assertEqual(c.segment[7]._mantissa, [1824, 1776, 1776, 1728, 1792, 1792, 1760, 1872, 1872, 1896, 5, 5, 71, 2003, 2003, 1890]) @@ -4562,23 +4562,23 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[8].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[8].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[8].Ccme.decode('latin-1'), + self.assertEqual(c.segment[8].ccme.decode('latin-1'), "Created by OpenJPEG version 1.3.0") # TLM (tile-part length) - self.assertEqual(c.segment[9].Ztlm, 0) - self.assertEqual(c.segment[9].Ttlm, (0, 0, 0)) - self.assertEqual(c.segment[9].Ptlm, (45274, 20838, 8909)) + self.assertEqual(c.segment[9].ztlm, 0) + self.assertEqual(c.segment[9].ttlm, (0, 0, 0)) + self.assertEqual(c.segment[9].ptlm, (45274, 20838, 8909)) # 3 tiles, one for each component - idx = [x.Isot for x in c.segment if x.id == 'SOT'] + idx = [x.isot for x in c.segment if x.id == 'SOT'] self.assertEqual(idx, [0, 0, 0]) - lens = [x.Psot for x in c.segment if x.id == 'SOT'] + lens = [x.psot for x in c.segment if x.id == 'SOT'] self.assertEqual(lens, [45274, 20838, 8909]) - TPsot = [x.TPsot for x in c.segment if x.id == 'SOT'] - self.assertEqual(TPsot, [0, 1, 2]) + tpsot = [x.tpsot for x in c.segment if x.id == 'SOT'] + self.assertEqual(tpsot, [0, 1, 2]) sods = [x for x in c.segment if x.id == 'SOD'] self.assertEqual(len(sods), 3) @@ -4594,45 +4594,45 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: "3" means profile 3 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 2592) - self.assertEqual(c.segment[1].Ysiz, 1944) + self.assertEqual(c.segment[1].xsiz, 2592) + self.assertEqual(c.segment[1].ysiz, 1944) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (640, 480)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16), (32, 32), (64, 64), (128, 128), @@ -4651,47 +4651,47 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 512) - self.assertEqual(c.segment[1].Ysiz, 512) + self.assertEqual(c.segment[1].xsiz, 512) + self.assertEqual(c.segment[1].ysiz, 512) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (512, 512)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (512, 512)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 2) # layers = 2 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) ids = [x.id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'SOT', 'SOD', 'EOC'] @@ -4704,47 +4704,47 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 512) - self.assertEqual(c.segment[1].Ysiz, 512) + self.assertEqual(c.segment[1].xsiz, 512) + self.assertEqual(c.segment[1].ysiz, 512) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (512, 512)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (512, 512)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 2) # layers = 2 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) ids = [x.id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'SOT', 'SOD', 'EOC'] @@ -4765,53 +4765,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1420) - self.assertEqual(c.segment[1].Ysiz, 1416) + self.assertEqual(c.segment[1].xsiz, 1420) + self.assertEqual(c.segment[1].ysiz, 1416) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1420, 1416)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 11) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 11) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 4) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 4) self.assertEqual(c.segment[3]._mantissa, [0] * 34) self.assertEqual(c.segment[3]._exponent, [16] + [17, 17, 18] * 11) @@ -4828,52 +4828,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 512) - self.assertEqual(c.segment[1].Ysiz, 614) + self.assertEqual(c.segment[1].xsiz, 512) + self.assertEqual(c.segment[1].ysiz, 614) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (512, 614)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (512, 614)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [442, 422, 422, 403, 422, 422, 403, 472, 472, 487, 591, 591, 676, 558, 558, 485]) @@ -4883,9 +4883,9 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), "Kakadu-3.2") + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-3.2") def test_NR_cthead1_dump(self): jfile = os.path.join(data_root, @@ -4899,52 +4899,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 256) - self.assertEqual(c.segment[1].Ysiz, 256) + self.assertEqual(c.segment[1].xsiz, 256) + self.assertEqual(c.segment[1].ysiz, 256) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (256, 256)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (256, 256)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [9, 10, 10, 11, 10, 10, 11, 10, 10, 11, 10, 10, 10, @@ -4952,15 +4952,15 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), "Kakadu-v6.3.1") + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-v6.3.1") # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), "Kakadu-v6.3.1") + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-v6.3.1") @unittest.skip("fprintf stderr output in r2343.") def test_NR_illegalcolortransform_dump(self): @@ -4975,53 +4975,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1420) - self.assertEqual(c.segment[1].Ysiz, 1416) + self.assertEqual(c.segment[1].xsiz, 1420) + self.assertEqual(c.segment[1].ysiz, 1416) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1420, 1416)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 11) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 11) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 4) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 4) self.assertEqual(c.segment[3]._mantissa, [0] * 34) self.assertEqual(c.segment[3]._exponent, [16] + [17, 17, 18] * 11) @@ -5036,61 +5036,61 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 256) - self.assertEqual(c.segment[1].Ysiz, 256) + self.assertEqual(c.segment[1].xsiz, 256) + self.assertEqual(c.segment[1].ysiz, 256) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (256, 256)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (256, 256)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (True, True, True)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default # quantization type - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_BINARY) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_BINARY) # Comment value - self.assertEqual(len(c.segment[4].Ccme), 36) + self.assertEqual(len(c.segment[4].ccme), 36) def test_NR_kakadu_v4_4_openjpegv2_broken_dump(self): jfile = os.path.join(data_root, @@ -5101,52 +5101,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 2048) - self.assertEqual(c.segment[1].Ysiz, 2500) + self.assertEqual(c.segment[1].xsiz, 2048) + self.assertEqual(c.segment[1].ysiz, 2500) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (2048, 2500)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 12) # layers = 12 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 8) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 8) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 25) self.assertEqual(c.segment[3]._exponent, [17, 18, 18, 19, 18, 18, 19, 18, 18, 19, 18, 18, 19, @@ -5154,13 +5154,13 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), "Kakadu-v4.4") + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-v4.4") # COM: comment # Registration - self.assertEqual(c.segment[5].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[5].rcme, glymur.core.RCME_ISO_8859_1) # Comment value expected = "Kdu-Layer-Info: log_2{Delta-D(MSE)/[2^16*Delta-L(bytes)]}," expected += " L(bytes)\n" @@ -5176,7 +5176,7 @@ class TestSuiteDump(unittest.TestCase): expected += " -71.9, 1.4e+006\n" expected += " -73.8, 2.0e+006\n" expected += "-256.0, 3.7e+006\n" - self.assertEqual(c.segment[5].Ccme.decode('latin-1'), expected) + self.assertEqual(c.segment[5].ccme.decode('latin-1'), expected) def test_NR_MarkerIsNotCompliant_j2k_dump(self): jfile = os.path.join(data_root, @@ -5186,52 +5186,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1420) - self.assertEqual(c.segment[1].Ysiz, 1416) + self.assertEqual(c.segment[1].xsiz, 1420) + self.assertEqual(c.segment[1].ysiz, 1416) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1420, 1416)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 11) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 11) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 4) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 4) self.assertEqual(c.segment[3]._mantissa, [0] * 34) self.assertEqual(c.segment[3]._exponent, [16, 17, 17, 18, 17, 17, 18, 17, 17, 18, 17, 17, 18, @@ -5246,52 +5246,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1920) - self.assertEqual(c.segment[1].Ysiz, 1080) + self.assertEqual(c.segment[1].xsiz, 1920) + self.assertEqual(c.segment[1].ysiz, 1080) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1920, 1080)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -5304,52 +5304,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1920) - self.assertEqual(c.segment[1].Ysiz, 1080) + self.assertEqual(c.segment[1].xsiz, 1920) + self.assertEqual(c.segment[1].ysiz, 1080) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1920, 1080)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -5362,52 +5362,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1920) - self.assertEqual(c.segment[1].Ysiz, 1080) + self.assertEqual(c.segment[1].xsiz, 1920) + self.assertEqual(c.segment[1].ysiz, 1080) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1920, 1080)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -5424,51 +5424,51 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 117) - self.assertEqual(c.segment[1].Ysiz, 117) + self.assertEqual(c.segment[1].xsiz, 117) + self.assertEqual(c.segment[1].ysiz, 117) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (117, 117)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (117, 117)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 4) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -5485,51 +5485,51 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 117) - self.assertEqual(c.segment[1].Ysiz, 117) + self.assertEqual(c.segment[1].xsiz, 117) + self.assertEqual(c.segment[1].ysiz, 117) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (117, 117)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (117, 117)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 4) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -5545,51 +5545,51 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 512) - self.assertEqual(c.segment[1].Ysiz, 512) + self.assertEqual(c.segment[1].xsiz, 512) + self.assertEqual(c.segment[1].ysiz, 512) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (512, 512)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (512, 512)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (True,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 16) # layers = 16 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [18, 19, 19, 20, 19, 19, 20, 19, 19, 20, 19, 19, 20, @@ -5597,9 +5597,9 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-2.0.2") def test_NR_test_lossless_j2k_dump(self): @@ -5614,52 +5614,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1024) - self.assertEqual(c.segment[1].Ysiz, 1024) + self.assertEqual(c.segment[1].xsiz, 1024) + self.assertEqual(c.segment[1].ysiz, 1024) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1024, 1024)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [12, 13, 13, 14, 13, 13, 14, 13, 13, 14, 13, 13, 14, @@ -5667,9 +5667,9 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "ClearCanvas DICOM OpenJPEG") def test_NR_123_j2c_dump(self): @@ -5683,53 +5683,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1800) - self.assertEqual(c.segment[1].Ysiz, 1800) + self.assertEqual(c.segment[1].xsiz, 1800) + self.assertEqual(c.segment[1].ysiz, 1800) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1800, 1800)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 11) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 11) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 4) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 4) self.assertEqual(c.segment[3]._mantissa, [0] * 34) self.assertEqual(c.segment[3]._exponent, [16] + [17, 17, 18] * 11) @@ -5745,53 +5745,53 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 1800) - self.assertEqual(c.segment[1].Ysiz, 1800) + self.assertEqual(c.segment[1].xsiz, 1800) + self.assertEqual(c.segment[1].ysiz, 1800) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1800, 1800)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 1) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 11) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 11) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 4) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 4) self.assertEqual(c.segment[3]._mantissa, [0] * 34) self.assertEqual(c.segment[3]._exponent, [16] + [17, 17, 18] * 11) @@ -5808,54 +5808,54 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 2048) - self.assertEqual(c.segment[1].Ysiz, 1556) + self.assertEqual(c.segment[1].xsiz, 2048) + self.assertEqual(c.segment[1].ysiz, 1556) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (2048, 1556)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (12, 12, 12)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 2) # layers = 2 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128)] + [(256, 256)] * 5) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, @@ -5863,9 +5863,9 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "DCP-Werkstatt") @unittest.skipIf(sys.hexversion < 0x03020000, @@ -5917,79 +5917,79 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 203) - self.assertEqual(c.segment[1].Ysiz, 152) + self.assertEqual(c.segment[1].xsiz, 203) + self.assertEqual(c.segment[1].ysiz, 152) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (203, 152)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (203, 152)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COM: comment # Registration - self.assertEqual(c.segment[2].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[2].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[2].Ccme.decode('latin-1'), + self.assertEqual(c.segment[2].ccme.decode('latin-1'), "Creator: JasPer Version 1.701.0") # COD: Coding style default - self.assertFalse(c.segment[3].Scod & 2) # no sop - self.assertFalse(c.segment[3].Scod & 4) # no eph - self.assertEqual(c.segment[3].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[3].scod & 2) # no sop + self.assertFalse(c.segment[3].scod & 4) # no eph + self.assertEqual(c.segment[3].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[3]._layers, 1) # layers = 1 - self.assertEqual(c.segment[3].SPcod[3], 1) # mct - self.assertEqual(c.segment[3].SPcod[4], 5) # level + self.assertEqual(c.segment[3].spcod[3], 1) # mct + self.assertEqual(c.segment[3].spcod[4], 5) # level self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcod[7] & 0x01) + self.assertFalse(c.segment[3].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcod[7] & 0x02) + self.assertFalse(c.segment[3].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcod[7] & 0x04) + self.assertFalse(c.segment[3].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcod[7] & 0x08) + self.assertFalse(c.segment[3].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcod[7] & 0x0010) + self.assertFalse(c.segment[3].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcod[7] & 0x0020) - self.assertEqual(c.segment[3].SPcod[8], + self.assertFalse(c.segment[3].spcod[7] & 0x0020) + self.assertEqual(c.segment[3].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[3].SPcod), 9) + self.assertEqual(len(c.segment[3].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) + self.assertEqual(c.segment[4]._guard_bits, 2) self.assertEqual(c.segment[4]._mantissa, [0] * 16) self.assertEqual(c.segment[4]._exponent, [8] + [9, 9, 10] * 5) # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 1) - self.assertEqual(c.segment[5]._guardBits, 2) + self.assertEqual(c.segment[5].cqcc, 1) + self.assertEqual(c.segment[5]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[5].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[5]._mantissa, [0] * 16) self.assertEqual(c.segment[5]._exponent, [8] + [9, 9, 10] * 5) # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 2) - self.assertEqual(c.segment[6]._guardBits, 2) + self.assertEqual(c.segment[6].cqcc, 2) + self.assertEqual(c.segment[6]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[6].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[6]._mantissa, [0] * 16) self.assertEqual(c.segment[6]._exponent, [8] + [9, 9, 10] * 5) @@ -6050,79 +6050,79 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 203) - self.assertEqual(c.segment[1].Ysiz, 152) + self.assertEqual(c.segment[1].xsiz, 203) + self.assertEqual(c.segment[1].ysiz, 152) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (203, 152)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (203, 152)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COM: comment # Registration - self.assertEqual(c.segment[2].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[2].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[2].Ccme.decode('latin-1'), + self.assertEqual(c.segment[2].ccme.decode('latin-1'), "Creator: JasPer Vers)on 1.701.0") # COD: Coding style default - self.assertFalse(c.segment[3].Scod & 2) # no sop - self.assertFalse(c.segment[3].Scod & 4) # no eph - self.assertEqual(c.segment[3].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[3].scod & 2) # no sop + self.assertFalse(c.segment[3].scod & 4) # no eph + self.assertEqual(c.segment[3].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[3]._layers, 1) # layers = 1 - self.assertEqual(c.segment[3].SPcod[3], 1) # mct - self.assertEqual(c.segment[3].SPcod[4], 5) # level + self.assertEqual(c.segment[3].spcod[3], 1) # mct + self.assertEqual(c.segment[3].spcod[4], 5) # level self.assertEqual(tuple(c.segment[3]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[3].SPcod[7] & 0x01) + self.assertFalse(c.segment[3].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[3].SPcod[7] & 0x02) + self.assertFalse(c.segment[3].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[3].SPcod[7] & 0x04) + self.assertFalse(c.segment[3].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[3].SPcod[7] & 0x08) + self.assertFalse(c.segment[3].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[3].SPcod[7] & 0x0010) + self.assertFalse(c.segment[3].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[3].SPcod[7] & 0x0020) - self.assertEqual(c.segment[3].SPcod[8], + self.assertFalse(c.segment[3].spcod[7] & 0x0020) + self.assertEqual(c.segment[3].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[3].SPcod), 9) + self.assertEqual(len(c.segment[3].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[4].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[4]._guardBits, 2) + self.assertEqual(c.segment[4].sqcd & 0x1f, 0) + self.assertEqual(c.segment[4]._guard_bits, 2) self.assertEqual(c.segment[4]._mantissa, [0] * 16) self.assertEqual(c.segment[4]._exponent, [8] + [9, 9, 10] * 5) # QCC: Quantization component # associated component - self.assertEqual(c.segment[5].Cqcc, 1) - self.assertEqual(c.segment[5]._guardBits, 2) + self.assertEqual(c.segment[5].cqcc, 1) + self.assertEqual(c.segment[5]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[5].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[5].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[5]._mantissa, [0] * 16) self.assertEqual(c.segment[5]._exponent, [8] + [9, 9, 10] * 5) # QCC: Quantization component # associated component - self.assertEqual(c.segment[6].Cqcc, 2) - self.assertEqual(c.segment[6]._guardBits, 2) + self.assertEqual(c.segment[6].cqcc, 2) + self.assertEqual(c.segment[6]._guard_bits, 2) # quantization type - self.assertEqual(c.segment[6].Sqcc & 0x1f, 0) # none + self.assertEqual(c.segment[6].sqcc & 0x1f, 0) # none self.assertEqual(c.segment[6]._mantissa, [0] * 16) self.assertEqual(c.segment[6]._exponent, [8] + [9, 9, 10] * 5) @@ -6178,52 +6178,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 720) - self.assertEqual(c.segment[1].Ysiz, 243) + self.assertEqual(c.segment[1].xsiz, 720) + self.assertEqual(c.segment[1].ysiz, 243) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (720, 243)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (720, 243)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (2, 1), (2, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 128)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [1816, 1792, 1792, 1724, 1770, 1770, 1724, 1868, 1868, 1892, 3, 3, 69, 2002, 2002, 1889]) @@ -6331,52 +6331,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 479) - self.assertEqual(c.segment[1].Ysiz, 203) + self.assertEqual(c.segment[1].xsiz, 479) + self.assertEqual(c.segment[1].ysiz, 203) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (256, 203)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (256, 203)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8] + [9, 9, 10] * 5) @@ -6431,52 +6431,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 200) - self.assertEqual(c.segment[1].Ysiz, 200) + self.assertEqual(c.segment[1].xsiz, 200) + self.assertEqual(c.segment[1].ysiz, 200) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (200, 200)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (200, 200)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 1) def test_NR_issue206_image_000_dump(self): jfile = os.path.join(data_root, @@ -6529,52 +6529,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 431) - self.assertEqual(c.segment[1].Ysiz, 326) + self.assertEqual(c.segment[1].xsiz, 431) + self.assertEqual(c.segment[1].ysiz, 326) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (256, 256)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (256, 256)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8] + [9, 9, 10] * 5) @@ -6632,52 +6632,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 135) - self.assertEqual(c.segment[1].Ysiz, 135) + self.assertEqual(c.segment[1].xsiz, 135) + self.assertEqual(c.segment[1].ysiz, 135) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (135, 135)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (135, 135)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 2) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 2) # layers = 2 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 2) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 2) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [1822, 1770, 1770, 1724, 1792, 1792, 1762, 1868, 1868, 1892, 3, 3, 69, 2002, 2002, 1889]) @@ -6686,9 +6686,9 @@ class TestSuiteDump(unittest.TestCase): # COM: comment # Registration - self.assertEqual(c.segment[4].Rcme, glymur.core.RCME_ISO_8859_1) + self.assertEqual(c.segment[4].rcme, glymur.core.RCME_ISO_8859_1) # Comment value - self.assertEqual(c.segment[4].Ccme.decode('latin-1'), + self.assertEqual(c.segment[4].ccme.decode('latin-1'), "Kakadu-v5.2.1") def test_NR_mem_b2ace68c_1381_dump(self): @@ -6759,52 +6759,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 649) - self.assertEqual(c.segment[1].Ysiz, 865) + self.assertEqual(c.segment[1].xsiz, 649) + self.assertEqual(c.segment[1].ysiz, 865) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (256, 256)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (256, 256)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (1,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 3) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 3) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [1] + [2, 2, 3] * 5) @@ -6873,52 +6873,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 124) - self.assertEqual(c.segment[1].Ysiz, 46) + self.assertEqual(c.segment[1].xsiz, 124) + self.assertEqual(c.segment[1].ysiz, 46) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (124, 46)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (124, 46)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (4,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [4] + [5, 5, 6] * 5) @@ -6967,64 +6967,64 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 766) - self.assertEqual(c.segment[1].Ysiz, 576) + self.assertEqual(c.segment[1].xsiz, 766) + self.assertEqual(c.segment[1].ysiz, 576) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (766, 576)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (766, 576)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1), (2, 1), (2, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 128)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 1) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 1) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8] + [9, 9, 10] * 5) # POD: progression order change - self.assertEqual(c.segment[4].RSpod, (0, 0)) - self.assertEqual(c.segment[4].CSpod, (0, 1)) - self.assertEqual(c.segment[4].LYEpod, (1, 1)) - self.assertEqual(c.segment[4].REpod, (6, 6)) - self.assertEqual(c.segment[4].CEpod, (1, 3)) + self.assertEqual(c.segment[4].rspod, (0, 0)) + self.assertEqual(c.segment[4].cspod, (0, 1)) + self.assertEqual(c.segment[4].lyepod, (1, 1)) + self.assertEqual(c.segment[4].repod, (6, 6)) + self.assertEqual(c.segment[4].cdpod, (1, 3)) podvals = (glymur.core.LRCP, glymur.core.LRCP) - self.assertEqual(c.segment[4].Ppod, podvals) + self.assertEqual(c.segment[4].ppod, podvals) def test_NR_orb_blue10_lin_jp2_dump(self): jfile = os.path.join(data_root, @@ -7075,52 +7075,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 117) - self.assertEqual(c.segment[1].Ysiz, 117) + self.assertEqual(c.segment[1].xsiz, 117) + self.assertEqual(c.segment[1].ysiz, 117) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (117, 117)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (117, 117)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 4) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -7174,52 +7174,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 117) - self.assertEqual(c.segment[1].Ysiz, 117) + self.assertEqual(c.segment[1].xsiz, 117) + self.assertEqual(c.segment[1].ysiz, 117) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (117, 117)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (117, 117)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 4) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) @@ -7282,52 +7282,52 @@ class TestSuiteDump(unittest.TestCase): # SIZ: Image and tile size # Profile: - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual(c.segment[1].Xsiz, 400) - self.assertEqual(c.segment[1].Ysiz, 400) + self.assertEqual(c.segment[1].xsiz, 400) + self.assertEqual(c.segment[1].ysiz, 400) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), (128, 128)) + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (128, 128)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), (0, 0)) + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.RLCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.RLCP) self.assertEqual(c.segment[2]._layers, 6) # layers = 6 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # level + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # level self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblk # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default - self.assertEqual(c.segment[3].Sqcd & 0x1f, 0) - self.assertEqual(c.segment[3]._guardBits, 2) + self.assertEqual(c.segment[3].sqcd & 0x1f, 0) + self.assertEqual(c.segment[3]._guard_bits, 2) self.assertEqual(c.segment[3]._mantissa, [0] * 16) self.assertEqual(c.segment[3]._exponent, [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index 50e0e48..67183ae 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -83,50 +83,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (640, 480)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne1_ppm_2_encode(self): # NR-ENC-Bretagne1.ppm-2-encode @@ -141,50 +141,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (640, 480)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 1) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 1) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne1_ppm_3_encode(self): # NR-ENC-Bretagne1.ppm-3-encode @@ -200,48 +200,48 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (640, 480)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (16, 16)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(2, 2), (4, 4), (8, 8), (16, 16), (32, 32), @@ -263,48 +263,48 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (data.shape[1], data.shape[0])) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size. Reported as XY, not RC. - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (32, 32)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16), (32, 32), (64, 64)] + [(128, 128)] * 3) @@ -321,50 +321,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (data.shape[1], data.shape[0])) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (127, 127)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.PCRL) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.PCRL) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne2_ppm_6_encode(self): # NR-ENC-Bretagne2.ppm-6-encode @@ -378,53 +378,53 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (5183, 3887)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (5183, 3887)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(2, 2)] * 3) # COD: Coding style default - self.assertTrue(c.segment[2].Scod & 2) # sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertTrue(c.segment[2].scod & 2) # sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding bypass - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # Reset context probabilities - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # 18 SOP segments. - nsops = [x.Nsop for x in c.segment if x.id == 'SOP'] + nsops = [x.nsop for x in c.segment if x.id == 'SOP'] self.assertEqual(nsops, list(range(18))) def test_NR_ENC_Bretagne2_ppm_7_encode(self): @@ -438,50 +438,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (2592, 1944)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (2592, 1944)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertTrue(c.segment[2].Scod & 4) # eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertTrue(c.segment[2].scod & 4) # eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertTrue(c.segment[2].SPcod[7] & 0x02) + self.assertTrue(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertTrue(c.segment[2].SPcod[7] & 0x04) + self.assertTrue(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertTrue(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertTrue(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) # 18 EPH segments. ephs = [x for x in c.segment if x.id == 'EPH'] @@ -498,51 +498,51 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (2742, 2244)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (150, 300)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (2742, 2244)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Cevennes1_bmp_9_encode(self): infile = os.path.join(data_root, 'input/nonregression/Cevennes1.bmp') @@ -555,50 +555,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (2592, 1944)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (2592, 1944)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Cevennes2_ppm_10_encode(self): infile = os.path.join(data_root, 'input/nonregression/Cevennes2.ppm') @@ -611,50 +611,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (640, 480)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Rome_bmp_11_encode(self): infile = os.path.join(data_root, 'input/nonregression/Rome.bmp') @@ -701,51 +701,51 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (640, 480)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (640, 480)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (8, 8, 8)) # signed self.assertEqual(c.segment[1]._signed, (False, False, False)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)] * 3) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 3) # layers = 3 - self.assertEqual(c.segment[2].SPcod[3], 1) # mct - self.assertEqual(c.segment[2].SPcod[4], 2) # levels + self.assertEqual(c.segment[2].spcod[3], 1) # mct + self.assertEqual(c.segment[2].spcod[4], 2) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) @unittest.skip("Known failure in openjpeg test suite.") def test_NR_ENC_random_issue_0005_tif_12_encode(self): @@ -762,50 +762,50 @@ class TestSuiteWrite(unittest.TestCase): # SIZ: Image and tile size # Profile: "0" means profile 2 - self.assertEqual(c.segment[1].Rsiz, 0) + self.assertEqual(c.segment[1].rsiz, 0) # Reference grid size - self.assertEqual((c.segment[1].Xsiz, c.segment[1].Ysiz), + self.assertEqual((c.segment[1].xsiz, c.segment[1].ysiz), (1024, 1024)) # Reference grid offset - self.assertEqual((c.segment[1].XOsiz, c.segment[1].YOsiz), (0, 0)) + self.assertEqual((c.segment[1].xosiz, c.segment[1].yosiz), (0, 0)) # Tile size - self.assertEqual((c.segment[1].XTsiz, c.segment[1].YTsiz), + self.assertEqual((c.segment[1].xtsiz, c.segment[1].ytsiz), (1024, 1024)) # Tile offset - self.assertEqual((c.segment[1].XTOsiz, c.segment[1].YTOsiz), + self.assertEqual((c.segment[1].xtosiz, c.segment[1].ytosiz), (0, 0)) # bitdepth self.assertEqual(c.segment[1]._bitdepth, (16,)) # signed self.assertEqual(c.segment[1]._signed, (False,)) # subsampling - self.assertEqual(list(zip(c.segment[1].XRsiz, c.segment[1].YRsiz)), + self.assertEqual(list(zip(c.segment[1].xrsiz, c.segment[1].yrsiz)), [(1, 1)]) # COD: Coding style default - self.assertFalse(c.segment[2].Scod & 2) # no sop - self.assertFalse(c.segment[2].Scod & 4) # no eph - self.assertEqual(c.segment[2].SPcod[0], glymur.core.LRCP) + self.assertFalse(c.segment[2].scod & 2) # no sop + self.assertFalse(c.segment[2].scod & 4) # no eph + self.assertEqual(c.segment[2].spcod[0], glymur.core.LRCP) self.assertEqual(c.segment[2]._layers, 1) # layers = 1 - self.assertEqual(c.segment[2].SPcod[3], 0) # mct - self.assertEqual(c.segment[2].SPcod[4], 5) # levels + self.assertEqual(c.segment[2].spcod[3], 0) # mct + self.assertEqual(c.segment[2].spcod[4], 5) # levels self.assertEqual(tuple(c.segment[2]._code_block_size), (64, 64)) # cblksz # Selective arithmetic coding BYPASS - self.assertFalse(c.segment[2].SPcod[7] & 0x01) + self.assertFalse(c.segment[2].spcod[7] & 0x01) # RESET context probabilities (RESET) - self.assertFalse(c.segment[2].SPcod[7] & 0x02) + self.assertFalse(c.segment[2].spcod[7] & 0x02) # Termination on each coding pass, RESTART(TERMALL) - self.assertFalse(c.segment[2].SPcod[7] & 0x04) + self.assertFalse(c.segment[2].spcod[7] & 0x04) # Vertically causal context (VSC) - self.assertFalse(c.segment[2].SPcod[7] & 0x08) + self.assertFalse(c.segment[2].spcod[7] & 0x08) # Predictable termination, ERTERM(SEGTERM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0010) + self.assertFalse(c.segment[2].spcod[7] & 0x0010) # Segmentation symbols, SEGMARK(SEGSYSM) - self.assertFalse(c.segment[2].SPcod[7] & 0x0020) - self.assertEqual(c.segment[2].SPcod[8], + self.assertFalse(c.segment[2].spcod[7] & 0x0020) + self.assertEqual(c.segment[2].spcod[8], glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) - self.assertEqual(len(c.segment[2].SPcod), 9) + self.assertEqual(len(c.segment[2].spcod), 9) if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 8b2e033..91b1741 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -640,6 +640,7 @@ class TestPrinting(unittest.TestCase): ' CME marker segment @ (3209, 37)', ' "Created by OpenJPEG version 2.0.0"'] expected = '\n'.join(lst) + self.maxDiff = None self.assertEqual(actual, expected) @unittest.skipIf(data_root is None, From 38434ee58e5e71ea75f0f92ed228fdc7a0ec0bb3 Mon Sep 17 00:00:00 2001 From: jevans Date: Sun, 7 Jul 2013 20:35:06 -0400 Subject: [PATCH 27/54] pylint work, issue #71 --- glymur/codestream.py | 361 +++++++++++++++------------- glymur/lib/openjp2.py | 12 +- glymur/test/test_codestream.py | 4 +- glymur/test/test_opj_suite.py | 204 ++++++++-------- glymur/test/test_opj_suite_neg.py | 6 +- glymur/test/test_opj_suite_write.py | 4 +- 6 files changed, 311 insertions(+), 280 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index 0bba795..3995306 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -19,15 +19,25 @@ from .lib import openjp2 as opj2 # Need a catch-all list of valid markers. # See table A-1 in ISO/IEC FCD15444-1. -_valid_markers = [0xff00, 0xff01, 0xfffe] +_VALID_MARKERS = [0xff00, 0xff01, 0xfffe] for _marker in range(0xffc0, 0xffe0): - _valid_markers.append(_marker) + _VALID_MARKERS.append(_marker) for _marker in range(0xfff0, 0xfff9): - _valid_markers.append(_marker) + _VALID_MARKERS.append(_marker) for _marker in range(0xff4f, 0xff70): - _valid_markers.append(_marker) + _VALID_MARKERS.append(_marker) for _marker in range(0xff90, 0xff94): - _valid_markers.append(_marker) + _VALID_MARKERS.append(_marker) + + +class InconsistentStartOfTileError(IOError): + """To be raised if bad SOT segment encountered. + + SOT segment offsets are recorded as encountered. The offsets should all be + different. + """ + def __init__(self, msg): + IOError.__init__(self, msg) class Codestream(object): @@ -59,6 +69,10 @@ class Codestream(object): Supplying False may impose a large performance penalty. """ + # Number of components. Must be kept track of for the processing of + # many segments. + self._csiz = -1 + # Do we parse the tile part bit stream or not? self._parse_tpart_flag = False @@ -70,137 +84,155 @@ class Codestream(object): segment = SOCsegment(offset=fptr.tell() - 2, length=0) self.segment.append(segment) - tile_offset = [] - tile_length = [] + self._tile_offset = [] + self._tile_length = [] while True: - offset = fptr.tell() + read_buffer = fptr.read(2) marker_id, = struct.unpack('>H', read_buffer) - if marker_id >= 0xff30 and marker_id <= 0xff3f: - the_id = '0x{0:x}'.format(marker_id) - segment = Segment(id=the_id, offset=offset, length=0) - - elif marker_id == 0xff51: - # Need to keep track of the number of components from SIZ for - # other markers - segment = _parse_siz_segment(fptr) - self._csiz = len(segment.ssiz) - - elif marker_id == 0xff52: - segment = _parse_cod_segment(fptr) - - sop = (segment.scod & 2) > 0 - eph = (segment.scod & 4) > 0 - - if sop or eph: - self._parse_tpart_flag = True - else: - self._parse_tpart_flag = False - - elif marker_id == 0xff53: - segment = self._parse_coc_segment(fptr) - - elif marker_id == 0xff55: - segment = _parse_tlm_segment(fptr) - - elif marker_id == 0xff58: - segment = _parse_plt_segment(fptr) - - elif marker_id == 0xff5c: - segment = _parse_qcd_segment(fptr) - - elif marker_id == 0xff5d: - segment = self._parse_qcc_segment(fptr) - - elif marker_id == 0xff5e: - segment = self._parse_rgn_segment(fptr) - - elif marker_id == 0xff5f: - segment = self._parse_pod_segment(fptr) - - elif marker_id == 0xff60: - segment = _parse_ppm_segment(fptr) - - elif marker_id == 0xff61: - segment = _parse_ppt_segment(fptr) - - elif marker_id == 0xff63: - segment = _parse_crg_segment(fptr, self._csiz) - - elif marker_id == 0xff64: - segment = _parse_cme_segment(fptr) - - elif marker_id == 0xff90: - # Need to keep easy access to tile offsets and lengths for when - # we encounter start-of-data marker segments. - if header_only: - # Stop parsing as soon as we hit the first Start Of Tile. - return - - segment = _parse_sot_segment(fptr) - if segment.offset not in tile_offset: - tile_offset.append(segment.offset) - tile_length.append(segment.psot) - else: - msg = "Inconsistent start-of-tile (SOT) marker segment " - msg += "encountered in tile with index {0}. " - msg += "Codestream parsing terminated." - msg = msg.format(segment.isot) - warnings.warn(msg) - return - - elif marker_id == 0xff93: - # start of data. Need to seek past the current tile part. - # The last SOT marker segment has the info that we need. - segment = _parse_sod_segment(fptr) - - elif marker_id == 0xffd9: - # end of codestream - segment = _parse_eoc_segment(fptr) - self.segment.append(segment) + if marker_id == 0xff90 and header_only: + # start-of-tile (SOT) means we are out of the main header. + # No need to go any further. break - elif marker_id in _valid_markers: - # It's a reserved marker that I don't know anything about. - # See table A-1 in ISO/IEC FCD15444-1. - segment = _parse_generic_segment(fptr, marker_id) - - elif ((marker_id & 0xff00) >> 8) == 255: - # Peek ahead to see if the next two bytes are a marker or not. - # Then seek back. - msg = "Unrecognized marker id: 0x{0:x}".format(marker_id) + try: + segment = self._process_marker_segment(fptr, marker_id) + except InconsistentStartOfTileError as isote: + # Treat this as a warning. + msg = str(isote) warnings.warn(msg) - cpos = fptr.tell() - read_buffer = fptr.read(2) - next_item, = struct.unpack('>H', read_buffer) - fptr.seek(cpos) - if ((next_item & 0xff00) >> 8) == 255: - # No segment associated with this marker, so reset - # to two bytes after it. - segment = Segment(id='0x{0:x}'.format(marker_id), - offset=offset, length=0) - else: - segment = _parse_generic_segment(fptr, marker_id) - - else: - msg = 'Invalid marker id encountered at byte {0:d} ' - msg += 'in codestream: "0x{1:x}"' - msg = msg.format(offset, marker_id) - raise IOError(msg) + break self.segment.append(segment) + if marker_id == 0xffd9: + # end of codestream, should break. + break + if marker_id == 0xff93: # If SOD, then we need to seek past the tile part bit stream. if self._parse_tpart_flag: # But first parse the tile part bit stream for SOP and # EPH segments. self._parse_tile_part_bit_stream(fptr, segment, - tile_length[-1]) + self._tile_length[-1]) - fptr.seek(tile_offset[-1] + tile_length[-1]) + fptr.seek(self._tile_offset[-1] + self._tile_length[-1]) + + def _process_marker_segment(self, fptr, marker_id): + """Process and return a segment from the codestream. + """ + offset = fptr.tell() - 2 + + if marker_id >= 0xff30 and marker_id <= 0xff3f: + the_id = '0x{0:x}'.format(marker_id) + segment = Segment(marker_id=the_id, offset=offset, length=0) + + elif marker_id == 0xff51: + # Need to keep track of the number of components from SIZ for + # other markers + segment = _parse_siz_segment(fptr) + self._csiz = len(segment.ssiz) + + elif marker_id == 0xff52: + segment = _parse_cod_segment(fptr) + + sop = (segment.scod & 2) > 0 + eph = (segment.scod & 4) > 0 + + if sop or eph: + self._parse_tpart_flag = True + else: + self._parse_tpart_flag = False + + elif marker_id == 0xff53: + segment = self._parse_coc_segment(fptr) + + elif marker_id == 0xff55: + segment = _parse_tlm_segment(fptr) + + elif marker_id == 0xff58: + segment = _parse_plt_segment(fptr) + + elif marker_id == 0xff5c: + segment = _parse_qcd_segment(fptr) + + elif marker_id == 0xff5d: + segment = self._parse_qcc_segment(fptr) + + elif marker_id == 0xff5e: + segment = self._parse_rgn_segment(fptr) + + elif marker_id == 0xff5f: + segment = self._parse_pod_segment(fptr) + + elif marker_id == 0xff60: + segment = _parse_ppm_segment(fptr) + + elif marker_id == 0xff61: + segment = _parse_ppt_segment(fptr) + + elif marker_id == 0xff63: + segment = _parse_crg_segment(fptr, self._csiz) + + elif marker_id == 0xff64: + segment = _parse_cme_segment(fptr) + + elif marker_id == 0xff90: + # Need to keep easy access to tile offsets and lengths for when + # we encounter start-of-data marker segments. + + segment = _parse_sot_segment(fptr) + if segment.offset not in self._tile_offset: + self._tile_offset.append(segment.offset) + self._tile_length.append(segment.psot) + else: + msg = "Inconsistent start-of-tile (SOT) marker segment " + msg += "encountered in tile with index {0}. " + msg += "Codestream parsing terminated." + msg = msg.format(segment.isot) + raise InconsistentStartOfTileError(msg) + + elif marker_id == 0xff93: + # start of data. Need to seek past the current tile part. + # The last SOT marker segment has the info that we need. + segment = _parse_sod_segment(fptr) + + elif marker_id == 0xffd9: + # end of codestream + segment = _parse_eoc_segment(fptr) + + elif marker_id in _VALID_MARKERS: + # It's a reserved marker that I don't know anything about. + # See table A-1 in ISO/IEC FCD15444-1. + segment = _parse_generic_segment(fptr, marker_id) + + elif ((marker_id & 0xff00) >> 8) == 255: + # Peek ahead to see if the next two bytes are a marker or not. + # Then seek back. + msg = "Unrecognized marker id: 0x{0:x}".format(marker_id) + warnings.warn(msg) + cpos = fptr.tell() + read_buffer = fptr.read(2) + next_item, = struct.unpack('>H', read_buffer) + fptr.seek(cpos) + if ((next_item & 0xff00) >> 8) == 255: + # No segment associated with this marker, so reset + # to two bytes after it. + segment = Segment(id='0x{0:x}'.format(marker_id), + offset=offset, length=0) + else: + segment = _parse_generic_segment(fptr, marker_id) + + else: + msg = 'Invalid marker id encountered at byte {0:d} ' + msg += 'in codestream: "0x{1:x}"' + msg = msg.format(offset, marker_id) + raise IOError(msg) + + return segment def _parse_tile_part_bit_stream(self, fptr, sod_marker, tile_length): """Parse the tile part bit stream for SOP, EPH marker segments.""" @@ -380,7 +412,7 @@ class Segment(object): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -388,14 +420,14 @@ class Segment(object): Length of marker segment in bytes. This number does not include the two bytes constituting the marker. """ - def __init__(self, id='', offset=-1, length=-1): - self.id = id + def __init__(self, marker_id='', offset=-1, length=-1, data=None): + self.marker_id = marker_id self.offset = offset self.length = length - self._data = None + self._data = data def __str__(self): - msg = '{0} marker segment @ ({1}, {2})'.format(self.id, + msg = '{0} marker segment @ ({1}, {2})'.format(self.marker_id, self.offset, self.length) return msg @@ -406,7 +438,7 @@ class COCsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -427,7 +459,7 @@ class COCsegment(Segment): Core coding system """ def __init__(self, ccoc, scoc, spcoc, length, offset): - Segment.__init__(self, id='COC') + Segment.__init__(self, marker_id='COC') self.ccoc = ccoc self.scoc = scoc self.spcoc = spcoc @@ -479,7 +511,7 @@ class CODsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -500,7 +532,7 @@ class CODsegment(Segment): Core coding system """ def __init__(self, scod, spcod, length, offset): - Segment.__init__(self, id='COD') + Segment.__init__(self, marker_id='COD') self.scod = scod self.spcod = spcod self.length = length @@ -510,7 +542,7 @@ class CODsegment(Segment): self._layers = params[1] self._numresolutions = params[3] - if params[3] > opj2._J2K_MAXRLVLS: + if params[3] > opj2.J2K_MAXRLVLS: msg = "Invalid number of resolutions ({0})." msg = msg.format(params[3] + 1) warnings.warn(msg) @@ -581,7 +613,7 @@ class CMEsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -601,7 +633,7 @@ class CMEsegment(Segment): Core coding system """ def __init__(self, rcme, ccme, length, offset): - Segment.__init__(self, id='CME') + Segment.__init__(self, marker_id='CME') self.rcme = rcme self.ccme = ccme self.length = length @@ -624,7 +656,7 @@ class CRGsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -635,7 +667,7 @@ class CRGsegment(Segment): Horizontal, vertical offset for each component """ def __init__(self, xcrg, ycrg, length, offset): - Segment.__init__(self, id='CRG') + Segment.__init__(self, marker_id='CRG') self.xcrg = xcrg self.ycrg = ycrg self.length = length @@ -655,7 +687,7 @@ class EOCsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -671,7 +703,7 @@ class EOCsegment(Segment): Core coding system """ def __init__(self, length, offset): - Segment.__init__(self, id='EOC') + Segment.__init__(self, marker_id='EOC') self.length = length self.offset = offset @@ -681,7 +713,7 @@ class PODsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -708,7 +740,7 @@ class PODsegment(Segment): Core coding system """ def __init__(self, pod_params, length, offset): - Segment.__init__(self, id='POD') + Segment.__init__(self, marker_id='POD') self.rspod = pod_params[0::6] self.cspod = pod_params[1::6] @@ -748,7 +780,7 @@ class PLTsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -767,7 +799,7 @@ class PLTsegment(Segment): Core coding system """ def __init__(self, zplt, iplt, length, offset): - Segment.__init__(self, id='PLT') + Segment.__init__(self, marker_id='PLT') self.zplt = zplt self.iplt = iplt self.length = length @@ -787,7 +819,7 @@ class PPMsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -804,7 +836,7 @@ class PPMsegment(Segment): Core coding system """ def __init__(self, zppm, data, length, offset): - Segment.__init__(self, id='PPM') + Segment.__init__(self, marker_id='PPM') self.zppm = zppm # both Nppm and Ippms information stored in _data @@ -826,7 +858,7 @@ class PPTsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -845,7 +877,7 @@ class PPTsegment(Segment): Core coding system """ def __init__(self, zppt, ippt, length, offset): - Segment.__init__(self, id='PPT') + Segment.__init__(self, marker_id='PPT') self.zppt = zppt self.ippt = ippt self.length = length @@ -864,7 +896,7 @@ class QCCsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -885,7 +917,7 @@ class QCCsegment(Segment): Core coding system """ def __init__(self, cqcc, sqcc, spqcc, length, offset): - Segment.__init__(self, id='QCC') + Segment.__init__(self, marker_id='QCC') self.cqcc = cqcc self.sqcc = sqcc self.spqcc = spqcc @@ -913,7 +945,7 @@ class QCDsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -932,7 +964,7 @@ class QCDsegment(Segment): Core coding system """ def __init__(self, sqcd, spqcd, length, offset): - Segment.__init__(self, id='QCD') + Segment.__init__(self, marker_id='QCD') self.sqcd = sqcd self.spqcd = spqcd @@ -961,7 +993,7 @@ class RGNsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -982,7 +1014,7 @@ class RGNsegment(Segment): Core coding system """ def __init__(self, length, offset, crgn, srgn, sprgn): - Segment.__init__(self, id='RGN') + Segment.__init__(self, marker_id='RGN') self.length = length self.offset = offset self.crgn = crgn @@ -1005,7 +1037,7 @@ class SIZsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1035,7 +1067,7 @@ class SIZsegment(Segment): Core coding system """ def __init__(self, xy_buffer, component_buffer, length, offset): - Segment.__init__(self, id='SIZ') + Segment.__init__(self, marker_id='SIZ') data = struct.unpack('>HIIIIIIIIH', xy_buffer) @@ -1107,7 +1139,7 @@ class SOCsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1123,7 +1155,7 @@ class SOCsegment(Segment): Core coding system """ def __init__(self, **kwargs): - Segment.__init__(self, id='SOC') + Segment.__init__(self, marker_id='SOC') self.__dict__.update(**kwargs) @@ -1132,7 +1164,7 @@ class SODsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1148,7 +1180,7 @@ class SODsegment(Segment): Core coding system """ def __init__(self, length, offset): - Segment.__init__(self, id='SOD') + Segment.__init__(self, marker_id='SOD') self.length = length self.offset = offset @@ -1158,7 +1190,7 @@ class EPHsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1174,7 +1206,7 @@ class EPHsegment(Segment): Core coding system """ def __init__(self, length, offset): - Segment.__init__(self, id='EPH') + Segment.__init__(self, marker_id='EPH') self.length = length self.offset = offset @@ -1184,7 +1216,7 @@ class SOPsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1201,7 +1233,7 @@ class SOPsegment(Segment): Core coding system """ def __init__(self, nsop, length, offset): - Segment.__init__(self, id='SOP') + Segment.__init__(self, marker_id='SOP') self.nsop = nsop self.length = length self.offset = offset @@ -1217,7 +1249,7 @@ class SOTsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1241,7 +1273,7 @@ class SOTsegment(Segment): Core coding system """ def __init__(self, isot, psot, tpsot, tnsot, length, offset): - Segment.__init__(self, id='SOT') + Segment.__init__(self, marker_id='SOT') self.isot = isot self.psot = psot self.tpsot = tpsot @@ -1269,7 +1301,7 @@ class TLMsegment(Segment): Attributes ---------- - id : str + marker_id : str Identifier for the segment. offset : int Offset of marker segment in bytes from beginning of file. @@ -1291,7 +1323,7 @@ class TLMsegment(Segment): Core coding system """ def __init__(self, length, offset, ztlm, ttlm, ptlm): - Segment.__init__(self, id='TLM') + Segment.__init__(self, marker_id='TLM') self.length = length self.offset = offset self.ztlm = ztlm @@ -1730,7 +1762,6 @@ def _parse_generic_segment(fptr, marker_id): length, = struct.unpack('>H', read_buffer) data = fptr.read(length-2) - segment = Segment(id='0x{0:x}'.format(marker_id), - offset=offset, length=length) - segment._data = data + segment = Segment(marker_id='0x{0:x}'.format(marker_id), offset=offset, + length=length, data=data) return segment diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index 6e41e66..167fda2 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -154,8 +154,8 @@ _rsiz_capabilities_t = ctypes.c_int32 _stream_t_p = ctypes.c_void_p _PATH_LEN = 4096 -_J2K_MAXRLVLS = 33 -_J2K_MAXBANDS = (3 * _J2K_MAXRLVLS - 2) +J2K_MAXRLVLS = 33 +_J2K_MAXBANDS = (3 * J2K_MAXRLVLS - 2) _JPWL_MAX_NO_TILESPECS = 16 @@ -379,10 +379,10 @@ class _cparameters_t(ctypes.Structure): ("res_spec", ctypes.c_int), # initial precinct width - ("prcw_init", ctypes.c_int * _J2K_MAXRLVLS), + ("prcw_init", ctypes.c_int * J2K_MAXRLVLS), # initial precinct height - ("prch_init", ctypes.c_int * _J2K_MAXRLVLS), + ("prch_init", ctypes.c_int * J2K_MAXRLVLS), # input file name ("infile", ctypes.c_char * _PATH_LEN), @@ -606,10 +606,10 @@ class _tccp_info_t(ctypes.Structure): ("roishift", ctypes.c_int32), # precinct width - ("prcw", ctypes.c_uint32 * _J2K_MAXRLVLS), + ("prcw", ctypes.c_uint32 * J2K_MAXRLVLS), # precinct width - ("prch", ctypes.c_uint32 * _J2K_MAXRLVLS)] + ("prch", ctypes.c_uint32 * J2K_MAXRLVLS)] class _tile_info_v2_t(ctypes.Structure): diff --git a/glymur/test/test_codestream.py b/glymur/test/test_codestream.py index d28d32f..b19a042 100644 --- a/glymur/test/test_codestream.py +++ b/glymur/test/test_codestream.py @@ -54,7 +54,7 @@ class TestCodestream(unittest.TestCase): j = Jp2k(tfile.name) c = j.get_codestream() - self.assertEqual(c.segment[2].id, '0xff6f') + self.assertEqual(c.segment[2].marker_id, '0xff6f') self.assertEqual(c.segment[2].length, 3) self.assertEqual(c.segment[2]._data, b'\x00') @@ -84,7 +84,7 @@ class TestCodestream(unittest.TestCase): j = Jp2k(tfile.name) c = j.get_codestream() - self.assertEqual(c.segment[2].id, '0xff79') + self.assertEqual(c.segment[2].marker_id, '0xff79') self.assertEqual(c.segment[2].length, 3) self.assertEqual(c.segment[2]._data, b'\x00') diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index f4d9b84..a3b765e 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -1515,7 +1515,7 @@ class TestSuiteDump(unittest.TestCase): c = Jp2k(jfile).get_codestream(header_only=False) # Segment IDs. - actual = [x.id for x in c.segment] + actual = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'QCD', 'COD', 'SOT', 'SOD', 'EOC'] self.assertEqual(actual, expected) @@ -1662,7 +1662,7 @@ class TestSuiteDump(unittest.TestCase): "Creator: AV-J2K (c) 2000,2001 Algo Vision") # One unknown marker - self.assertEqual(c.segment[6].id, '0xff30') + self.assertEqual(c.segment[6].marker_id, '0xff30') # SOT: start of tile part self.assertEqual(c.segment[7].isot, 0) @@ -1672,16 +1672,16 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[8].id, 'SOD') + self.assertEqual(c.segment[8].marker_id, 'SOD') # SOP, EPH - sop = [x.id for x in c.segment if x.id == 'SOP'] - eph = [x.id for x in c.segment if x.id == 'EPH'] + sop = [x.marker_id for x in c.segment if x.marker_id == 'SOP'] + eph = [x.marker_id for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(sop), 24) self.assertEqual(len(eph), 24) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p0_03_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') @@ -1798,7 +1798,7 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[13].id, 'SOD') + self.assertEqual(c.segment[13].marker_id, 'SOD') def test_NR_p0_04_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') @@ -1906,7 +1906,7 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[8].id, 'SOD') + self.assertEqual(c.segment[8].marker_id, 'SOD') def test_NR_p0_05_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') @@ -2050,7 +2050,7 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[11].id, 'SOD') + self.assertEqual(c.segment[11].marker_id, 'SOD') def test_NR_p0_06_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_06.j2k') @@ -2187,7 +2187,7 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[11].id, 'SOD') + self.assertEqual(c.segment[11].marker_id, 'SOD') def test_NR_p0_07_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_07.j2k') @@ -2272,7 +2272,7 @@ class TestSuiteDump(unittest.TestCase): #self.assertEqual(c.segment[7].iplt), 99) # SOD: start of data - self.assertEqual(c.segment[8].id, 'SOD') + self.assertEqual(c.segment[8].marker_id, 'SOD') def test_NR_p0_08_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') @@ -2502,10 +2502,10 @@ class TestSuiteDump(unittest.TestCase): # SOD: start of data # Just one. - self.assertEqual(c.segment[6].id, 'SOD') + self.assertEqual(c.segment[6].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[7].id, 'EOC') + self.assertEqual(c.segment[7].marker_id, 'EOC') def test_NR_p0_10_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') @@ -2571,7 +2571,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[4].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[5].id, 'SOD') + self.assertEqual(c.segment[5].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[6].isot, 1) @@ -2580,7 +2580,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[6].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[7].id, 'SOD') + self.assertEqual(c.segment[7].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[8].isot, 2) @@ -2589,7 +2589,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[8].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[9].id, 'SOD') + self.assertEqual(c.segment[9].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[10].isot, 3) @@ -2598,7 +2598,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[10].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[11].id, 'SOD') + self.assertEqual(c.segment[11].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[12].isot, 0) @@ -2607,7 +2607,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[12].tnsot, 2) # SOD: start of data - self.assertEqual(c.segment[13].id, 'SOD') + self.assertEqual(c.segment[13].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[14].isot, 1) @@ -2616,7 +2616,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[14].tnsot, 2) # SOD: start of data - self.assertEqual(c.segment[15].id, 'SOD') + self.assertEqual(c.segment[15].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[16].isot, 3) @@ -2625,7 +2625,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[16].tnsot, 2) # SOD: start of data - self.assertEqual(c.segment[17].id, 'SOD') + self.assertEqual(c.segment[17].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[18].isot, 2) @@ -2634,7 +2634,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[18].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[19].id, 'SOD') + self.assertEqual(c.segment[19].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[20].isot, 2) @@ -2643,10 +2643,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[20].tnsot, 0) # SOD: start of data - self.assertEqual(c.segment[21].id, 'SOD') + self.assertEqual(c.segment[21].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[22].id, 'EOC') + self.assertEqual(c.segment[22].marker_id, 'EOC') def test_NR_p0_11_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') @@ -2718,16 +2718,16 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[6].id, 'SOD') + self.assertEqual(c.segment[6].marker_id, 'SOD') # SOP, EPH - sop = [x.id for x in c.segment if x.id == 'SOP'] - eph = [x.id for x in c.segment if x.id == 'EPH'] + sop = [x.marker_id for x in c.segment if x.marker_id == 'SOP'] + eph = [x.marker_id for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(sop), 0) self.assertEqual(len(eph), 1) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p0_12_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') @@ -2800,16 +2800,16 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[6].id, 'SOD') + self.assertEqual(c.segment[6].marker_id, 'SOD') # SOP, EPH - sop = [x.id for x in c.segment if x.id == 'SOP'] - eph = [x.id for x in c.segment if x.id == 'EPH'] + sop = [x.marker_id for x in c.segment if x.marker_id == 'SOP'] + eph = [x.marker_id for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(sop), 4) self.assertEqual(len(eph), 0) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p0_13_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') @@ -2932,10 +2932,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[10].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[11].id, 'SOD') + self.assertEqual(c.segment[11].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[12].id, 'EOC') + self.assertEqual(c.segment[12].marker_id, 'EOC') def test_NR_p0_14_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') @@ -3008,10 +3008,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[5].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[6].id, 'SOD') + self.assertEqual(c.segment[6].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[7].id, 'EOC') + self.assertEqual(c.segment[7].marker_id, 'EOC') def test_NR_p0_15_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') @@ -3127,7 +3127,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[12].sprgn, 7) # SOD: start of data - self.assertEqual(c.segment[13].id, 'SOD') + self.assertEqual(c.segment[13].marker_id, 'SOD') # 16 SOP markers would be here if we were looking for them @@ -3138,7 +3138,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[31].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[32].id, 'SOD') + self.assertEqual(c.segment[32].marker_id, 'SOD') # 16 SOP markers would be here if we were looking for them @@ -3149,7 +3149,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[49].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[50].id, 'SOD') + self.assertEqual(c.segment[50].marker_id, 'SOD') # 16 SOP markers would be here if we were looking for them @@ -3160,12 +3160,12 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[67].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[68].id, 'SOD') + self.assertEqual(c.segment[68].marker_id, 'SOD') # 16 SOP markers would be here if we were looking for them # EOC: end of codestream - self.assertEqual(c.segment[85].id, 'EOC') + self.assertEqual(c.segment[85].marker_id, 'EOC') def test_NR_p0_16_dump(self): jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') @@ -3230,10 +3230,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[4].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[5].id, 'SOD') + self.assertEqual(c.segment[5].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[6].id, 'EOC') + self.assertEqual(c.segment[6].marker_id, 'EOC') def test_NR_p1_01_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') @@ -3324,16 +3324,16 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[6].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[7].id, 'SOD') + self.assertEqual(c.segment[7].marker_id, 'SOD') # SOP, EPH - sop = [x.id for x in c.segment if x.id == 'SOP'] - eph = [x.id for x in c.segment if x.id == 'EPH'] + sop = [x.marker_id for x in c.segment if x.marker_id == 'SOP'] + eph = [x.marker_id for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(sop), 20) self.assertEqual(len(eph), 20) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p1_02_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') @@ -3440,14 +3440,14 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[7].tnsot, 1) # PPT: packed packet headers, tile-part header - self.assertEqual(c.segment[8].id, 'PPT') + self.assertEqual(c.segment[8].marker_id, 'PPT') self.assertEqual(c.segment[8].zppt, 0) # SOD: start of data - self.assertEqual(c.segment[9].id, 'SOD') + self.assertEqual(c.segment[9].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[10].id, 'EOC') + self.assertEqual(c.segment[10].marker_id, 'EOC') def test_NR_p1_03_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_03.j2k') @@ -3576,7 +3576,7 @@ class TestSuiteDump(unittest.TestCase): "Creator: AV-J2K (c) 2000,2001 Algo Vision") # PPM: packed packet headers, main header - self.assertEqual(c.segment[9].id, 'PPM') + self.assertEqual(c.segment[9].marker_id, 'PPM') self.assertEqual(c.segment[9].zppm, 0) # TLM (tile-part length) @@ -3591,10 +3591,10 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[11].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[12].id, 'SOD') + self.assertEqual(c.segment[12].marker_id, 'SOD') # EOC: end of codestream - self.assertEqual(c.segment[13].id, 'EOC') + self.assertEqual(c.segment[13].marker_id, 'EOC') def test_NR_p1_04_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') @@ -3679,7 +3679,7 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[6].tnsot, 1) # SOD: start of data - self.assertEqual(c.segment[7].id, 'SOD') + self.assertEqual(c.segment[7].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[8].isot, 1) @@ -3698,7 +3698,7 @@ class TestSuiteDump(unittest.TestCase): [8, 10, 10, 10, 9, 9, 9, 8, 8, 8]) # SOD: start of data - self.assertEqual(c.segment[10].id, 'SOD') + self.assertEqual(c.segment[10].marker_id, 'SOD') # SOT: start of tile part self.assertEqual(c.segment[11].isot, 2) @@ -3709,19 +3709,19 @@ class TestSuiteDump(unittest.TestCase): # and so on # There should be 64 SOD, SOT, QCD segments. - ids = [x.id for x in c.segment if x.id == 'SOT'] + ids = [x.marker_id for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(len(ids), 64) - ids = [x.id for x in c.segment if x.id == 'SOD'] + ids = [x.marker_id for x in c.segment if x.marker_id == 'SOD'] self.assertEqual(len(ids), 64) - ids = [x.id for x in c.segment if x.id == 'QCD'] + ids = [x.marker_id for x in c.segment if x.marker_id == 'QCD'] self.assertEqual(len(ids), 64) # Tiles should be in order, right? - tiles = [x.isot for x in c.segment if x.id == 'SOT'] + tiles = [x.isot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(tiles, list(range(64))) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p1_05_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_05.j2k') @@ -3799,17 +3799,17 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[230].tnsot, 1) # 225 total SOT segments - isot = [x.isot for x in c.segment if x.id == 'SOT'] + isot = [x.isot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(isot, list(range(225))) # scads of SOP, EPH segments - sop = [x.id for x in c.segment if x.id == 'SOP'] - eph = [x.id for x in c.segment if x.id == 'EPH'] + sop = [x.marker_id for x in c.segment if x.marker_id == 'SOP'] + eph = [x.marker_id for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(sop), 26472) self.assertEqual(len(eph), 0) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p1_06_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') @@ -3884,25 +3884,25 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[5].tnsot, 1) # PPT: packed packet headers, tile-part header - self.assertEqual(c.segment[6].id, 'PPT') + self.assertEqual(c.segment[6].marker_id, 'PPT') self.assertEqual(c.segment[6].zppt, 0) # scads of SOP, EPH segments # 16 SOD segments - sods = [x for x in c.segment if x.id == 'SOD'] + sods = [x for x in c.segment if x.marker_id == 'SOD'] self.assertEqual(len(sods), 16) # 16 PPT segments - ppts = [x for x in c.segment if x.id == 'PPT'] + ppts = [x for x in c.segment if x.marker_id == 'PPT'] self.assertEqual(len(ppts), 16) # 16 SOT segments - isots = [x.isot for x in c.segment if x.id == 'SOT'] + isots = [x.isot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(isots, list(range(16))) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_p1_07_dump(self): jfile = os.path.join(data_root, 'input/conformance/p1_07.j2k') @@ -3995,7 +3995,7 @@ class TestSuiteDump(unittest.TestCase): # scads of SOP, EPH segments # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_NR_file1_dump(self): jfile = os.path.join(data_root, 'input/conformance/file1.jp2') @@ -4573,18 +4573,18 @@ class TestSuiteDump(unittest.TestCase): self.assertEqual(c.segment[9].ptlm, (45274, 20838, 8909)) # 3 tiles, one for each component - idx = [x.isot for x in c.segment if x.id == 'SOT'] + idx = [x.isot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(idx, [0, 0, 0]) - lens = [x.psot for x in c.segment if x.id == 'SOT'] + lens = [x.psot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(lens, [45274, 20838, 8909]) - tpsot = [x.tpsot for x in c.segment if x.id == 'SOT'] + tpsot = [x.tpsot for x in c.segment if x.marker_id == 'SOT'] self.assertEqual(tpsot, [0, 1, 2]) - sods = [x for x in c.segment if x.id == 'SOD'] + sods = [x for x in c.segment if x.marker_id == 'SOD'] self.assertEqual(len(sods), 3) # EOC: end of codestream - self.assertEqual(c.segment[-1].id, 'EOC') + self.assertEqual(c.segment[-1].marker_id, 'EOC') def test_Bretagne2_j2k_dump(self): # Profile 3. @@ -4638,7 +4638,7 @@ class TestSuiteDump(unittest.TestCase): [(16, 16), (32, 32), (64, 64), (128, 128), (128, 128), (128, 128)]) - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] expected += ['SOT', 'COC', 'QCC', 'COC', 'QCC', 'SOD'] * 25 expected += ['EOC'] @@ -4693,7 +4693,7 @@ class TestSuiteDump(unittest.TestCase): glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'SOT', 'SOD', 'EOC'] self.assertEqual(ids, expected) @@ -4746,7 +4746,7 @@ class TestSuiteDump(unittest.TestCase): glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'SOT', 'SOD', 'EOC'] self.assertEqual(ids, expected) @@ -4759,7 +4759,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -4822,7 +4822,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -4893,7 +4893,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'CME'] self.assertEqual(ids, expected) @@ -4969,7 +4969,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -5030,7 +5030,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -5418,7 +5418,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -5479,7 +5479,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -5539,7 +5539,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -5608,7 +5608,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -5677,7 +5677,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -5739,7 +5739,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -5802,7 +5802,7 @@ class TestSuiteDump(unittest.TestCase): jp2k = Jp2k(jfile) c = jp2k.get_codestream() - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -5911,7 +5911,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'CME', 'COD', 'QCD', 'QCC', 'QCC'] self.assertEqual(ids, expected) @@ -6044,7 +6044,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'CME', 'COD', 'QCD', 'QCC', 'QCC'] self.assertEqual(ids, expected) @@ -6172,7 +6172,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -6325,7 +6325,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[4].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -6425,7 +6425,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[4].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME', 'CME'] self.assertEqual(ids, expected) @@ -6523,7 +6523,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[4].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -6626,7 +6626,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'CME'] self.assertEqual(ids, expected) @@ -6753,7 +6753,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[4].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -6867,7 +6867,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[4].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -6961,7 +6961,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD', 'POD'] self.assertEqual(ids, expected) @@ -7069,7 +7069,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -7168,7 +7168,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[3].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) @@ -7276,7 +7276,7 @@ class TestSuiteDump(unittest.TestCase): c = jp2.box[8].main_header - ids = [x.id for x in c.segment] + ids = [x.marker_id for x in c.segment] expected = ['SOC', 'SIZ', 'COD', 'QCD'] self.assertEqual(ids, expected) diff --git a/glymur/test/test_opj_suite_neg.py b/glymur/test/test_opj_suite_neg.py index 78d6154..b9294be 100644 --- a/glymur/test/test_opj_suite_neg.py +++ b/glymur/test/test_opj_suite_neg.py @@ -94,7 +94,7 @@ class TestSuiteNegative(unittest.TestCase): # Verify that the last segment returned in the codestream is SOD, # not EOC. Codestream parsing should stop when we try to jump to # the end of SOT. - self.assertEqual(c.segment[-1].id, 'SOD') + self.assertEqual(c.segment[-1].marker_id, 'SOD') @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") @@ -109,7 +109,7 @@ class TestSuiteNegative(unittest.TestCase): # Verify that the last segment returned in the codestream is SOD, # not EOC. Codestream parsing should stop when we try to jump to # the end of SOT. - self.assertEqual(c.segment[-1].id, 'SOD') + self.assertEqual(c.segment[-1].marker_id, 'SOD') @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") @@ -124,7 +124,7 @@ class TestSuiteNegative(unittest.TestCase): # Verify that the last segment returned in the codestream is SOD, # not EOC. Codestream parsing should stop when we try to jump to # the end of SOT. - self.assertEqual(c.segment[-1].id, 'SOD') + self.assertEqual(c.segment[-1].marker_id, 'SOD') def test_code_block_dimensions(self): # opj_compress doesn't allow the dimensions of a codeblock diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index 67183ae..4139faf 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -424,7 +424,7 @@ class TestSuiteWrite(unittest.TestCase): self.assertEqual(len(c.segment[2].spcod), 9) # 18 SOP segments. - nsops = [x.nsop for x in c.segment if x.id == 'SOP'] + nsops = [x.nsop for x in c.segment if x.marker_id == 'SOP'] self.assertEqual(nsops, list(range(18))) def test_NR_ENC_Bretagne2_ppm_7_encode(self): @@ -484,7 +484,7 @@ class TestSuiteWrite(unittest.TestCase): self.assertEqual(len(c.segment[2].spcod), 9) # 18 EPH segments. - ephs = [x for x in c.segment if x.id == 'EPH'] + ephs = [x for x in c.segment if x.marker_id == 'EPH'] self.assertEqual(len(ephs), 18) def test_NR_ENC_Bretagne2_ppm_8_encode(self): From 3888b7fb7746ff353daf6b4b3005129fcce4ad0b Mon Sep 17 00:00:00 2001 From: jevans Date: Sun, 7 Jul 2013 21:07:05 -0400 Subject: [PATCH 28/54] pylint work, #71 --- glymur/jp2box.py | 249 ++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 121 deletions(-) diff --git a/glymur/jp2box.py b/glymur/jp2box.py index e0107f3..5235aca 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -15,7 +15,6 @@ import collections import copy import datetime import math -import os import pprint import struct import sys @@ -89,8 +88,8 @@ class Jp2kBox(object): if start >= self.offset + self.length: break - buffer = f.read(8) - (L, T) = struct.unpack('>I4s', buffer) + read_buffer = f.read(8) + (L, T) = struct.unpack('>I4s', read_buffer) if sys.hexversion >= 0x03000000: T = T.decode('utf-8') @@ -101,15 +100,15 @@ class Jp2kBox(object): elif L == 1: # The length of the box is in the XL field, a 64-bit value. - buffer = f.read(8) - num_bytes, = struct.unpack('>Q', buffer) + read_buffer = f.read(8) + num_bytes, = struct.unpack('>Q', read_buffer) else: num_bytes = L # Call the proper parser for the given box with ID "T". try: - box = _box_with_id[T]._parse(f, T, start, num_bytes) + box = _BOX_WITH_ID[T]._parse(f, T, start, num_bytes) except KeyError: msg = 'Unrecognized box ({0}) encountered.'.format(T) warnings.warn(msg) @@ -219,12 +218,12 @@ class ColourSpecificationBox(Jp2kBox): f.write(struct.pack('>I', length)) f.write('colr'.encode()) - buffer = struct.pack('>BBBI', + read_buffer = struct.pack('>BBBI', self.method, self.precedence, self.approximation, self.colorspace) - f.write(buffer) + f.write(read_buffer) @staticmethod def _parse(f, id, offset, length): @@ -252,16 +251,16 @@ class ColourSpecificationBox(Jp2kBox): kwargs['offset'] = offset # Read the brand, minor version. - buffer = f.read(3) - (method, precedence, approximation) = struct.unpack('>BBB', buffer) + read_buffer = f.read(3) + (method, precedence, approximation) = struct.unpack('>BBB', read_buffer) kwargs['method'] = method kwargs['precedence'] = precedence kwargs['approximation'] = approximation if method == 1: # enumerated colour space - buffer = f.read(4) - kwargs['colorspace'], = struct.unpack('>I', buffer) + read_buffer = f.read(4) + kwargs['colorspace'], = struct.unpack('>I', read_buffer) kwargs['icc_profile'] = None else: @@ -323,8 +322,8 @@ class _ICCProfile(object): 2: 'saturation', 3: 'ICC-absolute colorimetric'} - def __init__(self, buffer): - self._raw_buffer = buffer + def __init__(self, read_buffer): + self._raw_buffer = read_buffer header = collections.OrderedDict() data = struct.unpack('>IIBB', self._raw_buffer[0:10]) @@ -342,26 +341,26 @@ class _ICCProfile(object): data = struct.unpack('>HHHHHH', self._raw_buffer[24:36]) header['Datetime'] = datetime.datetime(*data) - header['File Signature'] = buffer[36:40].decode('utf-8') - if buffer[40:44] == b'\x00\x00\x00\x00': + header['File Signature'] = read_buffer[36:40].decode('utf-8') + if read_buffer[40:44] == b'\x00\x00\x00\x00': header['Platform'] = 'unrecognized' else: - header['Platform'] = buffer[40:44].decode('utf-8') + header['Platform'] = read_buffer[40:44].decode('utf-8') - x, = struct.unpack('>I', buffer[44:48]) + x, = struct.unpack('>I', read_buffer[44:48]) y = 'embedded, ' if x & 0x01 else 'not embedded, ' y += 'cannot ' if x & 0x02 else 'can ' y += 'be used independently' header['Flags'] = y - header['Device Manufacturer'] = buffer[48:52].decode('utf-8') - if buffer[52:56] == b'\x00\x00\x00\x00': + header['Device Manufacturer'] = read_buffer[48:52].decode('utf-8') + if read_buffer[52:56] == b'\x00\x00\x00\x00': device_model = '' else: - device_model = buffer[52:56].decode('utf-8') + device_model = read_buffer[52:56].decode('utf-8') header['Device Model'] = device_model - x, = struct.unpack('>Q', buffer[56:64]) + x, = struct.unpack('>Q', read_buffer[56:64]) y = 'transparency, ' if x & 0x01 else 'reflective, ' y += 'matte, ' if x & 0x02 else 'glossy, ' y += 'negative ' if x & 0x04 else 'positive ' @@ -369,23 +368,23 @@ class _ICCProfile(object): y += 'black and white media' if x & 0x08 else 'color media' header['Device Attributes'] = y - x, = struct.unpack('>I', buffer[64:68]) + x, = struct.unpack('>I', read_buffer[64:68]) try: header['Rendering Intent'] = self.rendering_intent_dict[x] except KeyError: header['Rendering Intent'] = 'unknown' - data = struct.unpack('>iii', buffer[68:80]) + data = struct.unpack('>iii', read_buffer[68:80]) header['Illuminant'] = np.array(data, dtype=np.float64) / 65536 - if buffer[80:84] == b'\x00\x00\x00\x00': + if read_buffer[80:84] == b'\x00\x00\x00\x00': creator = 'unrecognized' else: - creator = buffer[80:84].decode('utf-8') + creator = read_buffer[80:84].decode('utf-8') header['Creator'] = creator if header['Version'][0] == '4': - header['Profile Id'] = buffer[84:100] + header['Profile Id'] = read_buffer[84:100] # Final 27 bytes are reserved. @@ -482,15 +481,15 @@ class ChannelDefinitionBox(Jp2kBox): kwargs['offset'] = offset # Read the number of components. - buffer = f.read(2) - N, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + N, = struct.unpack('>H', read_buffer) index = [] chan_type = [] association = [] - buffer = f.read(N * 6) - data = struct.unpack('>' + 'HHH' * N, buffer) + read_buffer = f.read(N * 6) + data = struct.unpack('>' + 'HHH' * N, read_buffer) index = data[0:N * 6:3] channel_type = data[1:N * 6:3] association = data[2:N * 6:3] @@ -563,8 +562,8 @@ class ComponentMappingBox(Jp2kBox): N = offset + length - f.tell() num_components = int(N/4) - buffer = f.read(N) - data = struct.unpack('>' + 'HBB' * num_components, buffer) + read_buffer = f.read(N) + data = struct.unpack('>' + 'HBB' * num_components, read_buffer) kwargs['component_index'] = data[0:N:num_components] kwargs['mapping_type'] = data[1:N:num_components] @@ -713,8 +712,8 @@ class FileTypeBox(Jp2kBox): kwargs['offset'] = offset # Read the brand, minor version. - buffer = f.read(8) - (brand, minor_version) = struct.unpack('>4sI', buffer) + read_buffer = f.read(8) + (brand, minor_version) = struct.unpack('>4sI', read_buffer) if sys.hexversion < 0x030000: kwargs['brand'] = brand else: @@ -724,10 +723,10 @@ class FileTypeBox(Jp2kBox): # Read the compatibility list. Each entry has 4 bytes. current_pos = f.tell() n = (offset + length - current_pos) / 4 - buffer = f.read(int(n) * 4) + read_buffer = f.read(int(n) * 4) compatibility_list = [] for j in range(int(n)): - CL, = struct.unpack('>4s', buffer[4*j:4*(j+1)]) + CL, = struct.unpack('>4s', read_buffer[4*j:4*(j+1)]) if sys.hexversion >= 0x03000000: CL = CL.decode('utf-8') compatibility_list.append(CL) @@ -812,7 +811,7 @@ class ImageHeaderBox(Jp2kBox): # signedness and bps are stored together in a single byte bit_depth_signedness = 0x80 if self.signed else 0x00 bit_depth_signedness |= self.bits_per_component - 1 - buffer = struct.pack('>IIHBBBB', + read_buffer = struct.pack('>IIHBBBB', self.height, self.width, self.num_components, @@ -820,7 +819,7 @@ class ImageHeaderBox(Jp2kBox): self.compression, 1 if self.colorspace_unknown else 0, 1 if self.ip_provided else 0) - f.write(buffer) + f.write(read_buffer) @staticmethod def _parse(f, id, offset, length): @@ -846,8 +845,8 @@ class ImageHeaderBox(Jp2kBox): kwargs['offset'] = offset # Read the box information - buffer = f.read(14) - params = struct.unpack('>IIHBBBB', buffer) + read_buffer = f.read(14) + params = struct.unpack('>IIHBBBB', read_buffer) height = params[0] width = params[1] kwargs['num_components'] = params[2] @@ -1063,8 +1062,8 @@ class JPEG2000SignatureBox(Jp2kBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(4) - kwargs['signature'] = struct.unpack('>BBBB', buffer) + read_buffer = f.read(4) + kwargs['signature'] = struct.unpack('>BBBB', read_buffer) box = JPEG2000SignatureBox(**kwargs) return box @@ -1121,12 +1120,12 @@ class PaletteBox(Jp2kBox): kwargs['offset'] = offset # Get the size of the palette. - buffer = f.read(3) - (NE, NC) = struct.unpack('>HB', buffer) + read_buffer = f.read(3) + (NE, NC) = struct.unpack('>HB', read_buffer) # Need to determine bps and signed or not - buffer = f.read(NC) - data = struct.unpack('>' + 'B' * NC, buffer) + read_buffer = f.read(NC) + data = struct.unpack('>' + 'B' * NC, read_buffer) bps = [((x & 0x07f) + 1) for x in data] signed = [((x & 0x80) > 1) for x in data] kwargs['bits_per_component'] = bps @@ -1158,10 +1157,10 @@ class PaletteBox(Jp2kBox): msg = 'Unsupported palette bitdepth (%d).' raise IOError(msg) n = NE * bytes_per_row - buffer = f.read(n) + read_buffer = f.read(n) for j in range(NE): - row_buffer = buffer[(bytes_per_row * j):(bytes_per_row * (j + 1))] + row_buffer = read_buffer[(bytes_per_row * j):(bytes_per_row * (j + 1))] row = struct.unpack(fmt, row_buffer) for k in range(NC): palette[k][j] = row[k] @@ -1246,8 +1245,8 @@ class ReaderRequirementsBox(Jp2kBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(1) - mask_length, = struct.unpack('>B', buffer) + read_buffer = f.read(1) + mask_length, = struct.unpack('>B', read_buffer) if mask_length == 1: mask_format = 'B' elif mask_length == 2: @@ -1261,35 +1260,35 @@ class ReaderRequirementsBox(Jp2kBox): # Fully Understands Aspect Mask # Decodes Completely Mask - buffer = f.read(2 * mask_length) - data = struct.unpack('>' + mask_format * 2, buffer) + read_buffer = f.read(2 * mask_length) + data = struct.unpack('>' + mask_format * 2, read_buffer) kwargs['FUAM'] = data[0] kwargs['DCM'] = data[1] - buffer = f.read(2) - num_standard_flags, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + num_standard_flags, = struct.unpack('>H', read_buffer) # Read in standard flags and standard masks. Each standard flag should # be two bytes, but the standard mask flag is as long as specified by # the mask length. - buffer = f.read(num_standard_flags * (2 + mask_length)) + read_buffer = f.read(num_standard_flags * (2 + mask_length)) data = struct.unpack('>' + ('H' + mask_format) * num_standard_flags, - buffer) + read_buffer) kwargs['standard_flag'] = data[0:num_standard_flags * 2:2] kwargs['standard_mask'] = data[1:num_standard_flags * 2:2] # Vendor features - buffer = f.read(2) - num_vendor_features, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + num_vendor_features, = struct.unpack('>H', read_buffer) # Each vendor feature consists of a 16-byte UUID plus a mask whose # length is specified by, you guessed it, "mask_length". entry_length = 16 + mask_length - buffer = f.read(num_vendor_features * entry_length) + read_buffer = f.read(num_vendor_features * entry_length) vendor_feature = [] vendor_mask = [] for j in range(num_vendor_features): - ubuffer = buffer[j * entry_length:(j + 1) * entry_length] + ubuffer = read_buffer[j * entry_length:(j + 1) * entry_length] vendor_feature.append(uuid.UUID(bytes=ubuffer[0:16])) vm = struct.unpack('>' + mask_format, ubuffer[16:]) @@ -1417,8 +1416,8 @@ class CaptureResolutionBox(ResolutionBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(10) - (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', buffer) + read_buffer = f.read(10) + (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', read_buffer) kwargs['VR'] = RN1 / RD1 * math.pow(10, RE1) kwargs['HR'] = RN2 / RD2 * math.pow(10, RE2) @@ -1478,8 +1477,8 @@ class DisplayResolutionBox(ResolutionBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(10) - (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', buffer) + read_buffer = f.read(10) + (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', read_buffer) kwargs['VR'] = RN1 / RD1 * math.pow(10, RE1) kwargs['HR'] = RN2 / RD2 * math.pow(10, RE2) @@ -1538,8 +1537,8 @@ class LabelBox(Jp2kBox): kwargs['offset'] = offset num_bytes = offset + length - f.tell() - buffer = f.read(num_bytes) - kwargs['label'] = buffer.decode('utf-8') + read_buffer = f.read(num_bytes) + kwargs['label'] = read_buffer.decode('utf-8') box = LabelBox(**kwargs) return box @@ -1596,13 +1595,13 @@ class XMLBox(Jp2kBox): """Write an XML box to file. """ try: - buffer = ET.tostring(self.xml, encoding='utf-8') + read_buffer = ET.tostring(self.xml, encoding='utf-8') except AttributeError: - buffer = ET.tostring(self.xml.getroot(), encoding='utf-8') + read_buffer = ET.tostring(self.xml.getroot(), encoding='utf-8') - f.write(struct.pack('>I', len(buffer) + 8)) + f.write(struct.pack('>I', len(read_buffer) + 8)) f.write(self.id.encode()) - f.write(buffer) + f.write(read_buffer) @staticmethod def _parse(f, id, offset, length): @@ -1629,8 +1628,8 @@ class XMLBox(Jp2kBox): kwargs['offset'] = offset num_bytes = offset + length - f.tell() - buffer = f.read(num_bytes) - text = buffer.decode('utf-8') + read_buffer = f.read(num_bytes) + text = read_buffer.decode('utf-8') # Strip out any trailing nulls. text = text.rstrip('\0') @@ -1692,13 +1691,13 @@ class UUIDListBox(Jp2kBox): ------- kwargs : dictionary of parameter values """ - buffer = f.read(2) - N, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + N, = struct.unpack('>H', read_buffer) ulst = [] for j in range(N): - buffer = f.read(16) - ulst.append(uuid.UUID(bytes=buffer)) + read_buffer = f.read(16) + ulst.append(uuid.UUID(bytes=read_buffer)) kwargs = {} kwargs['id'] = id @@ -1835,14 +1834,14 @@ class DataEntryURLBox(Jp2kBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(4) - data = struct.unpack('>BBBB', buffer) + read_buffer = f.read(4) + data = struct.unpack('>BBBB', read_buffer) kwargs['version'] = data[0] kwargs['flag'] = data[1:4] n = offset + length - f.tell() - buffer = f.read(n) - kwargs['URL'] = buffer.decode('utf-8') + read_buffer = f.read(n) + kwargs['URL'] = read_buffer.decode('utf-8') box = DataEntryURLBox(**kwargs) return box @@ -1902,12 +1901,12 @@ class UUIDBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, id, offset, length): """Parse JPEG 2000 signature box. Parameters ---------- - f : file + fptr : file Open file object. id : str 4-byte unique identifier for this box. @@ -1924,30 +1923,30 @@ class UUIDBox(Jp2kBox): kwargs['length'] = length kwargs['offset'] = offset - buffer = f.read(16) - kwargs['uuid'] = uuid.UUID(bytes=buffer) + read_buffer = fptr.read(16) + kwargs['uuid'] = uuid.UUID(bytes=read_buffer) - n = offset + length - f.tell() - buffer = f.read(n) + n = offset + length - fptr.tell() + read_buffer = fptr.read(n) if kwargs['uuid'] == uuid.UUID('be7acfcb-97a9-42e8-9c71-999491e3afac'): # XMP data. Parse as XML. Seems to be a difference between # ElementTree in version 2.7 and 3.3. if sys.hexversion < 0x03000000: parser = ET.XMLParser(encoding='utf-8') - kwargs['data'] = ET.fromstringlist(buffer, parser=parser) + kwargs['data'] = ET.fromstringlist(read_buffer, parser=parser) else: - text = buffer.decode('utf-8') + text = read_buffer.decode('utf-8') kwargs['data'] = ET.fromstring(text) elif kwargs['uuid'].bytes == b'JpgTiffExif->JP2': - e = Exif(buffer) - d = collections.OrderedDict() - d['Image'] = e.exif_image - d['Photo'] = e.exif_photo - d['GPSInfo'] = e.exif_gpsinfo - d['Iop'] = e.exif_iop - kwargs['data'] = d + exif_obj = Exif(read_buffer) + ifds = collections.OrderedDict() + ifds['Image'] = exif_obj.exif_image + ifds['Photo'] = exif_obj.exif_photo + ifds['GPSInfo'] = exif_obj.exif_gpsinfo + ifds['Iop'] = exif_obj.exif_iop + kwargs['data'] = ifds else: - kwargs['data'] = buffer + kwargs['data'] = read_buffer box = UUIDBox(**kwargs) return box @@ -1956,13 +1955,13 @@ class Exif(object): """ Attributes ---------- - buffer : bytes + read_buffer : bytes Raw byte stream consisting of the UUID data. endian : str Either '<' for big-endian, or '>' for little-endian. """ - def __init__(self, buffer): + def __init__(self, read_buffer): """Interpret raw buffer consisting of Exif IFD. """ self.exif_image = None @@ -1970,11 +1969,11 @@ class Exif(object): self.exif_gpsinfo = None self.exif_iop = None - self.buffer = buffer + self.read_buffer = read_buffer # Ignore the first six bytes. # Next 8 should be (73, 73, 42, 8) - data = struct.unpack(' Date: Mon, 8 Jul 2013 06:44:48 -0400 Subject: [PATCH 29/54] pylint work, got rid of "import *", #71 --- glymur/jp2box.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/glymur/jp2box.py b/glymur/jp2box.py index 5235aca..c00577f 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -11,6 +11,8 @@ References Extensions """ +# pylint: disable=R0903 + import collections import copy import datetime @@ -30,7 +32,7 @@ from .core import _colorspace_map_display from .core import _color_type_map_display from .core import _method_display from .core import _reader_requirements_display -from .core import * +from .core import ENUMERATED_COLORSPACE class Jp2kBox(object): From 277be2fb38186112b1c13078163c8ec7d4b6f3ef Mon Sep 17 00:00:00 2001 From: John Evans Date: Mon, 8 Jul 2013 11:06:47 -0400 Subject: [PATCH 30/54] UUIDListBox, UUIDBox, DataEntryBox pylint work, #71 --- glymur/jp2box.py | 162 ++++++++++++++++++++------------------- glymur/test/test_jp2k.py | 2 +- 2 files changed, 86 insertions(+), 78 deletions(-) diff --git a/glymur/jp2box.py b/glymur/jp2box.py index c00577f..6a76626 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -11,7 +11,7 @@ References Extensions """ -# pylint: disable=R0903 +# pylint: disable=C0302,R0903,R0913 import collections import copy @@ -33,6 +33,7 @@ from .core import _color_type_map_display from .core import _method_display from .core import _reader_requirements_display from .core import ENUMERATED_COLORSPACE +from .core import ENUMERATED_COLORSPACE class Jp2kBox(object): @@ -1664,9 +1665,11 @@ class UUIDListBox(Jp2kBox): ulst : list List of UUIDs. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='UUID List') - self.__dict__.update(**kwargs) + def __init__(self, ulst, length, offset): + Jp2kBox.__init__(self, id='ulst', longname='UUID List') + self.ulst = ulst + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1675,7 +1678,7 @@ class UUIDListBox(Jp2kBox): return(msg) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, id, offset, length): """Parse UUIDList box. Parameters @@ -1693,20 +1696,15 @@ class UUIDListBox(Jp2kBox): ------- kwargs : dictionary of parameter values """ - read_buffer = f.read(2) - N, = struct.unpack('>H', read_buffer) + read_buffer = fptr.read(2) + num_uuids, = struct.unpack('>H', read_buffer) ulst = [] - for j in range(N): - read_buffer = f.read(16) + for _ in range(num_uuids): + read_buffer = fptr.read(16) ulst.append(uuid.UUID(bytes=read_buffer)) - kwargs = {} - kwargs['id'] = id - kwargs['offset'] = offset - kwargs['length'] = length - kwargs['ulst'] = ulst - box = UUIDListBox(**kwargs) + box = UUIDListBox(ulst, length, offset) return(box) @@ -1726,9 +1724,11 @@ class UUIDInfoBox(Jp2kBox): box : list List of boxes contained in this superbox. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='UUIDInfo') - self.__dict__.update(**kwargs) + def __init__(self, length, offset): + Jp2kBox.__init__(self, id='uinf', longname='UUIDInfo') + self.length = length + self.offset = offset + self.box = [] def __str__(self): msg = Jp2kBox.__str__(self) @@ -1743,12 +1743,12 @@ class UUIDInfoBox(Jp2kBox): return(msg) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, id, offset, length): """Parse UUIDInfo super box. Parameters ---------- - f : file + fptr : file Open file object. id : byte 4-byte unique identifier for this box. @@ -1761,16 +1761,12 @@ class UUIDInfoBox(Jp2kBox): ------- kwargs : dictionary of parameter values """ - kwargs = {} - kwargs['id'] = id - kwargs['length'] = length - kwargs['offset'] = offset - box = UUIDInfoBox(**kwargs) + box = UUIDInfoBox(length, offset) # The UUIDInfo box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(f) + box.box = box._parse_superbox(fptr) return box @@ -1795,9 +1791,13 @@ class DataEntryURLBox(Jp2kBox): URL : str Associated URL. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Data Entry URL') - self.__dict__.update(**kwargs) + def __init__(self, version, flag, url, length, offset): + Jp2kBox.__init__(self, id='url ', longname='Data Entry URL') + self.version = version + self.flag = flag + self.url = url + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1809,16 +1809,16 @@ class DataEntryURLBox(Jp2kBox): msg += '\n '.join(lines) msg = msg.format(self.version, self.flag[0], self.flag[1], self.flag[2], - self.URL) + self.url) return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, id, offset, length): """Parse Data Entry URL box. Parameters ---------- - f : file + fptr : file Open file object. id : byte 4-byte unique identifier for this box. @@ -1831,20 +1831,15 @@ class DataEntryURLBox(Jp2kBox): ------- kwargs : dictionary of parameter values """ - kwargs = {} - kwargs['id'] = id - kwargs['length'] = length - kwargs['offset'] = offset - - read_buffer = f.read(4) + read_buffer = fptr.read(4) data = struct.unpack('>BBBB', read_buffer) - kwargs['version'] = data[0] - kwargs['flag'] = data[1:4] + version = data[0] + flag = data[1:4] - n = offset + length - f.tell() - read_buffer = f.read(n) - kwargs['URL'] = read_buffer.decode('utf-8') - box = DataEntryURLBox(**kwargs) + numbytes = offset + length - fptr.tell() + read_buffer = fptr.read(numbytes) + url = read_buffer.decode('utf-8') + box = DataEntryURLBox(version, flag, url, length, offset) return box @@ -1873,9 +1868,44 @@ class UUIDBox(Jp2kBox): 16684-1:2012 - Graphic technology -- Extensible metadata platform (XMP) specification -- Part 1: Data model, serialization and core properties """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='UUID') - self.__dict__.update(**kwargs) + def __init__(self, the_uuid, raw_data, length, offset): + """ + Parameters + ---------- + the_uuid : uuid.UUID + Identifies the type of UUID box. + raw_data : + This is the "payload" of data for the specified UUID. + length : int + length of the box in bytes. + offset : int + offset of the box from the start of the file. + """ + Jp2kBox.__init__(self, id='uuid', longname='UUID') + self.uuid = the_uuid + + if the_uuid == uuid.UUID('be7acfcb-97a9-42e8-9c71-999491e3afac'): + # XMP data. Parse as XML. Seems to be a difference between + # ElementTree in version 2.7 and 3.3. + if sys.hexversion < 0x03000000: + parser = ET.XMLParser(encoding='utf-8') + self.data = ET.fromstringlist(raw_data, parser=parser) + else: + text = raw_data.decode('utf-8') + self.data = ET.fromstring(text) + elif the_uuid.bytes == b'JpgTiffExif->JP2': + exif_obj = Exif(raw_data) + ifds = collections.OrderedDict() + ifds['Image'] = exif_obj.exif_image + ifds['Photo'] = exif_obj.exif_photo + ifds['GPSInfo'] = exif_obj.exif_gpsinfo + ifds['Iop'] = exif_obj.exif_iop + self.data = ifds + else: + self.data = raw_data + + self.length = length + self.offset = offset def __str__(self): msg = '{0}\n' @@ -1889,8 +1919,9 @@ class UUIDBox(Jp2kBox): uuid_type = ' (Exif)' # 2.7 has trouble pretty-printing ordered dicts, so print them # as regular dicts. Not ideal, but at least it's good on 3.3+. - x = self.data if sys.hexversion >= 0x03000000 else dict(self.data) - uuid_data = '\n' + pprint.pformat(x) + if sys.hexversion < 0x03000000: + data = dict(self.data) + uuid_data = '\n' + pprint.pformat(data) else: uuid_type = '' uuid_data = '{0} bytes'.format(len(self.data)) @@ -1904,7 +1935,7 @@ class UUIDBox(Jp2kBox): @staticmethod def _parse(fptr, id, offset, length): - """Parse JPEG 2000 signature box. + """Parse UUID box. Parameters ---------- @@ -1920,36 +1951,13 @@ class UUIDBox(Jp2kBox): Returns: kwargs: dictionary of parameter values """ - kwargs = {} - kwargs['id'] = id - kwargs['length'] = length - kwargs['offset'] = offset read_buffer = fptr.read(16) - kwargs['uuid'] = uuid.UUID(bytes=read_buffer) + the_uuid = uuid.UUID(bytes=read_buffer) - n = offset + length - fptr.tell() - read_buffer = fptr.read(n) - if kwargs['uuid'] == uuid.UUID('be7acfcb-97a9-42e8-9c71-999491e3afac'): - # XMP data. Parse as XML. Seems to be a difference between - # ElementTree in version 2.7 and 3.3. - if sys.hexversion < 0x03000000: - parser = ET.XMLParser(encoding='utf-8') - kwargs['data'] = ET.fromstringlist(read_buffer, parser=parser) - else: - text = read_buffer.decode('utf-8') - kwargs['data'] = ET.fromstring(text) - elif kwargs['uuid'].bytes == b'JpgTiffExif->JP2': - exif_obj = Exif(read_buffer) - ifds = collections.OrderedDict() - ifds['Image'] = exif_obj.exif_image - ifds['Photo'] = exif_obj.exif_photo - ifds['GPSInfo'] = exif_obj.exif_gpsinfo - ifds['Iop'] = exif_obj.exif_iop - kwargs['data'] = ifds - else: - kwargs['data'] = read_buffer - box = UUIDBox(**kwargs) + numbytes = offset + length - fptr.tell() + read_buffer = fptr.read(numbytes) + box = UUIDBox(the_uuid, read_buffer, length, offset) return box diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index e20ab50..1938bfe 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -495,7 +495,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[3].box[1].length, 16) self.assertEqual(jp2k.box[3].box[1].version, 0) self.assertEqual(jp2k.box[3].box[1].flag, (0, 0, 0)) - self.assertEqual(jp2k.box[3].box[1].URL, 'abcd') + self.assertEqual(jp2k.box[3].box[1].url, 'abcd') def test_xml_box_with_trailing_nulls(self): # ElementTree does not like trailing null chars after valid XML From 1d4c9817971aa2497f84e77f59f8cde3720b966c Mon Sep 17 00:00:00 2001 From: John Evans Date: Mon, 8 Jul 2013 16:31:36 -0400 Subject: [PATCH 31/54] pylint work, changed f to fptr, stopped passing id around. #71 --- glymur/jp2box.py | 316 +++++++++++++++++++---------------------------- 1 file changed, 128 insertions(+), 188 deletions(-) diff --git a/glymur/jp2box.py b/glymur/jp2box.py index 6a76626..01e8245 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -62,18 +62,18 @@ class Jp2kBox(object): msg += " @ ({0}, {1})".format(self.offset, self.length) return msg - def _write(self, f): + def _write(self, fptr): """Must be implemented in a subclass. """ msg = "Not supported for {0} box.".format(self.longname) raise NotImplementedError(msg) - def _parse_superbox(self, f): + def _parse_superbox(self, fptr): """Parse a superbox (box consisting of nothing but other boxes. Parameters ---------- - f : file + fptr : file Open file object. Returns @@ -83,7 +83,7 @@ class Jp2kBox(object): superbox = [] - start = f.tell() + start = fptr.tell() while True: @@ -91,7 +91,7 @@ class Jp2kBox(object): if start >= self.offset + self.length: break - read_buffer = f.read(8) + read_buffer = fptr.read(8) (L, T) = struct.unpack('>I4s', read_buffer) if sys.hexversion >= 0x03000000: T = T.decode('utf-8') @@ -99,11 +99,11 @@ class Jp2kBox(object): if L == 0: # The length of the box is presumed to last until the end of # the file. Compute the effective length of the box. - num_bytes = self._file_size - f.tell() + 8 + num_bytes = self._file_size - fptr.tell() + 8 elif L == 1: # The length of the box is in the XL field, a 64-bit value. - read_buffer = f.read(8) + read_buffer = fptr.read(8) num_bytes, = struct.unpack('>Q', read_buffer) else: @@ -111,7 +111,7 @@ class Jp2kBox(object): # Call the proper parser for the given box with ID "T". try: - box = _BOX_WITH_ID[T]._parse(f, T, start, num_bytes) + box = _BOX_WITH_ID[T]._parse(fptr, start, num_bytes) except KeyError: msg = 'Unrecognized box ({0}) encountered.'.format(T) warnings.warn(msg) @@ -127,14 +127,14 @@ class Jp2kBox(object): msg = '{0} box has incorrect box length ({1})' msg = msg.format(T, num_bytes) warnings.warn(msg) - elif f.tell() > start + num_bytes: + elif fptr.tell() > start + num_bytes: # The box must be invalid somehow, as the file pointer is # positioned past the end of the box. msg = '{0} box may be invalid, the file pointer is positioned ' msg += '{1} bytes past the end of the box.' - msg = msg.format(T, f.tell() - (start + num_bytes)) + msg = msg.format(T, fptr.tell() - (start + num_bytes)) warnings.warn(msg) - f.seek(start + num_bytes) + fptr.seek(start + num_bytes) start += num_bytes @@ -210,7 +210,7 @@ class ColourSpecificationBox(Jp2kBox): return msg - def _write(self, f): + def _write(self, fptr): """Write an Colour Specification box to file. """ if self.colorspace is None: @@ -218,26 +218,24 @@ class ColourSpecificationBox(Jp2kBox): msg += "colorspaces is not supported at this time." raise NotImplementedError(msg) length = 15 if self.icc_profile is None else 11 + len(self.icc_profile) - f.write(struct.pack('>I', length)) - f.write('colr'.encode()) + fptr.write(struct.pack('>I', length)) + fptr.write('colr'.encode()) read_buffer = struct.pack('>BBBI', self.method, self.precedence, self.approximation, self.colorspace) - f.write(read_buffer) + fptr.write(read_buffer) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse JPEG 2000 color specification box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -249,12 +247,11 @@ class ColourSpecificationBox(Jp2kBox): dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset # Read the brand, minor version. - read_buffer = f.read(3) + read_buffer = fptr.read(3) (method, precedence, approximation) = struct.unpack('>BBB', read_buffer) kwargs['method'] = method kwargs['precedence'] = precedence @@ -262,21 +259,21 @@ class ColourSpecificationBox(Jp2kBox): if method == 1: # enumerated colour space - read_buffer = f.read(4) + read_buffer = fptr.read(4) kwargs['colorspace'], = struct.unpack('>I', read_buffer) kwargs['icc_profile'] = None else: # ICC profile kwargs['colorspace'] = None - n = offset + length - f.tell() + n = offset + length - fptr.tell() if n < 128: msg = "ICC profile header is corrupt, length is " msg += "only {0} instead of 128." warnings.warn(msg.format(n), UserWarning) kwargs['icc_profile'] = None else: - icc_profile = _ICCProfile(f.read(n)) + icc_profile = _ICCProfile(fptr.read(n)) kwargs['icc_profile'] = icc_profile.header box = ColourSpecificationBox(**kwargs) @@ -446,29 +443,27 @@ class ChannelDefinitionBox(Jp2kBox): msg = msg.format(self.index[j], color_type_string, assn) return msg - def _write(self, f): + def _write(self, fptr): """Write a channel definition box to file. """ N = len(self.association) - f.write(struct.pack('>I', 8 + 2 + N * 6)) - f.write('cdef'.encode('utf-8')) - f.write(struct.pack('>H', N)) + fptr.write(struct.pack('>I', 8 + 2 + N * 6)) + fptr.write('cdef'.encode('utf-8')) + fptr.write(struct.pack('>H', N)) for j in range(N): - f.write(struct.pack('>' + 'H' * 3, + fptr.write(struct.pack('>' + 'H' * 3, self.index[j], self.channel_type[j], self.association[j])) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse component definition box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -479,19 +474,14 @@ class ChannelDefinitionBox(Jp2kBox): kwargs : dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset # Read the number of components. - read_buffer = f.read(2) + read_buffer = fptr.read(2) N, = struct.unpack('>H', read_buffer) - index = [] - chan_type = [] - association = [] - - read_buffer = f.read(N * 6) + read_buffer = fptr.read(N * 6) data = struct.unpack('>' + 'HHH' * N, read_buffer) index = data[0:N * 6:3] channel_type = data[1:N * 6:3] @@ -522,7 +512,7 @@ class ComponentMappingBox(Jp2kBox): Index component from palette """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Component Mapping') + Jp2kBox.__init__(self, id='cmap', longname='Component Mapping') self.__dict__.update(**kwargs) def __str__(self): @@ -539,15 +529,13 @@ class ComponentMappingBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse component mapping box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -558,14 +546,13 @@ class ComponentMappingBox(Jp2kBox): kwargs : dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - N = offset + length - f.tell() + N = offset + length - fptr.tell() num_components = int(N/4) - read_buffer = f.read(N) + read_buffer = fptr.read(N) data = struct.unpack('>' + 'HBB' * num_components, read_buffer) kwargs['component_index'] = data[0:N:num_components] @@ -610,15 +597,13 @@ class ContiguousCodestreamBox(Jp2kBox): return msg @staticmethod - def _parse(f, id='jp2c', offset=0, length=0): + def _parse(fptr, offset=0, length=0): """Parse a codestream box. Parameters ---------- f : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -629,11 +614,10 @@ class ContiguousCodestreamBox(Jp2kBox): kwargs : dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - kwargs['main_header'] = Codestream(f, header_only=True) + kwargs['main_header'] = Codestream(fptr, header_only=True) box = ContiguousCodestreamBox(**kwargs) return box @@ -679,28 +663,26 @@ class FileTypeBox(Jp2kBox): return msg - def _write(self, f): + def _write(self, fptr): """Write a File Type box to file. """ length = 16 + 4*len(self.compatibility_list) - f.write(struct.pack('>I', length)) - f.write('ftyp'.encode()) - f.write(self.brand.encode()) - f.write(struct.pack('>I', self.minor_version)) + fptr.write(struct.pack('>I', length)) + fptr.write('ftyp'.encode()) + fptr.write(self.brand.encode()) + fptr.write(struct.pack('>I', self.minor_version)) for item in self.compatibility_list: - f.write(item.encode()) + fptr.write(item.encode()) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse JPEG 2000 file type box. Parameters ---------- f : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -710,12 +692,11 @@ class FileTypeBox(Jp2kBox): kwargs: dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset # Read the brand, minor version. - read_buffer = f.read(8) + read_buffer = fptr.read(8) (brand, minor_version) = struct.unpack('>4sI', read_buffer) if sys.hexversion < 0x030000: kwargs['brand'] = brand @@ -724,9 +705,9 @@ class FileTypeBox(Jp2kBox): kwargs['minor_version'] = minor_version # Read the compatibility list. Each entry has 4 bytes. - current_pos = f.tell() + current_pos = fptr.tell() n = (offset + length - current_pos) / 4 - read_buffer = f.read(int(n) * 4) + read_buffer = fptr.read(int(n) * 4) compatibility_list = [] for j in range(int(n)): CL, = struct.unpack('>4s', read_buffer[4*j:4*(j+1)]) @@ -805,11 +786,11 @@ class ImageHeaderBox(Jp2kBox): self.colorspace_unknown) return msg - def _write(self, f): + def _write(self, fptr): """Write an Image Header box to file. """ - f.write(struct.pack('>I', 22)) - f.write('ihdr'.encode()) + fptr.write(struct.pack('>I', 22)) + fptr.write('ihdr'.encode()) # signedness and bps are stored together in a single byte bit_depth_signedness = 0x80 if self.signed else 0x00 @@ -822,18 +803,16 @@ class ImageHeaderBox(Jp2kBox): self.compression, 1 if self.colorspace_unknown else 0, 1 if self.ip_provided else 0) - f.write(read_buffer) + fptr.write(read_buffer) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse JPEG 2000 image header box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -843,12 +822,11 @@ class ImageHeaderBox(Jp2kBox): kwargs: dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset # Read the box information - read_buffer = f.read(14) + read_buffer = fptr.read(14) params = struct.unpack('>IIHBBBB', read_buffer) height = params[0] width = params[1] @@ -880,7 +858,7 @@ class AssociationBox(Jp2kBox): List of boxes contained in this superbox. """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Association') + Jp2kBox.__init__(self, id='asoc', longname='Association') self.__dict__.update(**kwargs) def __str__(self): @@ -894,15 +872,13 @@ class AssociationBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse association box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -914,15 +890,14 @@ class AssociationBox(Jp2kBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset box = AssociationBox(**kwargs) - # The JP2 header box is a superbox, so go ahead and parse its child + # The Association box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(f) + box.box = box._parse_superbox(fptr) return box @@ -957,31 +932,29 @@ class JP2HeaderBox(Jp2kBox): msg += ''.join(strs) return msg - def _write(self, f): + def _write(self, fptr): """Write a JP2 Header box to file. """ # Write the contained boxes, then come back and write the length. - orig_pos = f.tell() - f.write(struct.pack('>I', 0)) - f.write('jp2h'.encode()) + orig_pos = fptr.tell() + fptr.write(struct.pack('>I', 0)) + fptr.write('jp2h'.encode()) for box in self.box: - box._write(f) + box._write(fptr) - end_pos = f.tell() - f.seek(orig_pos) - f.write(struct.pack('>I', end_pos - orig_pos)) - f.seek(end_pos) + end_pos = fptr.tell() + fptr.seek(orig_pos) + fptr.write(struct.pack('>I', end_pos - orig_pos)) + fptr.seek(end_pos) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse JPEG 2000 header box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -993,7 +966,6 @@ class JP2HeaderBox(Jp2kBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset @@ -1001,7 +973,7 @@ class JP2HeaderBox(Jp2kBox): # The JP2 header box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(f) + box.box = box._parse_superbox(fptr) return box @@ -1034,23 +1006,21 @@ class JPEG2000SignatureBox(Jp2kBox): msg = msg.format(*self.signature) return msg - def _write(self, f): + def _write(self, fptr): """Write a JPEG 2000 Signature box to file. """ - f.write(struct.pack('>I', 12)) - f.write(self.id.encode()) - f.write(struct.pack('>BBBB', *self.signature)) + fptr.write(struct.pack('>I', 12)) + fptr.write(self.id.encode()) + fptr.write(struct.pack('>BBBB', *self.signature)) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse JPEG 2000 signature box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1061,11 +1031,10 @@ class JPEG2000SignatureBox(Jp2kBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - read_buffer = f.read(4) + read_buffer = fptr.read(4) kwargs['signature'] = struct.unpack('>BBBB', read_buffer) box = JPEG2000SignatureBox(**kwargs) @@ -1089,7 +1058,7 @@ class PaletteBox(Jp2kBox): Colormap represented as list of 1D arrays, one per color component. """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Palette') + Jp2kBox.__init__(self, id='pclr', longname='Palette') self.__dict__.update(**kwargs) def __str__(self): @@ -1099,15 +1068,13 @@ class PaletteBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse palette box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1118,16 +1085,15 @@ class PaletteBox(Jp2kBox): kwargs: dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset # Get the size of the palette. - read_buffer = f.read(3) + read_buffer = fptr.read(3) (NE, NC) = struct.unpack('>HB', read_buffer) # Need to determine bps and signed or not - read_buffer = f.read(NC) + read_buffer = fptr.read(NC) data = struct.unpack('>' + 'B' * NC, read_buffer) bps = [((x & 0x07f) + 1) for x in data] signed = [((x & 0x80) > 1) for x in data] @@ -1160,7 +1126,7 @@ class PaletteBox(Jp2kBox): msg = 'Unsupported palette bitdepth (%d).' raise IOError(msg) n = NE * bytes_per_row - read_buffer = f.read(n) + read_buffer = fptr.read(n) for j in range(NE): row_buffer = read_buffer[(bytes_per_row * j):(bytes_per_row * (j + 1))] @@ -1202,7 +1168,7 @@ class ReaderRequirementsBox(Jp2kBox): feature. """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Reader Requirements') + Jp2kBox.__init__(self, id='rreq', longname='Reader Requirements') self.__dict__.update(**kwargs) def __str__(self): @@ -1225,15 +1191,13 @@ class ReaderRequirementsBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse reader requirements box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1244,11 +1208,10 @@ class ReaderRequirementsBox(Jp2kBox): ReaderRequirementsBox. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - read_buffer = f.read(1) + read_buffer = fptr.read(1) mask_length, = struct.unpack('>B', read_buffer) if mask_length == 1: mask_format = 'B' @@ -1263,31 +1226,31 @@ class ReaderRequirementsBox(Jp2kBox): # Fully Understands Aspect Mask # Decodes Completely Mask - read_buffer = f.read(2 * mask_length) + read_buffer = fptr.read(2 * mask_length) data = struct.unpack('>' + mask_format * 2, read_buffer) kwargs['FUAM'] = data[0] kwargs['DCM'] = data[1] - read_buffer = f.read(2) + read_buffer = fptr.read(2) num_standard_flags, = struct.unpack('>H', read_buffer) # Read in standard flags and standard masks. Each standard flag should # be two bytes, but the standard mask flag is as long as specified by # the mask length. - read_buffer = f.read(num_standard_flags * (2 + mask_length)) + read_buffer = fptr.read(num_standard_flags * (2 + mask_length)) data = struct.unpack('>' + ('H' + mask_format) * num_standard_flags, read_buffer) kwargs['standard_flag'] = data[0:num_standard_flags * 2:2] kwargs['standard_mask'] = data[1:num_standard_flags * 2:2] # Vendor features - read_buffer = f.read(2) + read_buffer = fptr.read(2) num_vendor_features, = struct.unpack('>H', read_buffer) # Each vendor feature consists of a 16-byte UUID plus a mask whose # length is specified by, you guessed it, "mask_length". entry_length = 16 + mask_length - read_buffer = f.read(num_vendor_features * entry_length) + read_buffer = fptr.read(num_vendor_features * entry_length) vendor_feature = [] vendor_mask = [] for j in range(num_vendor_features): @@ -1321,7 +1284,7 @@ class ResolutionBox(Jp2kBox): List of boxes contained in this superbox. """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Resolution') + Jp2kBox.__init__(self, id='res ', longname='Resolution') self.__dict__.update(**kwargs) def __str__(self): @@ -1335,15 +1298,13 @@ class ResolutionBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse Resolution box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1355,7 +1316,6 @@ class ResolutionBox(Jp2kBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset @@ -1363,7 +1323,7 @@ class ResolutionBox(Jp2kBox): # The JP2 header box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(f) + box.box = box._parse_superbox(fptr) return box @@ -1385,7 +1345,7 @@ class CaptureResolutionBox(ResolutionBox): Vertical, horizontal resolution. """ def __init__(self, **kwargs): - ResolutionBox.__init__(self, id='', longname='Capture Resolution') + ResolutionBox.__init__(self, id='resc', longname='Capture Resolution') self.__dict__.update(**kwargs) def __str__(self): @@ -1395,15 +1355,13 @@ class CaptureResolutionBox(ResolutionBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse Resolution box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1415,14 +1373,13 @@ class CaptureResolutionBox(ResolutionBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - read_buffer = f.read(10) - (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', read_buffer) - kwargs['VR'] = RN1 / RD1 * math.pow(10, RE1) - kwargs['HR'] = RN2 / RD2 * math.pow(10, RE2) + read_buffer = fptr.read(10) + (rn1, rd1, rn2, rd2, re1, re2) = struct.unpack('>HHHHBB', read_buffer) + kwargs['VR'] = rn1 / rd1 * math.pow(10, re1) + kwargs['HR'] = rn2 / rd2 * math.pow(10, re2) box = CaptureResolutionBox(**kwargs) @@ -1446,7 +1403,7 @@ class DisplayResolutionBox(ResolutionBox): Vertical, horizontal resolution. """ def __init__(self, **kwargs): - ResolutionBox.__init__(self, id='', longname='Display Resolution') + ResolutionBox.__init__(self, id='resd', longname='Display Resolution') self.__dict__.update(**kwargs) def __str__(self): @@ -1456,15 +1413,13 @@ class DisplayResolutionBox(ResolutionBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse Resolution box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1476,14 +1431,13 @@ class DisplayResolutionBox(ResolutionBox): 4-byte tuple. """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - read_buffer = f.read(10) - (RN1, RD1, RN2, RD2, RE1, RE2) = struct.unpack('>HHHHBB', read_buffer) - kwargs['VR'] = RN1 / RD1 * math.pow(10, RE1) - kwargs['HR'] = RN2 / RD2 * math.pow(10, RE2) + read_buffer = fptr.read(10) + (rn1, rd1, rn2, rd2, re1, re2) = struct.unpack('>HHHHBB', read_buffer) + kwargs['VR'] = rn1 / rd1 * math.pow(10, re1) + kwargs['HR'] = rn2 / rd2 * math.pow(10, re2) box = DisplayResolutionBox(**kwargs) @@ -1507,7 +1461,7 @@ class LabelBox(Jp2kBox): Label """ def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='', longname='Label') + Jp2kBox.__init__(self, id='lbl ', longname='Label') self.__dict__.update(**kwargs) def __str__(self): @@ -1516,15 +1470,13 @@ class LabelBox(Jp2kBox): return msg @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse Label box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1535,12 +1487,11 @@ class LabelBox(Jp2kBox): kwargs : dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - num_bytes = offset + length - f.tell() - read_buffer = f.read(num_bytes) + num_bytes = offset + length - fptr.tell() + read_buffer = fptr.read(num_bytes) kwargs['label'] = read_buffer.decode('utf-8') box = LabelBox(**kwargs) return box @@ -1594,7 +1545,7 @@ class XMLBox(Jp2kBox): msg += '\n {0}'.format(xml) return msg - def _write(self, f): + def _write(self, fptr): """Write an XML box to file. """ try: @@ -1602,20 +1553,18 @@ class XMLBox(Jp2kBox): except AttributeError: read_buffer = ET.tostring(self.xml.getroot(), encoding='utf-8') - f.write(struct.pack('>I', len(read_buffer) + 8)) - f.write(self.id.encode()) - f.write(read_buffer) + fptr.write(struct.pack('>I', len(read_buffer) + 8)) + fptr.write(self.id.encode()) + fptr.write(read_buffer) @staticmethod - def _parse(f, id, offset, length): + def _parse(fptr, offset, length): """Parse XML box. Parameters ---------- - f : file + fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1626,12 +1575,11 @@ class XMLBox(Jp2kBox): kwargs : dictionary of parameter values """ kwargs = {} - kwargs['id'] = id kwargs['length'] = length kwargs['offset'] = offset - num_bytes = offset + length - f.tell() - read_buffer = f.read(num_bytes) + num_bytes = offset + length - fptr.tell() + read_buffer = fptr.read(num_bytes) text = read_buffer.decode('utf-8') # Strip out any trailing nulls. @@ -1678,15 +1626,13 @@ class UUIDListBox(Jp2kBox): return(msg) @staticmethod - def _parse(fptr, id, offset, length): + def _parse(fptr, offset, length): """Parse UUIDList box. Parameters ---------- f : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1743,15 +1689,13 @@ class UUIDInfoBox(Jp2kBox): return(msg) @staticmethod - def _parse(fptr, id, offset, length): + def _parse(fptr, offset, length): """Parse UUIDInfo super box. Parameters ---------- fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1813,15 +1757,13 @@ class DataEntryURLBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, id, offset, length): + def _parse(fptr, offset, length): """Parse Data Entry URL box. Parameters ---------- fptr : file Open file object. - id : byte - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int @@ -1934,15 +1876,13 @@ class UUIDBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, id, offset, length): + def _parse(fptr, offset, length): """Parse UUID box. Parameters ---------- fptr : file Open file object. - id : str - 4-byte unique identifier for this box. offset : int Start position of box in bytes. length : int From e773ec4db55a8f16476bf9e4c489af2ea8581f9f Mon Sep 17 00:00:00 2001 From: jevans Date: Mon, 8 Jul 2013 20:17:26 -0400 Subject: [PATCH 32/54] pylint work, mostly finished off jp2box, #71 --- glymur/jp2box.py | 683 ++++++++++++++-------------- glymur/jp2k.py | 24 +- glymur/test/test_jp2box.py | 30 +- glymur/test/test_jp2k.py | 46 +- glymur/test/test_opj_suite.py | 90 ++-- glymur/test/test_opj_suite_write.py | 4 +- 6 files changed, 428 insertions(+), 449 deletions(-) diff --git a/glymur/jp2box.py b/glymur/jp2box.py index 01e8245..a608e5f 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -33,7 +33,6 @@ from .core import _color_type_map_display from .core import _method_display from .core import _reader_requirements_display from .core import ENUMERATED_COLORSPACE -from .core import ENUMERATED_COLORSPACE class Jp2kBox(object): @@ -41,7 +40,7 @@ class Jp2kBox(object): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -51,24 +50,24 @@ class Jp2kBox(object): more verbose description of the box. """ - def __init__(self, id='', offset=0, length=0, longname=''): - self.id = id + def __init__(self, box_id='', offset=0, length=0, longname=''): + self.box_id = box_id self.length = length self.offset = offset self.longname = longname def __str__(self): - msg = "{0} Box ({1})".format(self.longname, self.id) + msg = "{0} Box ({1})".format(self.longname, self.box_id) msg += " @ ({0}, {1})".format(self.offset, self.length) return msg - def _write(self, fptr): + def write(self, fptr): """Must be implemented in a subclass. """ msg = "Not supported for {0} box.".format(self.longname) raise NotImplementedError(msg) - def _parse_superbox(self, fptr): + def parse_superbox(self, fptr): """Parse a superbox (box consisting of nothing but other boxes. Parameters @@ -92,30 +91,30 @@ class Jp2kBox(object): break read_buffer = fptr.read(8) - (L, T) = struct.unpack('>I4s', read_buffer) + (box_length, box_id) = struct.unpack('>I4s', read_buffer) if sys.hexversion >= 0x03000000: - T = T.decode('utf-8') + box_id = box_id.decode('utf-8') - if L == 0: + if box_length == 0: # The length of the box is presumed to last until the end of # the file. Compute the effective length of the box. num_bytes = self._file_size - fptr.tell() + 8 - elif L == 1: + elif box_length == 1: # The length of the box is in the XL field, a 64-bit value. read_buffer = fptr.read(8) num_bytes, = struct.unpack('>Q', read_buffer) else: - num_bytes = L + num_bytes = box_length # Call the proper parser for the given box with ID "T". try: - box = _BOX_WITH_ID[T]._parse(fptr, start, num_bytes) + box = _BOX_WITH_ID[box_id]._parse(fptr, start, num_bytes) except KeyError: - msg = 'Unrecognized box ({0}) encountered.'.format(T) + msg = 'Unrecognized box ({0}) encountered.'.format(box_id) warnings.warn(msg) - box = Jp2kBox(T, offset=start, length=num_bytes, + box = Jp2kBox(box_id, offset=start, length=num_bytes, longname='Unknown box') superbox.append(box) @@ -125,14 +124,14 @@ class Jp2kBox(object): # Length of the current box goes past the end of the # enclosing superbox. msg = '{0} box has incorrect box length ({1})' - msg = msg.format(T, num_bytes) + msg = msg.format(box_id, num_bytes) warnings.warn(msg) elif fptr.tell() > start + num_bytes: # The box must be invalid somehow, as the file pointer is # positioned past the end of the box. msg = '{0} box may be invalid, the file pointer is positioned ' msg += '{1} bytes past the end of the box.' - msg = msg.format(T, fptr.tell() - (start + num_bytes)) + msg = msg.format(box_id, fptr.tell() - (start + num_bytes)) warnings.warn(msg) fptr.seek(start + num_bytes) @@ -146,7 +145,7 @@ class ColourSpecificationBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int Length of the box in bytes. @@ -169,8 +168,9 @@ class ColourSpecificationBox(Jp2kBox): colorspace is not None, then icc_profile must be empty. """ def __init__(self, method=ENUMERATED_COLORSPACE, precedence=0, - approximation=0, colorspace=None, icc_profile=None, **kwargs): - Jp2kBox.__init__(self, id='colr', longname='Colour Specification') + approximation=0, colorspace=None, icc_profile=None, + length=0, offset=-1): + Jp2kBox.__init__(self, box_id='colr', longname='Colour Specification') if colorspace is not None and icc_profile is not None: raise IOError("colorspace and icc_profile cannot both be set.") @@ -178,12 +178,13 @@ class ColourSpecificationBox(Jp2kBox): raise IOError("Invalid method.") if approximation not in (0, 1, 2, 3, 4): raise IOError("Invalid approximation.") - self.__dict__.update(**kwargs) self.method = method self.precedence = precedence self.approximation = approximation self.colorspace = colorspace self.icc_profile = icc_profile + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -192,11 +193,11 @@ class ColourSpecificationBox(Jp2kBox): msg += '\n Precedence: {0}'.format(self.precedence) if self.approximation is not 0: - x = _approximation_display[self.approximation] - msg += '\n Approximation: {0}'.format(x) + dispvalue = _approximation_display[self.approximation] + msg += '\n Approximation: {0}'.format(dispvalue) if self.colorspace is not None: - x = _colorspace_map_display[self.colorspace] - msg += '\n Colorspace: {0}'.format(x) + dispvalue = _colorspace_map_display[self.colorspace] + msg += '\n Colorspace: {0}'.format(dispvalue) else: # 2.7 has trouble pretty-printing ordered dicts so we just have # to print as a regular dict in this case. @@ -204,13 +205,13 @@ class ColourSpecificationBox(Jp2kBox): icc_profile = dict(self.icc_profile) else: icc_profile = self.icc_profile - x = pprint.pformat(icc_profile) - lines = [' ' * 8 + y for y in x.split('\n')] + dispvalue = pprint.pformat(icc_profile) + lines = [' ' * 8 + y for y in dispvalue.split('\n')] msg += '\n ICC Profile:\n{0}'.format('\n'.join(lines)) return msg - def _write(self, fptr): + def write(self, fptr): """Write an Colour Specification box to file. """ if self.colorspace is None: @@ -243,45 +244,44 @@ class ColourSpecificationBox(Jp2kBox): Returns ------- - kwargs : dictionary - dictionary of parameter values + ColourSpecificationBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - # Read the brand, minor version. read_buffer = fptr.read(3) (method, precedence, approximation) = struct.unpack('>BBB', read_buffer) - kwargs['method'] = method - kwargs['precedence'] = precedence - kwargs['approximation'] = approximation if method == 1: # enumerated colour space read_buffer = fptr.read(4) - kwargs['colorspace'], = struct.unpack('>I', read_buffer) - kwargs['icc_profile'] = None + colorspace, = struct.unpack('>I', read_buffer) + icc_profile = None else: # ICC profile - kwargs['colorspace'] = None - n = offset + length - fptr.tell() - if n < 128: + colorspace = None + numbytes = offset + length - fptr.tell() + if numbytes < 128: msg = "ICC profile header is corrupt, length is " msg += "only {0} instead of 128." - warnings.warn(msg.format(n), UserWarning) - kwargs['icc_profile'] = None + warnings.warn(msg.format(numbytes), UserWarning) + icc_profile = None else: - icc_profile = _ICCProfile(fptr.read(n)) - kwargs['icc_profile'] = icc_profile.header + profile = _ICCProfile(fptr.read(numbytes)) + icc_profile = profile.header - box = ColourSpecificationBox(**kwargs) + box = ColourSpecificationBox(method=method, + precedence=precedence, + approximation=approximation, + colorspace=colorspace, + icc_profile=icc_profile, + length=length, + offset=offset) return box class _ICCProfile(object): """ + Container for ICC profile information. """ profile_class = {b'scnr': 'input device profile', b'mntr': 'display device profile', @@ -347,11 +347,11 @@ class _ICCProfile(object): else: header['Platform'] = read_buffer[40:44].decode('utf-8') - x, = struct.unpack('>I', read_buffer[44:48]) - y = 'embedded, ' if x & 0x01 else 'not embedded, ' - y += 'cannot ' if x & 0x02 else 'can ' - y += 'be used independently' - header['Flags'] = y + fval, = struct.unpack('>I', read_buffer[44:48]) + flags = 'embedded, ' if fval & 0x01 else 'not embedded, ' + flags += 'cannot ' if fval & 0x02 else 'can ' + flags += 'be used independently' + header['Flags'] = flags header['Device Manufacturer'] = read_buffer[48:52].decode('utf-8') if read_buffer[52:56] == b'\x00\x00\x00\x00': @@ -360,17 +360,17 @@ class _ICCProfile(object): device_model = read_buffer[52:56].decode('utf-8') header['Device Model'] = device_model - x, = struct.unpack('>Q', read_buffer[56:64]) - y = 'transparency, ' if x & 0x01 else 'reflective, ' - y += 'matte, ' if x & 0x02 else 'glossy, ' - y += 'negative ' if x & 0x04 else 'positive ' - y += 'media polarity, ' - y += 'black and white media' if x & 0x08 else 'color media' - header['Device Attributes'] = y + val, = struct.unpack('>Q', read_buffer[56:64]) + attr = 'transparency, ' if val & 0x01 else 'reflective, ' + attr += 'matte, ' if val & 0x02 else 'glossy, ' + attr += 'negative ' if val & 0x04 else 'positive ' + attr += 'media polarity, ' + attr += 'black and white media' if val & 0x08 else 'color media' + header['Device Attributes'] = attr - x, = struct.unpack('>I', read_buffer[64:68]) + rval, = struct.unpack('>I', read_buffer[64:68]) try: - header['Rendering Intent'] = self.rendering_intent_dict[x] + header['Rendering Intent'] = self.rendering_intent_dict[rval] except KeyError: header['Rendering Intent'] = 'unknown' @@ -396,7 +396,7 @@ class ChannelDefinitionBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : numeric scalar length of the box in bytes. @@ -412,7 +412,7 @@ class ChannelDefinitionBox(Jp2kBox): index of the associated color """ def __init__(self, index, channel_type, association, **kwargs): - Jp2kBox.__init__(self, id='cdef', longname='Channel Definition') + Jp2kBox.__init__(self, box_id='cdef', longname='Channel Definition') if len(index) != len(channel_type) or len(index) != len(association): msg = "Length of channel definition box inputs must be the same." raise IOError(msg) @@ -443,14 +443,14 @@ class ChannelDefinitionBox(Jp2kBox): msg = msg.format(self.index[j], color_type_string, assn) return msg - def _write(self, fptr): + def write(self, fptr): """Write a channel definition box to file. """ - N = len(self.association) - fptr.write(struct.pack('>I', 8 + 2 + N * 6)) + num_components = len(self.association) + fptr.write(struct.pack('>I', 8 + 2 + num_components * 6)) fptr.write('cdef'.encode('utf-8')) - fptr.write(struct.pack('>H', N)) - for j in range(N): + fptr.write(struct.pack('>H', num_components)) + for j in range(num_components): fptr.write(struct.pack('>' + 'H' * 3, self.index[j], self.channel_type[j], @@ -471,23 +471,20 @@ class ChannelDefinitionBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + ComponentDefinitionBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - # Read the number of components. read_buffer = fptr.read(2) - N, = struct.unpack('>H', read_buffer) + num_components, = struct.unpack('>H', read_buffer) - read_buffer = fptr.read(N * 6) - data = struct.unpack('>' + 'HHH' * N, read_buffer) - index = data[0:N * 6:3] - channel_type = data[1:N * 6:3] - association = data[2:N * 6:3] + read_buffer = fptr.read(num_components * 6) + data = struct.unpack('>' + 'HHH' * num_components, read_buffer) + index = data[0:num_components * 6:3] + channel_type = data[1:num_components * 6:3] + association = data[2:num_components * 6:3] - box = ChannelDefinitionBox(index, channel_type, association, **kwargs) + box = ChannelDefinitionBox(index, channel_type, association, + length=length, offset=offset) return box @@ -496,7 +493,7 @@ class ComponentMappingBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : numeric scalar Length of the box in bytes. @@ -511,9 +508,14 @@ class ComponentMappingBox(Jp2kBox): palette_index : int Index component from palette """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='cmap', longname='Component Mapping') - self.__dict__.update(**kwargs) + def __init__(self, component_index, mapping_type, palette_index, + length=0, offset=-1): + Jp2kBox.__init__(self, box_id='cmap', longname='Component Mapping') + self.component_index = component_index + self.mapping_type = mapping_type + self.palette_index = palette_index + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -543,23 +545,20 @@ class ComponentMappingBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + ComponentMappingBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset + num_bytes = offset + length - fptr.tell() + num_components = int(num_bytes/4) - N = offset + length - fptr.tell() - num_components = int(N/4) - - read_buffer = fptr.read(N) + read_buffer = fptr.read(num_bytes) data = struct.unpack('>' + 'HBB' * num_components, read_buffer) - kwargs['component_index'] = data[0:N:num_components] - kwargs['mapping_type'] = data[1:N:num_components] - kwargs['palette_index'] = data[2:N:num_components] + component_index = data[0:num_bytes:num_components] + mapping_type = data[1:num_bytes:num_components] + palette_index = data[2:num_bytes:num_components] - box = ComponentMappingBox(**kwargs) + box = ComponentMappingBox(component_index, mapping_type, palette_index, + length=length, offset=offset) return box @@ -568,7 +567,7 @@ class ContiguousCodestreamBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -579,11 +578,11 @@ class ContiguousCodestreamBox(Jp2kBox): main_header : list List of segments in the codestream header. """ - - def __init__(self, main_header=[], **kwargs): - Jp2kBox.__init__(self, id='jp2c', longname='Contiguous Codestream') - self.__dict__.update(**kwargs) + def __init__(self, main_header=None, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='jp2c', longname='Contiguous Codestream') self.main_header = main_header + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -602,7 +601,7 @@ class ContiguousCodestreamBox(Jp2kBox): Parameters ---------- - f : file + fptr : file Open file object. offset : int Start position of box in bytes. @@ -611,15 +610,10 @@ class ContiguousCodestreamBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + ContiguousCodestreamBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - - kwargs['main_header'] = Codestream(fptr, header_only=True) - - box = ContiguousCodestreamBox(**kwargs) + main_header = Codestream(fptr, header_only=True) + box = ContiguousCodestreamBox(main_header, length=length, offset=offset) return box @@ -628,7 +622,7 @@ class FileTypeBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -644,15 +638,18 @@ class FileTypeBox(Jp2kBox): compatibility_list: list List of file conformance profiles. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='ftyp', longname='File Type') - self.__dict__.update(**kwargs) - if 'brand' not in kwargs.keys(): - self.brand = 'jp2 ' - if 'minor_version' not in kwargs.keys(): - self.minor_version = 0 - if 'compatibility_list' not in kwargs.keys(): + def __init__(self, brand='jp2 ', minor_version=0, + compatibility_list=None, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='ftyp', longname='File Type') + self.brand = brand + self.minor_version = minor_version + if compatibility_list is None: + # see W0102, pylint self.compatibility_list = ['jp2 '] + else: + self.compatibility_list = compatibility_list + self.length = length + self.offset = offset def __str__(self): lst = [Jp2kBox.__str__(self), @@ -663,7 +660,7 @@ class FileTypeBox(Jp2kBox): return msg - def _write(self, fptr): + def write(self, fptr): """Write a File Type box to file. """ length = 16 + 4*len(self.compatibility_list) @@ -688,36 +685,32 @@ class FileTypeBox(Jp2kBox): length : int Length of the box in bytes. - Returns: - kwargs: dictionary of parameter values + Returns + ------- + FileTypeBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - # Read the brand, minor version. read_buffer = fptr.read(8) (brand, minor_version) = struct.unpack('>4sI', read_buffer) - if sys.hexversion < 0x030000: - kwargs['brand'] = brand - else: - kwargs['brand'] = brand.decode('utf-8') - kwargs['minor_version'] = minor_version + if sys.hexversion >= 0x030000: + brand = brand.decode('utf-8') # Read the compatibility list. Each entry has 4 bytes. current_pos = fptr.tell() - n = (offset + length - current_pos) / 4 - read_buffer = fptr.read(int(n) * 4) + num_bytes = (offset + length - current_pos) / 4 + read_buffer = fptr.read(int(num_bytes) * 4) compatibility_list = [] - for j in range(int(n)): - CL, = struct.unpack('>4s', read_buffer[4*j:4*(j+1)]) + for j in range(int(num_bytes)): + entry, = struct.unpack('>4s', read_buffer[4*j:4*(j+1)]) if sys.hexversion >= 0x03000000: - CL = CL.decode('utf-8') - compatibility_list.append(CL) + entry = entry.decode('utf-8') + compatibility_list.append(entry) - kwargs['compatibility_list'] = compatibility_list + compatibility_list = compatibility_list - box = FileTypeBox(**kwargs) + box = FileTypeBox(brand=brand, minor_version=minor_version, + compatibility_list=compatibility_list, + length=length, offset=offset) return box @@ -726,7 +719,7 @@ class ImageHeaderBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -752,14 +745,14 @@ class ImageHeaderBox(Jp2kBox): """ def __init__(self, height, width, num_components=1, signed=False, bits_per_component=8, compression=7, colorspace_unknown=False, - ip_provided=False, **kwargs): + ip_provided=False, length=0, offset=-1): """ Examples -------- >>> import glymur >>> box = glymur.jp2box.ImageHeaderBox(height=512, width=256) """ - Jp2kBox.__init__(self, id='ihdr', longname='Image Header') + Jp2kBox.__init__(self, box_id='ihdr', longname='Image Header') self.height = height self.width = width self.num_components = num_components @@ -767,8 +760,9 @@ class ImageHeaderBox(Jp2kBox): self.bits_per_component = bits_per_component self.compression = compression self.colorspace_unknown = colorspace_unknown - self.ip_provided = False - self.__dict__.update(**kwargs) + self.ip_provided = ip_provided + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -786,7 +780,7 @@ class ImageHeaderBox(Jp2kBox): self.colorspace_unknown) return msg - def _write(self, fptr): + def write(self, fptr): """Write an Image Header box to file. """ fptr.write(struct.pack('>I', 22)) @@ -818,26 +812,29 @@ class ImageHeaderBox(Jp2kBox): length : int Length of the box in bytes. - Returns: - kwargs: dictionary of parameter values + Returns + ------- + ImageHeaderBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - # Read the box information read_buffer = fptr.read(14) params = struct.unpack('>IIHBBBB', read_buffer) height = params[0] width = params[1] - kwargs['num_components'] = params[2] - kwargs['bits_per_component'] = (params[3] & 0x7f) + 1 - kwargs['signed'] = (params[3] & 0x80) > 1 - kwargs['compression'] = params[4] - kwargs['colorspace_unknown'] = True if params[5] else False - kwargs['ip_provided'] = True if params[6] else False + num_components = params[2] + bits_per_component = (params[3] & 0x7f) + 1 + signed = (params[3] & 0x80) > 1 + compression = params[4] + colorspace_unknown = True if params[5] else False + ip_provided = True if params[6] else False - box = ImageHeaderBox(height, width, **kwargs) + box = ImageHeaderBox(height, width, num_components=num_components, + bits_per_component=bits_per_component, + signed=signed, + compression=compression, + colorspace_unknown=colorspace_unknown, + ip_provided=ip_provided, + length=length, offset=offset) return box @@ -846,7 +843,7 @@ class AssociationBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -857,9 +854,11 @@ class AssociationBox(Jp2kBox): box : list List of boxes contained in this superbox. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='asoc', longname='Association') - self.__dict__.update(**kwargs) + def __init__(self, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='asoc', longname='Association') + self.length = length + self.offset = offset + self.box = [] def __str__(self): msg = Jp2kBox.__str__(self) @@ -886,18 +885,13 @@ class AssociationBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values, for now just a single - 4-byte tuple. + AssociationBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - - box = AssociationBox(**kwargs) + box = AssociationBox(length=length, offset=offset) # The Association box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(fptr) + box.box = box.parse_superbox(fptr) return box @@ -907,7 +901,7 @@ class JP2HeaderBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -918,9 +912,11 @@ class JP2HeaderBox(Jp2kBox): box : list List of boxes contained in this superbox. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='jp2h', longname='JP2 Header') - self.__dict__.update(**kwargs) + def __init__(self, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='jp2h', longname='JP2 Header') + self.length = length + self.offset = offset + self.box = [] def __str__(self): msg = Jp2kBox.__str__(self) @@ -932,7 +928,7 @@ class JP2HeaderBox(Jp2kBox): msg += ''.join(strs) return msg - def _write(self, fptr): + def write(self, fptr): """Write a JP2 Header box to file. """ # Write the contained boxes, then come back and write the length. @@ -940,7 +936,7 @@ class JP2HeaderBox(Jp2kBox): fptr.write(struct.pack('>I', 0)) fptr.write('jp2h'.encode()) for box in self.box: - box._write(fptr) + box.write(fptr) end_pos = fptr.tell() fptr.seek(orig_pos) @@ -962,18 +958,13 @@ class JP2HeaderBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values, for now just a single - 4-byte tuple. + JP2HeaderBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - - box = JP2HeaderBox(**kwargs) + box = JP2HeaderBox(length=length, offset=offset) # The JP2 header box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(fptr) + box.box = box.parse_superbox(fptr) return box @@ -983,7 +974,7 @@ class JPEG2000SignatureBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -994,11 +985,11 @@ class JPEG2000SignatureBox(Jp2kBox): signature : byte Four-byte tuple identifying the file as JPEG 2000. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='jP ', longname='JPEG 2000 Signature') - self.__dict__.update(**kwargs) - if 'signature' not in kwargs.keys(): - self.signature = (13, 10, 135, 10) + def __init__(self, signature=(13, 10, 135, 10), length=0, offset=-1): + Jp2kBox.__init__(self, box_id='jP ', longname='JPEG 2000 Signature') + self.signature = signature + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1006,11 +997,11 @@ class JPEG2000SignatureBox(Jp2kBox): msg = msg.format(*self.signature) return msg - def _write(self, fptr): + def write(self, fptr): """Write a JPEG 2000 Signature box to file. """ fptr.write(struct.pack('>I', 12)) - fptr.write(self.id.encode()) + fptr.write(self.box_id.encode()) fptr.write(struct.pack('>BBBB', *self.signature)) @staticmethod @@ -1026,18 +1017,15 @@ class JPEG2000SignatureBox(Jp2kBox): length : int Length of the box in bytes. - Returns: - kwargs: dictionary of parameter values, for now just a single - 4-byte tuple. + Returns + ------- + JPEG2000SignatureBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - read_buffer = fptr.read(4) - kwargs['signature'] = struct.unpack('>BBBB', read_buffer) + signature = struct.unpack('>BBBB', read_buffer) - box = JPEG2000SignatureBox(**kwargs) + box = JPEG2000SignatureBox(signature=signature, length=length, + offset=offset) return box @@ -1046,7 +1034,7 @@ class PaletteBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1057,9 +1045,14 @@ class PaletteBox(Jp2kBox): palette : list Colormap represented as list of 1D arrays, one per color component. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='pclr', longname='Palette') - self.__dict__.update(**kwargs) + def __init__(self, palette, bits_per_component, signed, length=0, + offset=-1): + Jp2kBox.__init__(self, box_id='pclr', longname='Palette') + self.palette = palette + self.bits_per_component = bits_per_component + self.signed = signed + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1082,23 +1075,17 @@ class PaletteBox(Jp2kBox): Returns ------- - kwargs: dictionary of parameter values + PaletteBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - # Get the size of the palette. read_buffer = fptr.read(3) - (NE, NC) = struct.unpack('>HB', read_buffer) + (num_entries, num_columns) = struct.unpack('>HB', read_buffer) # Need to determine bps and signed or not - read_buffer = fptr.read(NC) - data = struct.unpack('>' + 'B' * NC, read_buffer) + read_buffer = fptr.read(num_columns) + data = struct.unpack('>' + 'B' * num_columns, read_buffer) bps = [((x & 0x07f) + 1) for x in data] signed = [((x & 0x80) > 1) for x in data] - kwargs['bits_per_component'] = bps - kwargs['signed'] = signed # Form the format string so that we can intelligently unpack the # colormap. We have to do this because it is possible that the @@ -1108,34 +1095,33 @@ class PaletteBox(Jp2kBox): # which reverses the usual indexing scheme. palette = [] fmt = '>' - bytes_per_row = 0 - for j in range(NC): + row_nbytes = 0 + for j in range(num_columns): if bps[j] <= 8: fmt += 'B' - bytes_per_row += 1 - palette.append(np.zeros(NE, dtype=np.uint8)) + row_nbytes += 1 + palette.append(np.zeros(num_entries, dtype=np.uint8)) elif bps[j] <= 16: fmt += 'H' - bytes_per_row += 2 - palette.append(np.zeros(NE, dtype=np.uint16)) + row_nbytes += 2 + palette.append(np.zeros(num_entries, dtype=np.uint16)) elif bps[j] <= 32: fmt += 'I' - bytes_per_row += 4 - palette.append(np.zeros(NE, dtype=np.uint32)) + row_nbytes += 4 + palette.append(np.zeros(num_entries, dtype=np.uint32)) else: - msg = 'Unsupported palette bitdepth (%d).' + msg = 'Unsupported palette bitdepth (%d).'.format(bps[j]) raise IOError(msg) - n = NE * bytes_per_row - read_buffer = fptr.read(n) + read_buffer = fptr.read(num_entries * row_nbytes) - for j in range(NE): - row_buffer = read_buffer[(bytes_per_row * j):(bytes_per_row * (j + 1))] + for j in range(num_entries): + row_buffer = read_buffer[(row_nbytes * j):(row_nbytes * (j + 1))] row = struct.unpack(fmt, row_buffer) - for k in range(NC): + for k in range(num_columns): palette[k][j] = row[k] - kwargs['palette'] = palette - box = PaletteBox(**kwargs) + box = PaletteBox(palette, bps, signed, length=length, + offset=offset) return box @@ -1144,7 +1130,7 @@ class ReaderRequirementsBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1152,9 +1138,9 @@ class ReaderRequirementsBox(Jp2kBox): offset of the box from the start of the file. longname : str more verbose description of the box. - FUAM : int + fuam : int Fully Understand Aspects mask. - DCM : int + dcm : int Decode completely mask. standard_flag : list Integers specifying standard features. @@ -1167,23 +1153,27 @@ class ReaderRequirementsBox(Jp2kBox): Specifies the compatibility mask for each corresponding vendor feature. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='rreq', longname='Reader Requirements') - self.__dict__.update(**kwargs) + def __init__(self, fuam, dcm, standard_flag, standard_mask, vendor_feature, + vendor_mask, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='rreq', longname='Reader Requirements') + self.fuam = fuam + self.dcm = dcm + self.standard_flag = standard_flag + self.standard_mask = standard_mask + self.vendor_feature = vendor_feature + self.vendor_mask = vendor_mask + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) - # TODO: include FUAM, DCM - msg += '\n Standard Features:' - # TODO: include each standard mask for j in range(len(self.standard_flag)): sfl = self.standard_flag[j] rrdisp = _reader_requirements_display[self.standard_flag[j]] msg += '\n Feature {0:03d}: {1}'.format(sfl, rrdisp) - # TODO: include the vendor mask msg += '\n Vendor Features:' for j in range(len(self.vendor_feature)): msg += '\n UUID {0}'.format(self.vendor_feature[j]) @@ -1205,12 +1195,8 @@ class ReaderRequirementsBox(Jp2kBox): Returns ------- - ReaderRequirementsBox. + ReaderRequirementsBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - read_buffer = fptr.read(1) mask_length, = struct.unpack('>B', read_buffer) if mask_length == 1: @@ -1228,8 +1214,8 @@ class ReaderRequirementsBox(Jp2kBox): # Decodes Completely Mask read_buffer = fptr.read(2 * mask_length) data = struct.unpack('>' + mask_format * 2, read_buffer) - kwargs['FUAM'] = data[0] - kwargs['DCM'] = data[1] + fuam = data[0] + dcm = data[1] read_buffer = fptr.read(2) num_standard_flags, = struct.unpack('>H', read_buffer) @@ -1240,8 +1226,8 @@ class ReaderRequirementsBox(Jp2kBox): read_buffer = fptr.read(num_standard_flags * (2 + mask_length)) data = struct.unpack('>' + ('H' + mask_format) * num_standard_flags, read_buffer) - kwargs['standard_flag'] = data[0:num_standard_flags * 2:2] - kwargs['standard_mask'] = data[1:num_standard_flags * 2:2] + standard_flag = data[0:num_standard_flags * 2:2] + standard_mask = data[1:num_standard_flags * 2:2] # Vendor features read_buffer = fptr.read(2) @@ -1257,13 +1243,12 @@ class ReaderRequirementsBox(Jp2kBox): ubuffer = read_buffer[j * entry_length:(j + 1) * entry_length] vendor_feature.append(uuid.UUID(bytes=ubuffer[0:16])) - vm = struct.unpack('>' + mask_format, ubuffer[16:]) - vendor_mask.append(vm) + vmask = struct.unpack('>' + mask_format, ubuffer[16:]) + vendor_mask.append(vmask) - kwargs['vendor_feature'] = vendor_feature - kwargs['vendor_mask'] = vendor_mask - - box = ReaderRequirementsBox(**kwargs) + box = ReaderRequirementsBox(fuam, dcm, standard_flag, standard_mask, + vendor_feature, vendor_mask, + length=length, offset=offset) return box @@ -1272,7 +1257,7 @@ class ResolutionBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1283,9 +1268,11 @@ class ResolutionBox(Jp2kBox): box : list List of boxes contained in this superbox. """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='res ', longname='Resolution') - self.__dict__.update(**kwargs) + def __init__(self, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='res ', longname='Resolution') + self.length = length + self.offset = offset + self.box = [] def __str__(self): msg = Jp2kBox.__str__(self) @@ -1312,28 +1299,23 @@ class ResolutionBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values, for now just a single - 4-byte tuple. + ResolutionBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - - box = ResolutionBox(**kwargs) + box = ResolutionBox(length=length, offset=offset) # The JP2 header box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(fptr) + box.box = box.parse_superbox(fptr) return box -class CaptureResolutionBox(ResolutionBox): +class CaptureResolutionBox(Jp2kBox): """Container for Capture resolution box information. Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1341,17 +1323,21 @@ class CaptureResolutionBox(ResolutionBox): offset of the box from the start of the file. longname : str more verbose description of the box. - VR, HR : float + vertical_resolution, horizontal_resolution : float Vertical, horizontal resolution. """ - def __init__(self, **kwargs): - ResolutionBox.__init__(self, id='resc', longname='Capture Resolution') - self.__dict__.update(**kwargs) + def __init__(self, vertical_resolution, horizontal_resolution, length=0, + offset=-1): + Jp2kBox.__init__(self, box_id='resc', longname='Capture Resolution') + self.vertical_resolution = vertical_resolution + self.horizontal_resolution = horizontal_resolution + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) - msg += '\n VCR: {0}'.format(self.VR) - msg += '\n HCR: {0}'.format(self.HR) + msg += '\n VCR: {0}'.format(self.vertical_resolution) + msg += '\n HCR: {0}'.format(self.horizontal_resolution) return msg @staticmethod @@ -1369,29 +1355,24 @@ class CaptureResolutionBox(ResolutionBox): Returns ------- - kwargs : dictionary of parameter values, for now just a single - 4-byte tuple. + CaptureResolutionBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - read_buffer = fptr.read(10) (rn1, rd1, rn2, rd2, re1, re2) = struct.unpack('>HHHHBB', read_buffer) - kwargs['VR'] = rn1 / rd1 * math.pow(10, re1) - kwargs['HR'] = rn2 / rd2 * math.pow(10, re2) + vres = rn1 / rd1 * math.pow(10, re1) + hres = rn2 / rd2 * math.pow(10, re2) - box = CaptureResolutionBox(**kwargs) + box = CaptureResolutionBox(vres, hres, length=length, offset=offset) return box -class DisplayResolutionBox(ResolutionBox): +class DisplayResolutionBox(Jp2kBox): """Container for Display resolution box information. Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1399,17 +1380,21 @@ class DisplayResolutionBox(ResolutionBox): offset of the box from the start of the file. longname : str more verbose description of the box. - VR, HR : float + vertical_resolution, horizontal_resolution : float Vertical, horizontal resolution. """ - def __init__(self, **kwargs): - ResolutionBox.__init__(self, id='resd', longname='Display Resolution') - self.__dict__.update(**kwargs) + def __init__(self, vertical_resolution, horizontal_resolution, + length=0, offset=-1): + Jp2kBox.__init__(self, box_id='resd', longname='Display Resolution') + self.vertical_resolution = vertical_resolution + self.horizontal_resolution = horizontal_resolution + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) - msg += '\n VDR: {0}'.format(self.VR) - msg += '\n HDR: {0}'.format(self.HR) + msg += '\n VDR: {0}'.format(self.vertical_resolution) + msg += '\n HDR: {0}'.format(self.horizontal_resolution) return msg @staticmethod @@ -1427,19 +1412,15 @@ class DisplayResolutionBox(ResolutionBox): Returns ------- - kwargs : dictionary of parameter values, for now just a single - 4-byte tuple. + DisplayResolutionBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset read_buffer = fptr.read(10) (rn1, rd1, rn2, rd2, re1, re2) = struct.unpack('>HHHHBB', read_buffer) - kwargs['VR'] = rn1 / rd1 * math.pow(10, re1) - kwargs['HR'] = rn2 / rd2 * math.pow(10, re2) + vres = rn1 / rd1 * math.pow(10, re1) + hres = rn2 / rd2 * math.pow(10, re2) - box = DisplayResolutionBox(**kwargs) + box = DisplayResolutionBox(vres, hres, length=length, offset=offset) return box @@ -1449,7 +1430,7 @@ class LabelBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1460,9 +1441,11 @@ class LabelBox(Jp2kBox): label : str Label """ - def __init__(self, **kwargs): - Jp2kBox.__init__(self, id='lbl ', longname='Label') - self.__dict__.update(**kwargs) + def __init__(self, label, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='lbl ', longname='Label') + self.label = label + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1484,16 +1467,12 @@ class LabelBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + LabelBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - num_bytes = offset + length - fptr.tell() read_buffer = fptr.read(num_bytes) - kwargs['label'] = read_buffer.decode('utf-8') - box = LabelBox(**kwargs) + label = read_buffer.decode('utf-8') + box = LabelBox(label, length=length, offset=offset) return box @@ -1502,7 +1481,7 @@ class XMLBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1513,7 +1492,7 @@ class XMLBox(Jp2kBox): xml : ElementTree.Element XML section. """ - def __init__(self, xml=None, filename=None, **kwargs): + def __init__(self, xml=None, filename=None, length=0, offset=-1): """ Parameters ---------- @@ -1523,7 +1502,7 @@ class XMLBox(Jp2kBox): File from which to read XML. If filename is not None, then the xml keyword argument must be None. """ - Jp2kBox.__init__(self, id='xml ', longname='XML') + Jp2kBox.__init__(self, box_id='xml ', longname='XML') if filename is not None and xml is not None: msg = "Only one of either filename or xml should be provided." raise IOError(msg) @@ -1531,7 +1510,8 @@ class XMLBox(Jp2kBox): self.xml = ET.parse(filename) else: self.xml = xml - self.__dict__.update(**kwargs) + self.length = length + self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) @@ -1545,7 +1525,7 @@ class XMLBox(Jp2kBox): msg += '\n {0}'.format(xml) return msg - def _write(self, fptr): + def write(self, fptr): """Write an XML box to file. """ try: @@ -1554,7 +1534,7 @@ class XMLBox(Jp2kBox): read_buffer = ET.tostring(self.xml.getroot(), encoding='utf-8') fptr.write(struct.pack('>I', len(read_buffer) + 8)) - fptr.write(self.id.encode()) + fptr.write(self.box_id.encode()) fptr.write(read_buffer) @staticmethod @@ -1572,12 +1552,8 @@ class XMLBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + XMLBox instance """ - kwargs = {} - kwargs['length'] = length - kwargs['offset'] = offset - num_bytes = offset + length - fptr.tell() read_buffer = fptr.read(num_bytes) text = read_buffer.decode('utf-8') @@ -1586,14 +1562,14 @@ class XMLBox(Jp2kBox): text = text.rstrip('\0') try: - kwargs['xml'] = ET.fromstring(text) - except ET.ParseError as e: + xml = ET.fromstring(text) + except ET.ParseError as parse_error: msg = 'A problem was encountered while parsing an XML box: "{0}"' - msg = msg.format(str(e)) + msg = msg.format(str(parse_error)) warnings.warn(msg, UserWarning) - kwargs['xml'] = None + xml = None - box = XMLBox(**kwargs) + box = XMLBox(xml=xml, length=length, offset=offset) return box @@ -1602,7 +1578,7 @@ class UUIDListBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1613,16 +1589,16 @@ class UUIDListBox(Jp2kBox): ulst : list List of UUIDs. """ - def __init__(self, ulst, length, offset): - Jp2kBox.__init__(self, id='ulst', longname='UUID List') + def __init__(self, ulst, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='ulst', longname='UUID List') self.ulst = ulst self.length = length self.offset = offset def __str__(self): msg = Jp2kBox.__str__(self) - for enumerated_item in enumerate(self.ulst): - msg += '\n UUID[{0}]: {1}'.format(*enumerated_item) + for j, uuid_item in enumerate(self.ulst): + msg += '\n UUID[{0}]: {1}'.format(j, uuid_item) return(msg) @staticmethod @@ -1640,7 +1616,7 @@ class UUIDListBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + UUIDListBox instance """ read_buffer = fptr.read(2) num_uuids, = struct.unpack('>H', read_buffer) @@ -1650,7 +1626,7 @@ class UUIDListBox(Jp2kBox): read_buffer = fptr.read(16) ulst.append(uuid.UUID(bytes=read_buffer)) - box = UUIDListBox(ulst, length, offset) + box = UUIDListBox(ulst, length=length, offset=offset) return(box) @@ -1659,7 +1635,7 @@ class UUIDInfoBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1670,8 +1646,8 @@ class UUIDInfoBox(Jp2kBox): box : list List of boxes contained in this superbox. """ - def __init__(self, length, offset): - Jp2kBox.__init__(self, id='uinf', longname='UUIDInfo') + def __init__(self, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='uinf', longname='UUIDInfo') self.length = length self.offset = offset self.box = [] @@ -1703,14 +1679,14 @@ class UUIDInfoBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + UUIDInfoBox instance """ - box = UUIDInfoBox(length, offset) + box = UUIDInfoBox(length=length, offset=offset) # The UUIDInfo box is a superbox, so go ahead and parse its child # boxes. - box.box = box._parse_superbox(fptr) + box.box = box.parse_superbox(fptr) return box @@ -1720,7 +1696,7 @@ class DataEntryURLBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1735,8 +1711,8 @@ class DataEntryURLBox(Jp2kBox): URL : str Associated URL. """ - def __init__(self, version, flag, url, length, offset): - Jp2kBox.__init__(self, id='url ', longname='Data Entry URL') + def __init__(self, version, flag, url, length=0, offset=-1): + Jp2kBox.__init__(self, box_id='url ', longname='Data Entry URL') self.version = version self.flag = flag self.url = url @@ -1771,7 +1747,7 @@ class DataEntryURLBox(Jp2kBox): Returns ------- - kwargs : dictionary of parameter values + DataEntryURLbox instance """ read_buffer = fptr.read(4) data = struct.unpack('>BBBB', read_buffer) @@ -1781,7 +1757,7 @@ class DataEntryURLBox(Jp2kBox): numbytes = offset + length - fptr.tell() read_buffer = fptr.read(numbytes) url = read_buffer.decode('utf-8') - box = DataEntryURLBox(version, flag, url, length, offset) + box = DataEntryURLBox(version, flag, url, length=length, offset=offset) return box @@ -1790,7 +1766,7 @@ class UUIDBox(Jp2kBox): Attributes ---------- - id : str + box_id : str 4-character identifier for the box. length : int length of the box in bytes. @@ -1810,7 +1786,7 @@ class UUIDBox(Jp2kBox): 16684-1:2012 - Graphic technology -- Extensible metadata platform (XMP) specification -- Part 1: Data model, serialization and core properties """ - def __init__(self, the_uuid, raw_data, length, offset): + def __init__(self, the_uuid, raw_data, length=0, offset=-1): """ Parameters ---------- @@ -1823,7 +1799,7 @@ class UUIDBox(Jp2kBox): offset : int offset of the box from the start of the file. """ - Jp2kBox.__init__(self, id='uuid', longname='UUID') + Jp2kBox.__init__(self, box_id='uuid', longname='UUID') self.uuid = the_uuid if the_uuid == uuid.UUID('be7acfcb-97a9-42e8-9c71-999491e3afac'): @@ -1863,6 +1839,8 @@ class UUIDBox(Jp2kBox): # as regular dicts. Not ideal, but at least it's good on 3.3+. if sys.hexversion < 0x03000000: data = dict(self.data) + else: + data = self.data uuid_data = '\n' + pprint.pformat(data) else: uuid_type = '' @@ -1888,8 +1866,9 @@ class UUIDBox(Jp2kBox): length : int Length of the box in bytes. - Returns: - kwargs: dictionary of parameter values + Returns + ------- + UUIDBox instance """ read_buffer = fptr.read(16) @@ -1897,7 +1876,7 @@ class UUIDBox(Jp2kBox): numbytes = offset + length - fptr.tell() read_buffer = fptr.read(numbytes) - box = UUIDBox(the_uuid, read_buffer, length, offset) + box = UUIDBox(the_uuid, read_buffer, length=length, offset=offset) return box diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 53cbf09..2cc8712 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -137,7 +137,7 @@ class Jp2k(Jp2kBox): # Back up and start again, we know we have a superbox (box of # boxes) here. f.seek(0) - self.box = self._parse_superbox(f) + self.box = self.parse_superbox(f) def write(self, img_array, cratios=None, eph=False, psnr=None, numres=None, cbsize=None, psizes=None, grid_offset=None, sop=False, @@ -450,15 +450,15 @@ class Jp2k(Jp2kBox): # Check for a bad sequence of boxes. # 1st two boxes must be 'jP ' and 'ftyp' - if boxes[0].id != 'jP ' or boxes[1].id != 'ftyp': + if boxes[0].box_id != 'jP ' or boxes[1].box_id != 'ftyp': msg = "The first box must be the signature box and the second " msg += "must be the file type box." raise IOError(msg) # jp2c must be preceeded by jp2h - jp2h_lst = [idx for (idx, box) in enumerate(boxes) if box.id == 'jp2h'] + jp2h_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2h'] jp2h_idx = jp2h_lst[0] - jp2c_lst = [idx for (idx, box) in enumerate(boxes) if box.id == 'jp2c'] + jp2c_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2c'] if len(jp2c_lst) == 0: msg = "A codestream box must be defined in the outermost " msg += "list of boxes." @@ -471,27 +471,27 @@ class Jp2k(Jp2kBox): # 1st jp2 header box must be ihdr jp2h = boxes[jp2h_idx] - if jp2h.box[0].id != 'ihdr': + if jp2h.box[0].box_id != 'ihdr': msg = "The first box in the jp2 header box must be the image " msg += "header box." raise IOError(msg) # colr must be present in jp2 header box. jp2hb = jp2h.box - colr_lst = [j for (j, box) in enumerate(jp2h.box) if box.id == 'colr'] + colr_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'colr'] if len(colr_lst) == 0: msg = "The jp2 header box must contain a color definition box." raise IOError(msg) colr = jp2h.box[colr_lst[0]] # Any cdef box must be in the jp2 header following the image header. - cdef_lst = [j for (j, box) in enumerate(boxes) if box.id == 'cdef'] + cdef_lst = [j for (j, box) in enumerate(boxes) if box.box_id == 'cdef'] if len(cdef_lst) != 0: msg = "Any channel defintion box must be in the JP2 header " msg += "following the image header." raise IOError(msg) - cdef_lst = [j for (j, box) in enumerate(jp2h.box) if box.id == 'cdef'] + cdef_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'cdef'] if len(cdef_lst) > 1: msg = "Only one channel definition box is allowed in the " msg += "JP2 header." @@ -515,8 +515,8 @@ class Jp2k(Jp2kBox): with open(filename, 'wb') as ofile: for box in boxes: - if box.id != 'jp2c': - box._write(ofile) + if box.box_id != 'jp2c': + box.write(ofile) else: # The codestream gets written last. if len(self.box) == 0: @@ -530,7 +530,7 @@ class Jp2k(Jp2kBox): else: # OK, I'm a jp2 file. Need to find out where the # raw codestream actually starts. - jp2c = [box for box in self.box if box.id == 'jp2c'] + jp2c = [box for box in self.box if box.box_id == 'jp2c'] jp2c = jp2c[0] ofile.write(struct.pack('>I', jp2c.length + 8)) ofile.write('jp2c'.encode()) @@ -989,7 +989,7 @@ class Jp2k(Jp2kBox): if self._codec_format == opj2._CODEC_J2K: codestream = Codestream(fp, header_only=header_only) else: - box = [x for x in self.box if x.id == 'jp2c'] + box = [x for x in self.box if x.box_id == 'jp2c'] if len(box) != 1: msg = "JP2 files must have a single codestream." raise RuntimeError(msg) diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index abc9f88..512acf2 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -88,7 +88,7 @@ class TestChannelDefinition(unittest.TestCase): jp2 = Jp2k(tfile.name) jp2h = jp2.box[2] - boxes = [box.id for box in jp2h.box] + boxes = [box.box_id for box in jp2h.box] self.assertEqual(boxes, ['ihdr', 'colr', 'cdef']) self.assertEqual(jp2h.box[2].index, (0, 1, 2)) self.assertEqual(jp2h.box[2].channel_type, (0, 0, 0)) @@ -108,7 +108,7 @@ class TestChannelDefinition(unittest.TestCase): jp2 = Jp2k(tfile.name) jp2h = jp2.box[2] - boxes = [box.id for box in jp2h.box] + boxes = [box.box_id for box in jp2h.box] self.assertEqual(boxes, ['ihdr', 'colr', 'cdef']) self.assertEqual(jp2h.box[2].index, (0, 1, 2, 3)) self.assertEqual(jp2h.box[2].channel_type, (0, 0, 0, 1)) @@ -141,7 +141,7 @@ class TestChannelDefinition(unittest.TestCase): jp2 = Jp2k(tfile.name) jp2h = jp2.box[2] - boxes = [box.id for box in jp2h.box] + boxes = [box.box_id for box in jp2h.box] self.assertEqual(boxes, ['ihdr', 'colr', 'cdef']) self.assertEqual(jp2h.box[2].index, (0,)) self.assertEqual(jp2h.box[2].channel_type, (0,)) @@ -161,7 +161,7 @@ class TestChannelDefinition(unittest.TestCase): jp2 = Jp2k(tfile.name) jp2h = jp2.box[2] - boxes = [box.id for box in jp2h.box] + boxes = [box.box_id for box in jp2h.box] self.assertEqual(boxes, ['ihdr', 'colr', 'cdef']) self.assertEqual(jp2h.box[2].index, (0, 1)) self.assertEqual(jp2h.box[2].channel_type, (0, 1)) @@ -309,7 +309,7 @@ class TestXML(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix=".jp2") as tfile: j2k.wrap(tfile.name, boxes=boxes) jp2 = Jp2k(tfile.name) - self.assertEqual(jp2.box[3].id, 'xml ') + self.assertEqual(jp2.box[3].box_id, 'xml ') self.assertEqual(ET.tostring(jp2.box[3].xml), b'0') @@ -326,7 +326,7 @@ class TestXML(unittest.TestCase): j2k.wrap(tfile.name, boxes=boxes) jp2 = Jp2k(tfile.name) - output_boxes = [box.id for box in jp2.box] + output_boxes = [box.box_id for box in jp2.box] self.assertEqual(output_boxes, ['jP ', 'ftyp', 'jp2h', 'xml ', 'jp2c']) @@ -449,37 +449,37 @@ class TestJp2Boxes(unittest.TestCase): def test_default_ContiguousCodestreamBox(self): b = ContiguousCodestreamBox() - self.assertEqual(b.id, 'jp2c') - self.assertEqual(b.main_header, []) + self.assertEqual(b.box_id, 'jp2c') + self.assertIsNone(b.main_header) def verify_wrapped_raw(self, jp2file): # Shared method by at least two tests. jp2 = Jp2k(jp2file) self.assertEqual(len(jp2.box), 4) - self.assertEqual(jp2.box[0].id, 'jP ') + self.assertEqual(jp2.box[0].box_id, 'jP ') self.assertEqual(jp2.box[0].offset, 0) self.assertEqual(jp2.box[0].length, 12) self.assertEqual(jp2.box[0].longname, 'JPEG 2000 Signature') - self.assertEqual(jp2.box[1].id, 'ftyp') + self.assertEqual(jp2.box[1].box_id, 'ftyp') self.assertEqual(jp2.box[1].offset, 12) self.assertEqual(jp2.box[1].length, 20) self.assertEqual(jp2.box[1].longname, 'File Type') - self.assertEqual(jp2.box[2].id, 'jp2h') + self.assertEqual(jp2.box[2].box_id, 'jp2h') self.assertEqual(jp2.box[2].offset, 32) self.assertEqual(jp2.box[2].length, 45) self.assertEqual(jp2.box[2].longname, 'JP2 Header') - self.assertEqual(jp2.box[3].id, 'jp2c') + self.assertEqual(jp2.box[3].box_id, 'jp2c') self.assertEqual(jp2.box[3].offset, 77) self.assertEqual(jp2.box[3].length, 115228) # jp2h super box self.assertEqual(len(jp2.box[2].box), 2) - self.assertEqual(jp2.box[2].box[0].id, 'ihdr') + self.assertEqual(jp2.box[2].box[0].box_id, 'ihdr') self.assertEqual(jp2.box[2].box[0].offset, 40) self.assertEqual(jp2.box[2].box[0].length, 22) self.assertEqual(jp2.box[2].box[0].longname, 'Image Header') @@ -492,7 +492,7 @@ class TestJp2Boxes(unittest.TestCase): self.assertEqual(jp2.box[2].box[0].colorspace_unknown, False) self.assertEqual(jp2.box[2].box[0].ip_provided, False) - self.assertEqual(jp2.box[2].box[1].id, 'colr') + self.assertEqual(jp2.box[2].box[1].box_id, 'colr') self.assertEqual(jp2.box[2].box[1].offset, 62) self.assertEqual(jp2.box[2].box[1].length, 15) self.assertEqual(jp2.box[2].box[1].longname, 'Colour Specification') @@ -511,7 +511,7 @@ class TestJp2Boxes(unittest.TestCase): j2k = Jp2k(self.j2kfile) with tempfile.NamedTemporaryFile(suffix=".jp2") as tfile: jp2 = j2k.wrap(tfile.name) - boxes = [box.id for box in jp2.box] + boxes = [box.box_id for box in jp2.box] self.assertEqual(boxes, ['jP ', 'ftyp', 'jp2h', 'jp2c']) def test_default_layout_but_with_specified_boxes(self): diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 1938bfe..424d079 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -102,7 +102,7 @@ class TestJp2k(unittest.TestCase): warnings.simplefilter("ignore") jp2k = Jp2k(self._bad_xml_file) - self.assertEqual(jp2k.box[3].id, 'xml ') + self.assertEqual(jp2k.box[3].box_id, 'xml ') self.assertEqual(jp2k.box[3].offset, 77) self.assertEqual(jp2k.box[3].length, 28) self.assertIsNone(jp2k.box[3].xml) @@ -184,37 +184,37 @@ class TestJp2k(unittest.TestCase): # top-level boxes self.assertEqual(len(jp2k.box), 6) - self.assertEqual(jp2k.box[0].id, 'jP ') + self.assertEqual(jp2k.box[0].box_id, 'jP ') self.assertEqual(jp2k.box[0].offset, 0) self.assertEqual(jp2k.box[0].length, 12) self.assertEqual(jp2k.box[0].longname, 'JPEG 2000 Signature') - self.assertEqual(jp2k.box[1].id, 'ftyp') + self.assertEqual(jp2k.box[1].box_id, 'ftyp') self.assertEqual(jp2k.box[1].offset, 12) self.assertEqual(jp2k.box[1].length, 20) self.assertEqual(jp2k.box[1].longname, 'File Type') - self.assertEqual(jp2k.box[2].id, 'jp2h') + self.assertEqual(jp2k.box[2].box_id, 'jp2h') self.assertEqual(jp2k.box[2].offset, 32) self.assertEqual(jp2k.box[2].length, 45) self.assertEqual(jp2k.box[2].longname, 'JP2 Header') - self.assertEqual(jp2k.box[3].id, 'uuid') + self.assertEqual(jp2k.box[3].box_id, 'uuid') self.assertEqual(jp2k.box[3].offset, 77) self.assertEqual(jp2k.box[3].length, 638) - self.assertEqual(jp2k.box[4].id, 'uuid') + self.assertEqual(jp2k.box[4].box_id, 'uuid') self.assertEqual(jp2k.box[4].offset, 715) self.assertEqual(jp2k.box[4].length, 2412) - self.assertEqual(jp2k.box[5].id, 'jp2c') + self.assertEqual(jp2k.box[5].box_id, 'jp2c') self.assertEqual(jp2k.box[5].offset, 3127) self.assertEqual(jp2k.box[5].length, 1132296) # jp2h super box self.assertEqual(len(jp2k.box[2].box), 2) - self.assertEqual(jp2k.box[2].box[0].id, 'ihdr') + self.assertEqual(jp2k.box[2].box[0].box_id, 'ihdr') self.assertEqual(jp2k.box[2].box[0].offset, 40) self.assertEqual(jp2k.box[2].box[0].length, 22) self.assertEqual(jp2k.box[2].box[0].longname, 'Image Header') @@ -227,7 +227,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[2].box[0].colorspace_unknown, False) self.assertEqual(jp2k.box[2].box[0].ip_provided, False) - self.assertEqual(jp2k.box[2].box[1].id, 'colr') + self.assertEqual(jp2k.box[2].box[1].box_id, 'colr') self.assertEqual(jp2k.box[2].box[1].offset, 62) self.assertEqual(jp2k.box[2].box[1].length, 15) self.assertEqual(jp2k.box[2].box[1].longname, 'Colour Specification') @@ -272,7 +272,7 @@ class TestJp2k(unittest.TestCase): jp2k = Jp2k(tfile.name) - self.assertEqual(jp2k.box[5].id, 'jp2c') + self.assertEqual(jp2k.box[5].box_id, 'jp2c') self.assertEqual(jp2k.box[5].offset, 3127) self.assertEqual(jp2k.box[5].length, 1133427 + 8) @@ -303,8 +303,8 @@ class TestJp2k(unittest.TestCase): # The top level boxes in each file should match. for j in range(len(baseline_jp2.box)): - self.assertEqual(new_jp2.box[j].id, - baseline_jp2.box[j].id) + self.assertEqual(new_jp2.box[j].box_id, + baseline_jp2.box[j].box_id) self.assertEqual(new_jp2.box[j].offset, baseline_jp2.box[j].offset) self.assertEqual(new_jp2.box[j].length, @@ -479,18 +479,18 @@ class TestJp2k(unittest.TestCase): jp2k = Jp2k(tfile.name) - self.assertEqual(jp2k.box[3].id, 'uinf') + self.assertEqual(jp2k.box[3].box_id, 'uinf') self.assertEqual(jp2k.box[3].offset, 77) self.assertEqual(jp2k.box[3].length, 50) - self.assertEqual(jp2k.box[3].box[0].id, 'ulst') + self.assertEqual(jp2k.box[3].box[0].box_id, 'ulst') self.assertEqual(jp2k.box[3].box[0].offset, 85) self.assertEqual(jp2k.box[3].box[0].length, 26) ulst = [] ulst.append(uuid.UUID('00000000-0000-0000-0000-000000000000')) self.assertEqual(jp2k.box[3].box[0].ulst, ulst) - self.assertEqual(jp2k.box[3].box[1].id, 'url ') + self.assertEqual(jp2k.box[3].box[1].box_id, 'url ') self.assertEqual(jp2k.box[3].box[1].offset, 111) self.assertEqual(jp2k.box[3].box[1].length, 16) self.assertEqual(jp2k.box[3].box[1].version, 0) @@ -522,7 +522,7 @@ class TestJp2k(unittest.TestCase): jp2k = Jp2k(tfile.name) - self.assertEqual(jp2k.box[3].id, 'xml ') + self.assertEqual(jp2k.box[3].box_id, 'xml ') self.assertEqual(jp2k.box[3].offset, 77) self.assertEqual(jp2k.box[3].length, 36) @@ -567,10 +567,10 @@ class TestJp2k(unittest.TestCase): tfile2.flush() jasoc = Jp2k(tfile2.name) - self.assertEqual(jasoc.box[3].id, 'asoc') - self.assertEqual(jasoc.box[3].box[0].id, 'lbl ') + self.assertEqual(jasoc.box[3].box_id, 'asoc') + self.assertEqual(jasoc.box[3].box[0].box_id, 'lbl ') self.assertEqual(jasoc.box[3].box[0].label, 'label') - self.assertEqual(jasoc.box[3].box[1].id, 'xml ') + self.assertEqual(jasoc.box[3].box[1].box_id, 'xml ') def test_openjpeg_library_message(self): # Verify the error message produced by the openjpeg library. @@ -599,11 +599,11 @@ class TestJp2k(unittest.TestCase): Invalid\svalues\sfor\scomp\s=\s0\s+ :\sdx=1\sdy=0''', re.VERBOSE) if sys.hexversion < 0x03020000: - with self.assertRaisesRegexp(IOError, regexp) as ce: - d = j.read(reduce=3) + with self.assertRaisesRegexp((IOError, OSError), regexp) as ce: + d = j.read(reduce=1) else: - with self.assertRaisesRegex(IOError, regexp) as ce: - d = j.read(reduce=3) + with self.assertRaisesRegex((IOError, OSError), regexp) as ce: + d = j.read(reduce=1) def test_xmp_attribute(self): # Verify that we can read the XMP packet in our shipping example file. diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index a3b765e..b866489 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4001,11 +4001,11 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file1.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'xml ', 'jp2h', 'xml ', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -4050,10 +4050,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file2.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr', 'cdef']) # Signature box. Check for corruption. @@ -4096,10 +4096,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file3.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -4142,10 +4142,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file4.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -4183,10 +4183,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file5.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'colr']) # Signature box. Check for corruption. @@ -4230,10 +4230,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file6.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -4273,10 +4273,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file7.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'colr']) # Signature box. Check for corruption. @@ -4327,11 +4327,11 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file8.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'xml ', 'jp2c', 'xml ']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -4380,10 +4380,10 @@ class TestSuiteDump(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/file9.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'pclr', 'cmap', 'colr']) # Signature box. Check for corruption. @@ -5877,10 +5877,10 @@ class TestSuiteDump(unittest.TestCase): # colr box has bad length. jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -6010,10 +6010,10 @@ class TestSuiteDump(unittest.TestCase): # colr box has bad length. jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -6138,10 +6138,10 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/file409752.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -6272,10 +6272,10 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/issue104_jpxstream.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'pclr', 'cmap']) # Signature box. Check for corruption. @@ -6389,10 +6389,10 @@ class TestSuiteDump(unittest.TestCase): warnings.simplefilter("ignore") jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'XML ', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -6483,10 +6483,10 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/issue206_image-000.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -6583,13 +6583,13 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/Marrin.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr', 'cdef', 'res ']) - ids = [box.id for box in jp2.box[2].box[3].box] + ids = [box.box_id for box in jp2.box[2].box[3].box] self.assertEqual(ids, ['resd']) # Signature box. Check for corruption. @@ -6699,10 +6699,10 @@ class TestSuiteDump(unittest.TestCase): warnings.simplefilter("ignore") jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'pclr', 'cmap']) # Signature box. Check for corruption. @@ -6813,10 +6813,10 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/mem-b2b86b74-2753.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'rreq', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'pclr', 'cmap']) # Signature box. Check for corruption. @@ -6927,10 +6927,10 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/merged.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -7034,10 +7034,10 @@ class TestSuiteDump(unittest.TestCase): warnings.simplefilter("ignore") jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -7133,10 +7133,10 @@ class TestSuiteDump(unittest.TestCase): warnings.simplefilter("ignore") jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] self.assertEqual(ids, ['jP ', 'ftyp', 'jp2h', 'jp2c']) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. @@ -7229,12 +7229,12 @@ class TestSuiteDump(unittest.TestCase): 'input/nonregression/text_GBR.jp2') jp2 = Jp2k(jfile) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] lst = ['jP ', 'ftyp', 'rreq', 'jp2h', 'uuid', 'uuid', 'uuid', 'uuid', 'jp2c'] self.assertEqual(ids, lst) - ids = [box.id for box in jp2.box[3].box] + ids = [box.box_id for box in jp2.box[3].box] self.assertEqual(ids, ['ihdr', 'colr', 'res ']) # Signature box. Check for corruption. diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index 4139faf..9c7ac56 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -663,11 +663,11 @@ class TestSuiteWrite(unittest.TestCase): jp2 = Jp2k(tfile.name, 'wb') jp2.write(data, psnr=[30, 35, 50], prog='LRCP', numres=3) - ids = [box.id for box in jp2.box] + ids = [box.box_id for box in jp2.box] lst = ['jP ', 'ftyp', 'jp2h', 'jp2c'] self.assertEqual(ids, lst) - ids = [box.id for box in jp2.box[2].box] + ids = [box.box_id for box in jp2.box[2].box] self.assertEqual(ids, ['ihdr', 'colr']) # Signature box. Check for corruption. From 4d09208f205b967f746ef25b728fe1c7813f27c9 Mon Sep 17 00:00:00 2001 From: jevans Date: Mon, 8 Jul 2013 21:22:20 -0400 Subject: [PATCH 33/54] pylint work, low-level library function work, #71 Change the library organization around such that the library module contents are visible, but the module is protected. --- glymur/jp2k.py | 132 +++--- glymur/lib/__init__.py | 4 +- glymur/lib/openjp2.py | 601 ++++++++++++++-------------- glymur/lib/openjpeg.py | 82 ++-- glymur/lib/test/test_openjp2.py | 140 ++++--- glymur/lib/test/test_openjpeg.py | 8 +- glymur/test/test_callbacks.py | 10 +- glymur/test/test_config.py | 4 +- glymur/test/test_jp2box.py | 4 +- glymur/test/test_jp2k.py | 12 +- glymur/test/test_opj_suite.py | 10 +- glymur/test/test_opj_suite_neg.py | 2 +- glymur/test/test_opj_suite_write.py | 2 +- glymur/test/test_printing.py | 2 +- 14 files changed, 503 insertions(+), 510 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 2cc8712..f9e4cc5 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -18,13 +18,13 @@ import numpy as np from .codestream import Codestream from .core import * from .jp2box import * -from .lib import openjpeg as opj -from .lib import openjp2 as opj2 +from .lib import _openjpeg as _opj +from .lib import _openjp2 as _opj2 -_cspace_map = {'rgb': opj2._CLRSPC_SRGB, - 'gray': opj2._CLRSPC_GRAY, - 'grey': opj2._CLRSPC_GRAY, - 'ycc': opj2._CLRSPC_YCC} +_cspace_map = {'rgb': _opj2.CLRSPC_SRGB, + 'gray': _opj2.CLRSPC_GRAY, + 'grey': _opj2.CLRSPC_GRAY, + 'ycc': _opj2.CLRSPC_YCC} # Setup the default callback handlers. See the callback functions subsection # in the ctypes section of the Python documentation for a solid explanation of @@ -34,7 +34,7 @@ _CMPFUNC = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p) def _default_error_handler(msg, client_data): msg = "OpenJPEG library error: {0}".format(msg.decode('utf-8').rstrip()) - opj2._set_error_message(msg) + _opj2.set_error_message(msg) def _default_info_handler(msg, client_data): @@ -113,12 +113,12 @@ class Jp2k(Jp2kBox): buffer = f.read(2) signature, = struct.unpack('>H', buffer) if signature == 0xff4f: - self._codec_format = opj2._CODEC_J2K + self._codec_format = _opj2.CODEC_J2K # That's it, we're done. The codestream object is only # produced upon explicit request. return - self._codec_format = opj2._CODEC_JP2 + self._codec_format = _opj2.CODEC_JP2 # Should be JP2. # First 4 bytes should be 12, the length of the 'jP ' box. @@ -210,17 +210,17 @@ class Jp2k(Jp2kBox): >>> j.write(data.astype(np.uint8)) """ - cparams = opj2._set_default_encoder_parameters() + cparams = _opj2.set_default_encoder_parameters() outfile = self.filename.encode() - n = opj2._PATH_LEN - len(outfile) + n = _opj2.PATH_LEN - len(outfile) outfile += b'0' * n cparams.outfile = outfile if self.filename[-4:].lower() == '.jp2': - codec_fmt = opj2._CODEC_JP2 + codec_fmt = _opj2.CODEC_JP2 else: - codec_fmt = opj2._CODEC_J2K + codec_fmt = _opj2.CODEC_J2K cparams.cod_format = codec_fmt @@ -304,7 +304,7 @@ class Jp2k(Jp2kBox): if tilesize is not None: cparams.cp_tdx = tilesize[1] cparams.cp_tdy = tilesize[0] - cparams.tile_size_on = opj2._TRUE + cparams.tile_size_on = _opj2.TRUE if cratios is not None and psnr is not None: msg = "Cannot specify cratios and psnr together." @@ -323,12 +323,12 @@ class Jp2k(Jp2kBox): if colorspace is None: if img_array.shape[2] == 1 or img_array.shape[2] == 2: - colorspace = opj2._CLRSPC_GRAY + colorspace = _opj2.CLRSPC_GRAY else: # No YCC unless specifically told to do so. - colorspace = opj2._CLRSPC_SRGB + colorspace = _opj2.CLRSPC_SRGB else: - if codec_fmt == opj2._CODEC_J2K: + if codec_fmt == _opj2.CODEC_J2K: raise IOError('Do not specify a colorspace with J2K.') colorspace = colorspace.lower() if colorspace not in ('rgb', 'grey', 'gray'): @@ -341,12 +341,12 @@ class Jp2k(Jp2kBox): colorspace = _cspace_map[colorspace] if mct is None: - if colorspace == opj2._CLRSPC_SRGB: + if colorspace == _opj2.CLRSPC_SRGB: cparams.tcp_mct = 1 else: cparams.tcp_mct = 0 else: - if mct and colorspace == opj2._CLRSPC_GRAY: + if mct and colorspace == _opj2.CLRSPC_GRAY: msg = "Cannot specify usage of the multi component transform " msg += "if the colorspace is gray." raise IOError(msg) @@ -359,7 +359,7 @@ class Jp2k(Jp2kBox): else: raise RuntimeError("unhandled datatype") - comptparms = (opj2._image_comptparm_t * num_comps)() + comptparms = (_opj2.image_comptparm_t * num_comps)() for j in range(num_comps): comptparms[j].dx = cparams.subsampling_dx comptparms[j].dy = cparams.subsampling_dy @@ -371,7 +371,7 @@ class Jp2k(Jp2kBox): comptparms[j].bpp = comp_prec comptparms[j].sgnd = 0 - image = opj2._image_create(comptparms, colorspace) + image = _opj2.image_create(comptparms, colorspace) # set image offset and reference grid image.contents.x0 = cparams.image_offset_x0 @@ -388,23 +388,23 @@ class Jp2k(Jp2kBox): src = layer.ctypes.data ctypes.memmove(dest, src, layer.nbytes) - codec = opj2._create_compress(codec_fmt) + codec = _opj2.create_compress(codec_fmt) if verbose: - opj2._set_info_handler(codec, _info_callback) + _opj2.set_info_handler(codec, _info_callback) else: - opj2._set_info_handler(codec, None) + _opj2.set_info_handler(codec, None) - opj2._set_warning_handler(codec, _warning_callback) - opj2._set_error_handler(codec, _error_callback) - opj2._setup_encoder(codec, cparams, image) - strm = opj2._stream_create_default_file_stream_v3(self.filename, False) - opj2._start_compress(codec, image, strm) - opj2._encode(codec, strm) - opj2._end_compress(codec, strm) - opj2._stream_destroy_v3(strm) - opj2._destroy_codec(codec) - opj2._image_destroy(image) + _opj2.set_warning_handler(codec, _warning_callback) + _opj2.set_error_handler(codec, _error_callback) + _opj2.setup_encoder(codec, cparams, image) + strm = _opj2.stream_create_default_file_stream_v3(self.filename, False) + _opj2.start_compress(codec, image, strm) + _opj2.encode(codec, strm) + _opj2.end_compress(codec, strm) + _opj2.stream_destroy_v3(strm) + _opj2.destroy_codec(codec) + _opj2.image_destroy(image) self._parse() @@ -589,7 +589,7 @@ class Jp2k(Jp2kBox): >>> thumbnail.shape (728, 1296, 3) """ - if opj2._OPENJP2 is not None: + if _opj2.OPENJP2 is not None: img = self._read_openjp2(**kwargs) else: img = self._read_openjpeg(**kwargs) @@ -629,38 +629,38 @@ class Jp2k(Jp2kBox): with ExitStack() as stack: # Set decoding parameters. - dparameters = opj.dparameters_t() - opj._set_default_decoder_parameters(ctypes.byref(dparameters)) + dparameters = _opj.dparameters_t() + _opj.set_default_decoder_parameters(ctypes.byref(dparameters)) dparameters.cp_reduce = reduce dparameters.decod_format = self._codec_format infile = self.filename.encode() - nelts = opj._PATH_LEN - len(infile) + nelts = _opj.PATH_LEN - len(infile) infile += b'0' * nelts dparameters.infile = infile - dinfo = opj._create_decompress(dparameters.decod_format) + dinfo = _opj.create_decompress(dparameters.decod_format) - event_mgr = opj.event_mgr_t() + event_mgr = _opj.event_mgr_t() info_handler = ctypes.cast(_info_callback, ctypes.c_void_p) event_mgr.info_handler = info_handler if verbose else None event_mgr.warning_handler = ctypes.cast(_warning_callback, ctypes.c_void_p) event_mgr.error_handler = ctypes.cast(_error_callback, ctypes.c_void_p) - opj._set_event_mgr(dinfo, ctypes.byref(event_mgr)) + _opj.set_event_mgr(dinfo, ctypes.byref(event_mgr)) - opj._setup_decoder(dinfo, dparameters) + _opj.setup_decoder(dinfo, dparameters) with open(self.filename, 'rb') as fp: src = fp.read() - cio = opj._cio_open(dinfo, src) + cio = _opj.cio_open(dinfo, src) - image = opj._decode(dinfo, cio) + image = _opj.decode(dinfo, cio) - stack.callback(opj._image_destroy, image) - stack.callback(opj._destroy_decompress, dinfo) - stack.callback(opj._cio_close, cio) + stack.callback(_opj.image_destroy, image) + stack.callback(_opj.destroy_decompress, dinfo) + stack.callback(_opj.cio_close, cio) ncomps = image.contents.numcomps component = image.contents.comps[0] @@ -784,10 +784,10 @@ class Jp2k(Jp2kBox): img_array : ndarray The individual image components or a single array. """ - dparam = opj2._set_default_decoder_parameters() + dparam = _opj2.set_default_decoder_parameters() infile = self.filename.encode() - nelts = opj2._PATH_LEN - len(infile) + nelts = _opj2.PATH_LEN - len(infile) infile += b'0' * nelts dparam.infile = infile @@ -820,31 +820,31 @@ class Jp2k(Jp2kBox): dparam.nb_tile_to_decode = 1 with ExitStack() as stack: - stream = opj2._stream_create_default_file_stream_v3(self.filename, + stream = _opj2.stream_create_default_file_stream_v3(self.filename, True) - stack.callback(opj2._stream_destroy_v3, stream) - codec = opj2._create_decompress(self._codec_format) - stack.callback(opj2._destroy_codec, codec) + stack.callback(_opj2.stream_destroy_v3, stream) + codec = _opj2.create_decompress(self._codec_format) + stack.callback(_opj2.destroy_codec, codec) - opj2._set_error_handler(codec, _error_callback) - opj2._set_warning_handler(codec, _warning_callback) + _opj2.set_error_handler(codec, _error_callback) + _opj2.set_warning_handler(codec, _warning_callback) if verbose: - opj2._set_info_handler(codec, _info_callback) + _opj2.set_info_handler(codec, _info_callback) else: - opj2._set_info_handler(codec, None) + _opj2.set_info_handler(codec, None) - opj2._setup_decoder(codec, dparam) - image = opj2._read_header(stream, codec) - stack.callback(opj2._image_destroy, image) + _opj2.setup_decoder(codec, dparam) + image = _opj2.read_header(stream, codec) + stack.callback(_opj2.image_destroy, image) if dparam.nb_tile_to_decode: - opj2._get_decoded_tile(codec, stream, image, dparam.tile_index) + _opj2.get_decoded_tile(codec, stream, image, dparam.tile_index) else: - opj2._set_decode_area(codec, image, + _opj2.set_decode_area(codec, image, dparam.DA_x0, dparam.DA_y0, dparam.DA_x1, dparam.DA_y1) - opj2._decode(codec, stream, image) - opj2._end_decompress(codec, stream) + _opj2.decode(codec, stream, image) + _opj2.end_decompress(codec, stream) component = image.contents.comps[0] if component.sgnd: @@ -937,7 +937,7 @@ class Jp2k(Jp2kBox): NotImplementedError If the openjp2 library is not available. """ - if opj2._OPENJP2 is None: + if _opj2.OPENJP2 is None: msg = "Requires openjp2 library." raise NotImplementedError(msg) @@ -986,7 +986,7 @@ class Jp2k(Jp2kBox): If the file is JPX with more than one codestream. """ with open(self.filename, 'rb') as fp: - if self._codec_format == opj2._CODEC_J2K: + if self._codec_format == _opj2.CODEC_J2K: codestream = Codestream(fp, header_only=header_only) else: box = [x for x in self.box if x.box_id == 'jp2c'] diff --git a/glymur/lib/__init__.py b/glymur/lib/__init__.py index 8484e19..ebd4fa7 100644 --- a/glymur/lib/__init__.py +++ b/glymur/lib/__init__.py @@ -1,4 +1,4 @@ """This package organizes individual libraries employed by glymur.""" -from . import openjp2 -from . import openjpeg +from . import openjp2 as _openjp2 +from . import openjpeg as _openjpeg #from . import test diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index 167fda2..48aa431 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -6,7 +6,7 @@ import platform from ctypes.util import find_library -def _glymurrc_fname(): +def glymurrc_fname(): """Return the path to the configuration file. Search order: @@ -21,7 +21,7 @@ def _glymurrc_fname(): return fname # Either GLYMURCONFIGDIR/glymurrc or $HOME/.glymur/glymurrc - confdir = _get_configdir() + confdir = get_configdir() if confdir is not None: fname = os.path.join(confdir, 'glymurrc') if os.path.exists(fname): @@ -31,7 +31,7 @@ def _glymurrc_fname(): return None -def _get_openjpeg_config(): +def get_openjpeg_config(): libopenjpeg_path = find_library('openjpeg') # If we could not find it, then look in some likely locations. @@ -48,25 +48,25 @@ def _get_openjpeg_config(): try: if os.name == "nt": - _OPENJPEG = ctypes.windll.LoadLibrary(libopenjpeg_path) + OPENJPEG = ctypes.windll.LoadLibrary(libopenjpeg_path) else: - _OPENJPEG = ctypes.CDLL(libopenjpeg_path) + OPENJPEG = ctypes.CDLL(libopenjpeg_path) except OSError: - _OPENJPEG = None + OPENJPEG = None - if _OPENJPEG is not None: + if OPENJPEG is not None: # Must be at least 1.5.0 - _OPENJPEG.opj_version.restype = ctypes.c_char_p - v = _OPENJPEG.opj_version() + OPENJPEG.opj_version.restype = ctypes.c_char_p + v = OPENJPEG.opj_version() v = v.decode('utf-8') major, minor, patch = v.split('.') if minor != '5': - _OPENJPEG = None - return _OPENJPEG + OPENJPEG = None + return OPENJPEG -def _get_openjp2_config(): - filename = _glymurrc_fname() +def get_openjp2_config(): + filename = glymurrc_fname() if filename is not None: # Read the configuration file for the library location. parser = ConfigParser() @@ -81,25 +81,25 @@ def _get_openjp2_config(): try: if os.name == "nt": - _OPENJP2 = ctypes.windll.LoadLibrary(libopenjp2_path) + OPENJP2 = ctypes.windll.LoadLibrary(libopenjp2_path) else: - _OPENJP2 = ctypes.CDLL(libopenjp2_path) + OPENJP2 = ctypes.CDLL(libopenjp2_path) except OSError: msg = '"Library {0}" could not be loaded. Operating in degraded mode.' msg = msg.format(libopenjp2_path) warnings.warn(msg, UserWarning) - _OPENJP2 = None - return _OPENJP2 + OPENJP2 = None + return OPENJP2 -def _config(): +def config(): """Read configuration file. """ - _OPENJP2 = _get_openjp2_config() - _OPENJPEG = _get_openjpeg_config() - return _OPENJP2, _OPENJPEG + OPENJP2 = get_openjp2_config() + OPENJPEG = get_openjpeg_config() + return OPENJP2, OPENJPEG -def _get_configdir(): +def get_configdir(): """Return string representing the configuration directory. Default is $HOME/.config/glymur. You can override this with the @@ -126,8 +126,8 @@ else: from configparser import ConfigParser from configparser import NoOptionError -_OPENJP2, _OPENJPEG = _config() -if _OPENJP2 is None and _OPENJPEG is None: +OPENJP2, OPENJPEG = config() +if OPENJP2 is None and OPENJPEG is None: msg = "Neither the glymur configuration file could not be located " msg += "nor could openjpeg 1.5.1 be located. Glymur can only " msg += "operate under extremely degraded conditions." @@ -143,42 +143,42 @@ PCRL = 3 CPRL = 4 -_ERROR_MSG_LST = [] +ERROR_MSG_LST = [] # Map certain atomic OpenJPEG datatypes to the ctypes equivalents. -_bool_t = ctypes.c_int32 -_codec_t_p = ctypes.c_void_p -_prog_order_t_p = ctypes.c_int32 -_cinema_mode_t = ctypes.c_int32 -_rsiz_capabilities_t = ctypes.c_int32 -_stream_t_p = ctypes.c_void_p +bool_t = ctypes.c_int32 +codec_t_p = ctypes.c_void_p +prog_order_t_p = ctypes.c_int32 +cinema_mode_t = ctypes.c_int32 +rsiz_capabilities_t = ctypes.c_int32 +stream_t_p = ctypes.c_void_p -_PATH_LEN = 4096 +PATH_LEN = 4096 J2K_MAXRLVLS = 33 -_J2K_MAXBANDS = (3 * J2K_MAXRLVLS - 2) +J2K_MAXBANDS = (3 * J2K_MAXRLVLS - 2) -_JPWL_MAX_NO_TILESPECS = 16 +JPWL_MAX_NO_TILESPECS = 16 -_TRUE = 1 -_FALSE = 0 +TRUE = 1 +FALSE = 0 # supported color spaces -_CLRSPC_UNKNOWN = -1 -_CLRSPC_UNSPECIFIED = 0 -_CLRSPC_SRGB = 1 -_CLRSPC_GRAY = 2 -_CLRSPC_YCC = 3 +CLRSPC_UNKNOWN = -1 +CLRSPC_UNSPECIFIED = 0 +CLRSPC_SRGB = 1 +CLRSPC_GRAY = 2 +CLRSPC_YCC = 3 color_space_t = ctypes.c_int # supported codec -_codec_format_t = ctypes.c_int -_CODEC_UNKNOWN = -1 -_CODEC_J2K = 0 -_CODEC_JPT = 1 -_CODEC_JP2 = 2 +codec_format_t = ctypes.c_int +CODEC_UNKNOWN = -1 +CODEC_J2K = 0 +CODEC_JPT = 1 +CODEC_JP2 = 2 -class _poc_t(ctypes.Structure): +class poc_t(ctypes.Structure): """Progression order changes.""" # Resolution num start, Component num start, given by POC _fields_ = [ @@ -196,8 +196,8 @@ class _poc_t(ctypes.Structure): ("precno1", ctypes.c_uint32), # Progression order enum - ("prg1", _prog_order_t_p), - ("prg", _prog_order_t_p), + ("prg1", prog_order_t_p), + ("prg", prog_order_t_p), # Progression order string ("progorder", ctypes.c_char * 5), @@ -241,7 +241,7 @@ class _poc_t(ctypes.Structure): ("ty0_t", ctypes.c_uint32)] -class _dparameters_t(ctypes.Structure): +class dparameters_t(ctypes.Structure): """Decompression parameters""" _fields_ = [ # Set the number of highest resolutio levels to be discarded. The @@ -262,10 +262,10 @@ class _dparameters_t(ctypes.Structure): ("cp_layer", ctypes.c_uint32), # input file name - ("infile", ctypes.c_char * _PATH_LEN), + ("infile", ctypes.c_char * PATH_LEN), # output file name - ("outfile", ctypes.c_char * _PATH_LEN), + ("outfile", ctypes.c_char * PATH_LEN), # input file format 0: PGX, 1: PxM, 2: BMP 3:TIF # output file format 0: J2K, 1: JP2, 2: JPT @@ -280,7 +280,7 @@ class _dparameters_t(ctypes.Structure): ("DA_y1", ctypes.c_uint32), # verbose mode - ("m_verbose", _bool_t), + ("m_verbose", bool_t), # tile number of the decoded tile ("tile_index", ctypes.c_uint32), @@ -289,7 +289,7 @@ class _dparameters_t(ctypes.Structure): ("nb_tile_to_decode", ctypes.c_uint32), # activates the JPWL correction capabilities - ("jpwl_correct", _bool_t), + ("jpwl_correct", bool_t), # activates the JPWL correction capabilities ("jpwl_exp_comps", ctypes.c_int32), @@ -301,13 +301,13 @@ class _dparameters_t(ctypes.Structure): ("flags", ctypes.c_uint32)] -class _cparameters_t(ctypes.Structure): +class cparameters_t(ctypes.Structure): """Compression parameters""" _fields_ = [ # size of tile: # tile_size_on = false (not in argument) or # = true (in argument) - ("tile_size_on", _bool_t), + ("tile_size_on", bool_t), # XTOsiz, YTOsiz ("cp_tx0", ctypes.c_int), @@ -339,7 +339,7 @@ class _cparameters_t(ctypes.Structure): ("prog_order", ctypes.c_int), # progression order changes - ("poc", _poc_t * 32), + ("poc", poc_t * 32), # number of progression order changes (POC), default to 0 ("numpocs", ctypes.c_uint), @@ -385,16 +385,16 @@ class _cparameters_t(ctypes.Structure): ("prch_init", ctypes.c_int * J2K_MAXRLVLS), # input file name - ("infile", ctypes.c_char * _PATH_LEN), + ("infile", ctypes.c_char * PATH_LEN), # output file name - ("outfile", ctypes.c_char * _PATH_LEN), + ("outfile", ctypes.c_char * PATH_LEN), # DEPRECATED. ("index_on", ctypes.c_int), # DEPRECATED. - ("index", ctypes.c_char * _PATH_LEN), + ("index", ctypes.c_char * PATH_LEN), # subimage encoding: origin image offset in x direction # subimage encoding: origin image offset in y direction @@ -413,25 +413,25 @@ class _cparameters_t(ctypes.Structure): # JPWL encoding parameters # enables writing of EPC in MH, thus activating JPWL - ("jpwl_epc_on", _bool_t), + ("jpwl_epc_on", bool_t), # error protection method for MH (0,1,16,32,37-128) ("jpwl_hprot_mh", ctypes.c_int), # tile number of header protection specification (>=0) - ("jpwl_hprot_tph_tileno", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_hprot_tph_tileno", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # error protection methods for TPHs (0,1,16,32,37-128) - ("jpwl_hprot_tph", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_hprot_tph", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # tile number of packet protection specification (>=0) - ("jpwl_pprot_tileno", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_pprot_tileno", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # packet number of packet protection specification (>=0) - ("jpwl_pprot_packno", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_pprot_packno", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # error protection methods for packets (0,1,16,32,37-128) - ("jpwl_pprot", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_pprot", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # enables writing of ESD, (0=no/1/2 bytes) ("jpwl_sens_size", ctypes.c_int), @@ -446,20 +446,20 @@ class _cparameters_t(ctypes.Structure): ("jpwl_sens_mh", ctypes.c_int), # tile number of sensitivity specification (>=0) - ("jpwl_sens_tph_tileno", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_sens_tph_tileno", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # sensitivity methods for TPHs (-1=no,0-7) - ("jpwl_sens_tph", ctypes.c_int * _JPWL_MAX_NO_TILESPECS), + ("jpwl_sens_tph", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # Digital Cinema compliance 0-not compliant, 1-compliant - ("cp_cinema", _cinema_mode_t), + ("cp_cinema", cinema_mode_t), # Maximum rate for each component. # If == 0, component size limitation is not considered ("max_comp_size", ctypes.c_int), # Profile name - ("cp_rsiz", _rsiz_capabilities_t), + ("cp_rsiz", rsiz_capabilities_t), # Tile part generation ("tp_on", ctypes.c_uint8), @@ -471,14 +471,14 @@ class _cparameters_t(ctypes.Structure): ("tcp_mct", ctypes.c_uint8), # Enable JPIP indexing - ("jpip_on", _bool_t), + ("jpip_on", bool_t), # Naive implementation of MCT restricted to a single reversible array # based encoding without offset concerning all the components. ("mct_data", ctypes.c_void_p)] -class _image_comp_t(ctypes.Structure): +class image_comp_t(ctypes.Structure): """defines a single image component""" _fields_ = [ # XRsiz, YRsiz: horizontal, vertical separation of ith component with @@ -514,7 +514,7 @@ class _image_comp_t(ctypes.Structure): ("data", ctypes.POINTER(ctypes.c_int32))] -class _image_t(ctypes.Structure): +class image_t(ctypes.Structure): """defines image data and characteristics""" _fields_ = [ # XOsiz, YOsiz: horizontal and vertical offset from the origin of the @@ -533,7 +533,7 @@ class _image_t(ctypes.Structure): ("color_space", color_space_t), # image components - ("comps", ctypes.POINTER(_image_comp_t)), + ("comps", ctypes.POINTER(image_comp_t)), # restricted ICC profile buffer ("icc_profile_buf", ctypes.POINTER(ctypes.c_uint8)), @@ -542,7 +542,7 @@ class _image_t(ctypes.Structure): ("icc_profile_len", ctypes.c_uint32)] -class _image_comptparm_t(ctypes.Structure): +class image_comptparm_t(ctypes.Structure): """component parameters structure used by image_create function""" _fields_ = [ # XRsiz, YRsiz: horizontal, vertical separation of a sample of ith @@ -568,7 +568,7 @@ class _image_comptparm_t(ctypes.Structure): ("sgnd", ctypes.c_uint32)] -class _tccp_info_t(ctypes.Structure): +class tccp_info_t(ctypes.Structure): """tile-component coding parameters information""" _fields_ = [ # component index @@ -596,8 +596,8 @@ class _tccp_info_t(ctypes.Structure): ("qntsty", ctypes.c_uint32), # stepsizes used for quantization - ("stepsizes_mant", ctypes.c_uint32 * _J2K_MAXBANDS), - ("stepsizes_expn", ctypes.c_uint32 * _J2K_MAXBANDS), + ("stepsizes_mant", ctypes.c_uint32 * J2K_MAXBANDS), + ("stepsizes_expn", ctypes.c_uint32 * J2K_MAXBANDS), # stepsizes used for quantization ("numgbits", ctypes.c_uint32), @@ -612,7 +612,7 @@ class _tccp_info_t(ctypes.Structure): ("prch", ctypes.c_uint32 * J2K_MAXRLVLS)] -class _tile_info_v2_t(ctypes.Structure): +class tile_info_v2_t(ctypes.Structure): """tile coding parameters information""" _fields_ = [ # number (index) of tile @@ -622,7 +622,7 @@ class _tile_info_v2_t(ctypes.Structure): ("csty", ctypes.c_uint32), # progression order - ("prg", _prog_order_t_p), + ("prg", prog_order_t_p), # number of layers ("numlayers", ctypes.c_uint32), @@ -631,10 +631,10 @@ class _tile_info_v2_t(ctypes.Structure): ("mct", ctypes.c_uint32), # information concerning tile component parameters - ("tccp_info", ctypes.POINTER(_tccp_info_t))] + ("tccp_info", ctypes.POINTER(tccp_info_t))] -class _codestream_info_v2_t(ctypes.Structure): +class codestream_info_v2_t(ctypes.Structure): """information about the codestream""" _fields_ = [ # tile info @@ -654,152 +654,151 @@ class _codestream_info_v2_t(ctypes.Structure): ("nbcomps", ctypes.c_uint32), # default information regarding tiles inside of image - ("m_default_tile_info", _tile_info_v2_t), + ("m_default_tile_info", tile_info_v2_t), # information regarding tiles inside of image - ("tile_info", ctypes.POINTER(_tile_info_v2_t))] + ("tile_info", ctypes.POINTER(tile_info_v2_t))] # Restrict the input and output argument types for each function used in the # API. -if _OPENJP2 is not None: - _OPENJP2.opj_create_compress.restype = _codec_t_p - _OPENJP2.opj_create_compress.argtypes = [_codec_format_t] +if OPENJP2 is not None: + OPENJP2.opj_create_compress.restype = codec_t_p + OPENJP2.opj_create_compress.argtypes = [codec_format_t] - _OPENJP2.opj_create_decompress.argtypes = [_codec_format_t] - _OPENJP2.opj_create_decompress.restype = _codec_t_p + OPENJP2.opj_create_decompress.argtypes = [codec_format_t] + OPENJP2.opj_create_decompress.restype = codec_t_p - _argtypes = [_codec_t_p, _stream_t_p, ctypes.POINTER(_image_t)] - _OPENJP2.opj_decode.argtypes = _argtypes + argtypes = [codec_t_p, stream_t_p, ctypes.POINTER(image_t)] + OPENJP2.opj_decode.argtypes = argtypes - _argtypes = [_codec_t_p, ctypes.c_uint32, - ctypes.POINTER(ctypes.c_uint8), - ctypes.c_uint32, - _stream_t_p] - _OPENJP2.opj_decode_tile_data.argtypes = _argtypes + argtypes = [codec_t_p, ctypes.c_uint32, + ctypes.POINTER(ctypes.c_uint8), + ctypes.c_uint32, + stream_t_p] + OPENJP2.opj_decode_tile_data.argtypes = argtypes - _argtypes = [ctypes.POINTER(ctypes.POINTER(_codestream_info_v2_t))] - _OPENJP2.opj_destroy_cstr_info.argtypes = _argtypes - _OPENJP2.opj_destroy_cstr_info.restype = ctypes.c_void_p + argtypes = [ctypes.POINTER(ctypes.POINTER(codestream_info_v2_t))] + OPENJP2.opj_destroy_cstr_info.argtypes = argtypes + OPENJP2.opj_destroy_cstr_info.restype = ctypes.c_void_p - _argtypes = [_codec_t_p, _stream_t_p] - _OPENJP2.opj_encode.argtypes = _argtypes + argtypes = [codec_t_p, stream_t_p] + OPENJP2.opj_encode.argtypes = argtypes - _OPENJP2.opj_get_cstr_info.argtypes = [_codec_t_p] - _OPENJP2.opj_get_cstr_info.restype = ctypes.POINTER(_codestream_info_v2_t) + OPENJP2.opj_get_cstr_info.argtypes = [codec_t_p] + OPENJP2.opj_get_cstr_info.restype = ctypes.POINTER(codestream_info_v2_t) - _argtypes = [_codec_t_p, - _stream_t_p, - ctypes.POINTER(_image_t), - ctypes.c_uint32] - _OPENJP2.opj_get_decoded_tile.argtypes = _argtypes + argtypes = [codec_t_p, + stream_t_p, + ctypes.POINTER(image_t), + ctypes.c_uint32] + OPENJP2.opj_get_decoded_tile.argtypes = argtypes - _argtypes = [ctypes.c_uint32, - ctypes.POINTER(_image_comptparm_t), - color_space_t] - _OPENJP2.opj_image_create.argtypes = _argtypes - _OPENJP2.opj_image_create.restype = ctypes.POINTER(_image_t) + argtypes = [ctypes.c_uint32, + ctypes.POINTER(image_comptparm_t), + color_space_t] + OPENJP2.opj_image_create.argtypes = argtypes + OPENJP2.opj_image_create.restype = ctypes.POINTER(image_t) - _argtypes = [ctypes.c_uint32, - ctypes.POINTER(_image_comptparm_t), - color_space_t] - _OPENJP2.opj_image_tile_create.argtypes = _argtypes - _OPENJP2.opj_image_tile_create.restype = ctypes.POINTER(_image_t) + argtypes = [ctypes.c_uint32, + ctypes.POINTER(image_comptparm_t), + color_space_t] + OPENJP2.opj_image_tile_create.argtypes = argtypes + OPENJP2.opj_image_tile_create.restype = ctypes.POINTER(image_t) - _OPENJP2.opj_image_destroy.argtypes = [ctypes.POINTER(_image_t)] + OPENJP2.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] - _argtypes = [_stream_t_p, _codec_t_p, - ctypes.POINTER(ctypes.POINTER(_image_t))] - _OPENJP2.opj_read_header.argtypes = _argtypes + argtypes = [stream_t_p, codec_t_p, + ctypes.POINTER(ctypes.POINTER(image_t))] + OPENJP2.opj_read_header.argtypes = argtypes - _argtypes = [_codec_t_p, - _stream_t_p, - ctypes.POINTER(ctypes.c_uint32), - ctypes.POINTER(ctypes.c_uint32), - ctypes.POINTER(ctypes.c_int32), - ctypes.POINTER(ctypes.c_int32), - ctypes.POINTER(ctypes.c_int32), - ctypes.POINTER(ctypes.c_int32), - ctypes.POINTER(ctypes.c_uint32), - ctypes.POINTER(_bool_t)] - _OPENJP2.opj_read_tile_header.argtypes = _argtypes + argtypes = [codec_t_p, + stream_t_p, + ctypes.POINTER(ctypes.c_uint32), + ctypes.POINTER(ctypes.c_uint32), + ctypes.POINTER(ctypes.c_int32), + ctypes.POINTER(ctypes.c_int32), + ctypes.POINTER(ctypes.c_int32), + ctypes.POINTER(ctypes.c_int32), + ctypes.POINTER(ctypes.c_uint32), + ctypes.POINTER(bool_t)] + OPENJP2.opj_read_tile_header.argtypes = argtypes - _argtypes = [_codec_t_p, ctypes.POINTER(_image_t), ctypes.c_int32, - ctypes.c_int32, ctypes.c_int32, ctypes.c_int32] - _OPENJP2.opj_set_decode_area.argtypes = _argtypes + argtypes = [codec_t_p, ctypes.POINTER(image_t), ctypes.c_int32, + ctypes.c_int32, ctypes.c_int32, ctypes.c_int32] + OPENJP2.opj_set_decode_area.argtypes = argtypes - _argtypes = [ctypes.POINTER(_cparameters_t)] - _OPENJP2.opj_set_default_encoder_parameters.argtypes = _argtypes + argtypes = [ctypes.POINTER(cparameters_t)] + OPENJP2.opj_set_default_encoder_parameters.argtypes = argtypes - _argtypes = [ctypes.POINTER(_dparameters_t)] - _OPENJP2.opj_set_default_decoder_parameters.argtypes = _argtypes + argtypes = [ctypes.POINTER(dparameters_t)] + OPENJP2.opj_set_default_decoder_parameters.argtypes = argtypes - _argtypes = [_codec_t_p, ctypes.c_void_p, ctypes.c_void_p] - _OPENJP2.opj_set_error_handler.argtypes = _argtypes - _OPENJP2.opj_set_info_handler.argtypes = _argtypes - _OPENJP2.opj_set_warning_handler.argtypes = _argtypes + argtypes = [codec_t_p, ctypes.c_void_p, ctypes.c_void_p] + OPENJP2.opj_set_error_handler.argtypes = argtypes + OPENJP2.opj_set_info_handler.argtypes = argtypes + OPENJP2.opj_set_warning_handler.argtypes = argtypes - _argtypes = [_codec_t_p, ctypes.POINTER(_dparameters_t)] - _OPENJP2.opj_setup_decoder.argtypes = _argtypes + argtypes = [codec_t_p, ctypes.POINTER(dparameters_t)] + OPENJP2.opj_setup_decoder.argtypes = argtypes - _argtypes = [_codec_t_p, - ctypes.POINTER(_cparameters_t), - ctypes.POINTER(_image_t)] - _OPENJP2.opj_setup_encoder.argtypes = _argtypes + argtypes = [codec_t_p, + ctypes.POINTER(cparameters_t), + ctypes.POINTER(image_t)] + OPENJP2.opj_setup_encoder.argtypes = argtypes - _argtypes = [ctypes.c_char_p, ctypes.c_int32] - _OPENJP2.opj_stream_create_default_file_stream_v3.argtypes = _argtypes - _OPENJP2.opj_stream_create_default_file_stream_v3.restype = _stream_t_p + argtypes = [ctypes.c_char_p, ctypes.c_int32] + OPENJP2.opj_stream_create_default_file_stream_v3.argtypes = argtypes + OPENJP2.opj_stream_create_default_file_stream_v3.restype = stream_t_p - _argtypes = [_codec_t_p, ctypes.POINTER(_image_t), _stream_t_p] - _OPENJP2.opj_start_compress.argtypes = _argtypes + argtypes = [codec_t_p, ctypes.POINTER(image_t), stream_t_p] + OPENJP2.opj_start_compress.argtypes = argtypes - _OPENJP2.opj_end_compress.argtypes = [_codec_t_p, _stream_t_p] - _OPENJP2.opj_end_decompress.argtypes = [_codec_t_p, _stream_t_p] + OPENJP2.opj_end_compress.argtypes = [codec_t_p, stream_t_p] + OPENJP2.opj_end_decompress.argtypes = [codec_t_p, stream_t_p] - _OPENJP2.opj_stream_destroy_v3.argtypes = [_stream_t_p] - _OPENJP2.opj_destroy_codec.argtypes = [_codec_t_p] + OPENJP2.opj_stream_destroy_v3.argtypes = [stream_t_p] + OPENJP2.opj_destroy_codec.argtypes = [codec_t_p] - _argtypes = [_codec_t_p, - ctypes.c_uint32, - ctypes.POINTER(ctypes.c_uint8), - ctypes.c_uint32, - _stream_t_p] - _OPENJP2.opj_write_tile.argtypes = _argtypes + argtypes = [codec_t_p, + ctypes.c_uint32, + ctypes.POINTER(ctypes.c_uint8), + ctypes.c_uint32, + stream_t_p] + OPENJP2.opj_write_tile.argtypes = argtypes -def _check_error(status): +def check_error(status): """Set a generic function as the restype attribute of all OpenJPEG - functions that return a _bool_t value. This way we do not have to check + functions that return a bool_t value. This way we do not have to check for error status in each wrapping function and an exception will always be appropriately raised. """ - global _ERROR_MSG_LST + global ERROR_MSG_LST if status != 1: - if len(_ERROR_MSG_LST) > 0: + if len(ERROR_MSG_LST) > 0: # clear out the existing error message so that we don't pick up # a bad one next time around. - msg = '\n'.join(_ERROR_MSG_LST) - _ERROR_MSG_LST = [] + msg = '\n'.join(ERROR_MSG_LST) + ERROR_MSG_LST = [] raise IOError(msg) else: raise IOError("OpenJPEG function failure.") # These library functions all return an error status. Circumvent that and # force # them to raise an exception. -_fcns = ['opj_decode', 'opj_decode_tile_data', 'opj_end_compress', - 'opj_encode', 'opj_end_decompress', 'opj_get_decoded_tile', - 'opj_read_header', 'opj_read_tile_header', 'opj_set_decode_area', - 'opj_set_error_handler', 'opj_set_info_handler', - 'opj_set_warning_handler', - 'opj_setup_decoder', 'opj_setup_encoder', 'opj_start_compress', - 'opj_write_tile'] -if _OPENJP2 is not None: - for _fcn in _fcns: - _attr = getattr(_OPENJP2, _fcn) - setattr(_attr, 'restype', _check_error) +fcns = ['opj_decode', 'opj_decode_tile_data', 'opj_end_compress', + 'opj_encode', 'opj_end_decompress', 'opj_get_decoded_tile', + 'opj_read_header', 'opj_read_tile_header', 'opj_set_decode_area', + 'opj_set_error_handler', 'opj_set_info_handler', + 'opj_set_warning_handler', + 'opj_setup_decoder', 'opj_setup_encoder', 'opj_start_compress', + 'opj_write_tile'] +if OPENJP2 is not None: + for fcn in fcns: + setattr(getattr(OPENJP2, fcn), 'restype', check_error) -def _create_compress(codec_format): +def create_compress(codec_format): """Creates a J2K/JP2 compress structure. Wraps the openjp2 library function opj_create_compress. @@ -807,28 +806,28 @@ def _create_compress(codec_format): Parameters ---------- codec_format : int - Specifies codec to select. Should be one of _CODEC_J2K or _CODEC_JP2. + Specifies codec to select. Should be one of CODEC_J2K or CODEC_JP2. Returns ------- - codec : Reference to _codec_t_p instance. + codec : Reference to codec_t_p instance. """ - codec = _OPENJP2.opj_create_compress(codec_format) + codec = OPENJP2.opj_create_compress(codec_format) return codec -def _decode(codec, stream, image): +def decode(codec, stream, image): """Reads an entire image. Wraps the openjp2 library function opj_decode. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The JPEG2000 codec - stream : _stream_t_p + stream : stream_t_p The stream to decode. - image : _image_t + image : image_t Output image structure. Raises @@ -836,17 +835,17 @@ def _decode(codec, stream, image): RuntimeError If the OpenJPEG library routine opj_decode fails. """ - _OPENJP2.opj_decode(codec, stream, image) + OPENJP2.opj_decode(codec, stream, image) -def _decode_tile_data(codec, tidx, data, data_size, stream): +def decode_tile_data(codec, tidx, data, data_size, stream): """Reads tile data. Wraps the openjp2 library function opj_decode_tile_data. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The JPEG2000 codec tile_index : int The index of the tile being decoded @@ -854,7 +853,7 @@ def _decode_tile_data(codec, tidx, data, data_size, stream): Holds a memory block into which data will be decoded. data_size : int The size of data in bytes - stream : _stream_t_p + stream : stream_t_p The stream to decode. Raises @@ -863,15 +862,15 @@ def _decode_tile_data(codec, tidx, data, data_size, stream): If the OpenJPEG library routine opj_decode fails. """ datap = data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)) - _OPENJP2.opj_decode_tile_data(codec, - ctypes.c_uint32(tidx), - datap, - ctypes.c_uint32(data_size), - stream) + OPENJP2.opj_decode_tile_data(codec, + ctypes.c_uint32(tidx), + datap, + ctypes.c_uint32(data_size), + stream) return codec -def _create_decompress(codec_format): +def create_decompress(codec_format): """Creates a J2K/JP2 decompress structure. Wraps the openjp2 library function opj_create_decompress. @@ -879,39 +878,39 @@ def _create_decompress(codec_format): Parameters ---------- codec_format : int - Specifies codec to select. Should be one of _CODEC_J2K or _CODEC_JP2. + Specifies codec to select. Should be one of CODEC_J2K or CODEC_JP2. Returns ------- - codec : Reference to _codec_t_p instance. + codec : Reference to codec_t_p instance. """ - codec = _OPENJP2.opj_create_decompress(codec_format) + codec = OPENJP2.opj_create_decompress(codec_format) return codec -def _destroy_codec(codec): +def destroy_codec(codec): """Destroy a decompressor handle. Wraps the openjp2 library function opj_destroy_codec. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Decompressor handle to destroy. """ - _OPENJP2.opj_destroy_codec(codec) + OPENJP2.opj_destroy_codec(codec) -def _encode(codec, stream): +def encode(codec, stream): """Wraps openjp2 library function opj_encode. Encode an image into a JPEG 2000 codestream. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The jpeg2000 codec. - stream : _stream_t_p + stream : stream_t_p The stream to which data is written. Raises @@ -919,40 +918,40 @@ def _encode(codec, stream): RuntimeError If the OpenJPEG library routine opj_encode fails. """ - _OPENJP2.opj_encode(codec, stream) + OPENJP2.opj_encode(codec, stream) -def _get_cstr_info(codec): +def get_cstr_info(codec): """get the codestream information from the codec Wraps the openjp2 library function opj_get_cstr_info. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The jpeg2000 codec. Returns ------- - cstr_info_p : _codestream_info_v2_t + cstr_info_p : codestream_info_v2_t Reference to codestream information. """ - cstr_info_p = _OPENJP2.opj_get_cstr_info(codec) + cstr_info_p = OPENJP2.opj_get_cstr_info(codec) return cstr_info_p -def _get_decoded_tile(codec, stream, imagep, tile_index): +def get_decoded_tile(codec, stream, imagep, tile_index): """get the decoded tile from the codec Wraps the openjp2 library function opj_get_decoded_tile. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The jpeg2000 codec. - stream : _stream_t_p + stream : stream_t_p The input stream. - image : _image_t + image : image_t Output image structure. tiler_index : int Index of the tile which will be decoded. @@ -962,32 +961,32 @@ def _get_decoded_tile(codec, stream, imagep, tile_index): RuntimeError If the OpenJPEG library routine opj_get_decoded_tile fails. """ - _OPENJP2.opj_get_decoded_tile(codec, stream, imagep, tile_index) + OPENJP2.opj_get_decoded_tile(codec, stream, imagep, tile_index) -def _destroy_cstr_info(cstr_info_p): +def destroy_cstr_info(cstr_info_p): """destroy codestream information after compression or decompression Wraps the openjp2 library function opj_destroy_cstr_info. Parameters ---------- - cstr_info_p : _codestream_info_v2_t pointer + cstr_info_p : codestream_info_v2_t pointer Pointer to codestream info structure. """ - _OPENJP2.opj_destroy_cstr_info(ctypes.byref(cstr_info_p)) + OPENJP2.opj_destroy_cstr_info(ctypes.byref(cstr_info_p)) -def _end_compress(codec, stream): +def end_compress(codec, stream): """End of compressing the current image. Wraps the openjp2 library function opj_end_compress. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Compressor handle. - stream : _stream_t_p + stream : stream_t_p Output stream buffer. Raises @@ -995,19 +994,19 @@ def _end_compress(codec, stream): RuntimeError If the OpenJPEG library routine opj_end_compress fails. """ - _OPENJP2.opj_end_compress(codec, stream) + OPENJP2.opj_end_compress(codec, stream) -def _end_decompress(codec, stream): +def end_decompress(codec, stream): """End of decompressing the current image. Wraps the openjp2 library function opj_end_decompress. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Compressor handle. - stream : _stream_t_p + stream : stream_t_p Output stream buffer. Raises @@ -1015,23 +1014,23 @@ def _end_decompress(codec, stream): RuntimeError If the OpenJPEG library routine opj_end_decompress fails. """ - _OPENJP2.opj_end_decompress(codec, stream) + OPENJP2.opj_end_decompress(codec, stream) -def _image_destroy(image): +def image_destroy(image): """Deallocate any resources associated with an image. Wraps the openjp2 library function opj_image_destroy. Parameters ---------- - image : _image_t pointer + image : image_t pointer Image resource to be disposed. """ - _OPENJP2.opj_image_destroy(image) + OPENJP2.opj_image_destroy(image) -def _image_create(comptparms, clrspc): +def image_create(comptparms, clrspc): """Creates a new image structure. Wraps the openjp2 library function opj_image_create. @@ -1045,16 +1044,16 @@ def _image_create(comptparms, clrspc): Returns ------- - image : _image_t - Reference to _image_t instance. + image : image_t + Reference to image_t instance. """ - image = _OPENJP2.opj_image_create(len(comptparms), + image = OPENJP2.opj_image_create(len(comptparms), comptparms, clrspc) return image -def _image_tile_create(comptparms, clrspc): +def image_tile_create(comptparms, clrspc): """Creates a new image structure. Wraps the openjp2 library function opj_image_tile_create. @@ -1068,30 +1067,30 @@ def _image_tile_create(comptparms, clrspc): Returns ------- - image : _image_t - Reference to _image_t instance. + image : image_t + Reference to image_t instance. """ - image = _OPENJP2.opj_image_tile_create(len(comptparms), + image = OPENJP2.opj_image_tile_create(len(comptparms), comptparms, clrspc) return image -def _read_header(stream, codec): +def read_header(stream, codec): """Decodes an image header. Wraps the openjp2 library function opj_read_header. Parameters ---------- - stream: _stream_t_p + stream: stream_t_p The JPEG2000 stream. codec: codec_t The JPEG2000 codec to read. Returns ------- - imagep : reference to _image_t instance + imagep : reference to image_t instance The image structure initialized with image characteristics. Raises @@ -1099,12 +1098,12 @@ def _read_header(stream, codec): RuntimeError If the OpenJPEG library routine opj_read_header fails. """ - imagep = ctypes.POINTER(_image_t)() - _OPENJP2.opj_read_header(stream, codec, ctypes.byref(imagep)) + imagep = ctypes.POINTER(image_t)() + OPENJP2.opj_read_header(stream, codec, ctypes.byref(imagep)) return imagep -def _read_tile_header(codec, stream): +def read_tile_header(codec, stream): """Reads a tile header. Wraps the openjp2 library function opj_read_tile_header. @@ -1113,7 +1112,7 @@ def _read_tile_header(codec, stream): ---------- codec : codec_t The JPEG2000 codec to read. - stream : _stream_t_p + stream : stream_t_p The JPEG2000 stream. Returns @@ -1143,8 +1142,8 @@ def _read_tile_header(codec, stream): x1 = ctypes.c_int32() y1 = ctypes.c_int32() ncomps = ctypes.c_uint32() - go_on = _bool_t() - _OPENJP2.opj_read_tile_header(codec, + go_on = bool_t() + OPENJP2.opj_read_tile_header(codec, stream, ctypes.byref(tile_index), ctypes.byref(data_size), @@ -1165,7 +1164,7 @@ def _read_tile_header(codec, stream): go_on) -def _set_decode_area(codec, image, start_x=0, start_y=0, end_x=0, end_y=0): +def set_decode_area(codec, image, start_x=0, start_y=0, end_x=0, end_y=0): """Wraps openjp2 library function opj_set_decode area. Sets the given area to be decoded. This function should be called right @@ -1173,9 +1172,9 @@ def _set_decode_area(codec, image, start_x=0, start_y=0, end_x=0, end_y=0): Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Codec initialized by create_decompress function. - image : _image_t pointer + image : image_t pointer The decoded image previously set by read_header. start_x, start_y : optional, int The left and upper position of the rectangle to decode. @@ -1187,29 +1186,29 @@ def _set_decode_area(codec, image, start_x=0, start_y=0, end_x=0, end_y=0): RuntimeError If the OpenJPEG library routine opj_set_decode_area fails. """ - _OPENJP2.opj_set_decode_area(codec, image, - ctypes.c_int32(start_x), - ctypes.c_int32(start_y), - ctypes.c_int32(end_x), - ctypes.c_int32(end_y)) + OPENJP2.opj_set_decode_area(codec, image, + ctypes.c_int32(start_x), + ctypes.c_int32(start_y), + ctypes.c_int32(end_x), + ctypes.c_int32(end_y)) -def _set_default_decoder_parameters(): +def set_default_decoder_parameters(): """Wraps openjp2 library function opj_set_default_decoder_parameters. Sets decoding parameters to default values. Returns ------- - dparam : _dparameters_t + dparam : dparameters_t Decompression parameters. """ - dparams = _dparameters_t() - _OPENJP2.opj_set_default_decoder_parameters(ctypes.byref(dparams)) + dparams = dparameters_t() + OPENJP2.opj_set_default_decoder_parameters(ctypes.byref(dparams)) return dparams -def _set_default_encoder_parameters(): +def set_default_encoder_parameters(): """Wraps openjp2 library function opj_set_default_encoder_parameters. Sets encoding parameters to default values. That means @@ -1236,22 +1235,22 @@ def _set_default_encoder_parameters(): Returns ------- - cparameters : _cparameters_t + cparameters : cparameters_t Compression parameters. """ - cparams = _cparameters_t() - _OPENJP2.opj_set_default_encoder_parameters(ctypes.byref(cparams)) + cparams = cparameters_t() + OPENJP2.opj_set_default_encoder_parameters(ctypes.byref(cparams)) return cparams -def _set_error_handler(codec, handler, data=None): +def set_error_handler(codec, handler, data=None): """Wraps openjp2 library function opj_set_error_handler. Set the error handler use by openjpeg. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1263,17 +1262,17 @@ def _set_error_handler(codec, handler, data=None): RuntimeError If the OpenJPEG library routine opj_set_error_handler fails. """ - _OPENJP2.opj_set_error_handler(codec, handler, data) + OPENJP2.opj_set_error_handler(codec, handler, data) -def _set_info_handler(codec, handler, data=None): +def set_info_handler(codec, handler, data=None): """Wraps openjp2 library function opj_set_info_handler. Set the info handler use by openjpeg. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1285,17 +1284,17 @@ def _set_info_handler(codec, handler, data=None): RuntimeError If the OpenJPEG library routine opj_set_info_handler fails. """ - _OPENJP2.opj_set_info_handler(codec, handler, data) + OPENJP2.opj_set_info_handler(codec, handler, data) -def _set_warning_handler(codec, handler, data=None): +def set_warning_handler(codec, handler, data=None): """Wraps openjp2 library function opj_set_warning_handler. Set the warning handler use by openjpeg. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1307,19 +1306,19 @@ def _set_warning_handler(codec, handler, data=None): RuntimeError If the OpenJPEG library routine opj_set_warning_handler fails. """ - _OPENJP2.opj_set_warning_handler(codec, handler, data) + OPENJP2.opj_set_warning_handler(codec, handler, data) -def _setup_decoder(codec, dparams): +def setup_decoder(codec, dparams): """Wraps openjp2 library function opj_setup_decoder. Setup the decoder with decompression parameters. Parameters ---------- - codec: _codec_t_p + codec: codec_t_p Codec initialized by create_compress function. - dparams: _dparameters_t + dparams: dparameters_t Decompression parameters. Raises @@ -1327,10 +1326,10 @@ def _setup_decoder(codec, dparams): RuntimeError If the OpenJPEG library routine opj_setup_decoder fails. """ - _OPENJP2.opj_setup_decoder(codec, ctypes.byref(dparams)) + OPENJP2.opj_setup_decoder(codec, ctypes.byref(dparams)) -def _setup_encoder(codec, cparams, image): +def setup_encoder(codec, cparams, image): """Wraps openjp2 library function opj_setup_encoder. Setup the encoder parameters using the current image and using user @@ -1338,11 +1337,11 @@ def _setup_encoder(codec, cparams, image): Parameters ---------- - codec : _codec_t_p + codec : codec_t_p codec initialized by create_compress function - cparams : _cparameters_t + cparams : cparameters_t compression parameters - image : _image_t + image : image_t input-filled image Raises @@ -1350,21 +1349,21 @@ def _setup_encoder(codec, cparams, image): RuntimeError If the OpenJPEG library routine opj_setup_encoder fails. """ - _OPENJP2.opj_setup_encoder(codec, ctypes.byref(cparams), image) + OPENJP2.opj_setup_encoder(codec, ctypes.byref(cparams), image) -def _start_compress(codec, image, stream): +def start_compress(codec, image, stream): """Wraps openjp2 library function opj_start_compress. Start to compress the current image. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p Compressor handle. - image : pointer to _image_t + image : pointer to image_t Input filled image. - stream : _stream_t_p + stream : stream_t_p Input stream. Raises @@ -1372,10 +1371,10 @@ def _start_compress(codec, image, stream): RuntimeError If the OpenJPEG library routine opj_start_compress fails. """ - _OPENJP2.opj_start_compress(codec, image, stream) + OPENJP2.opj_start_compress(codec, image, stream) -def _stream_create_default_file_stream_v3(fname, a_read_stream): +def stream_create_default_file_stream_v3(fname, a_read_stream): """Wraps openjp2 library function opj_stream_create_default_vile_stream_v3. Sets the stream to be a file stream. @@ -1394,31 +1393,31 @@ def _stream_create_default_file_stream_v3(fname, a_read_stream): """ tf = 1 if a_read_stream else 0 fn = ctypes.c_char_p(fname.encode()) - stream = _OPENJP2.opj_stream_create_default_file_stream_v3(fn, tf) + stream = OPENJP2.opj_stream_create_default_file_stream_v3(fn, tf) return stream -def _stream_destroy_v3(stream): +def stream_destroy_v3(stream): """Wraps openjp2 library function opj_stream_destroy. Destroys the stream created by create_stream_v3. Parameters ---------- - stream : _stream_t_p + stream : stream_t_p The file stream. """ - _OPENJP2.opj_stream_destroy_v3(stream) + OPENJP2.opj_stream_destroy_v3(stream) -def _write_tile(codec, tile_index, data, data_size, stream): +def write_tile(codec, tile_index, data, data_size, stream): """Wraps openjp2 library function opj_write_tile. Write a tile into an image. Parameters ---------- - codec : _codec_t_p + codec : codec_t_p The jpeg2000 codec tile_index : int The index of the tile to write, zero-indexing assumed @@ -1426,7 +1425,7 @@ def _write_tile(codec, tile_index, data, data_size, stream): Image data arranged in usual C-order data_size : int Size of a tile in bytes - stream : _stream_t_p + stream : stream_t_p The stream to write data to Raises @@ -1435,14 +1434,14 @@ def _write_tile(codec, tile_index, data, data_size, stream): If the OpenJPEG library routine opj_write_tile fails. """ datap = data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)) - _OPENJP2.opj_write_tile(codec, + OPENJP2.opj_write_tile(codec, ctypes.c_uint32(int(tile_index)), datap, ctypes.c_uint32(int(data_size)), stream) -def _set_error_message(msg): +def set_error_message(msg): """The openjpeg error handler has recorded an error message.""" - global _ERROR_MSG_LST - _ERROR_MSG_LST.append(msg) + global ERROR_MSG_LST + ERROR_MSG_LST.append(msg) diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index f818e1a..fc95861 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -9,14 +9,14 @@ import os if os.name == "nt": path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', 'bin', 'openjpeg.dll') - _OPENJPEG = ctypes.windll.LoadLibrary(path) + OPENJPEG = ctypes.windll.LoadLibrary(path) else: if platform.system() == 'Darwin': - _OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') + OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') elif platform.system() == 'Linux': - _OPENJPEG = ctypes.CDLL(find_library('openjpeg')) + OPENJPEG = ctypes.CDLL(find_library('openjpeg')) -_PATH_LEN = 4096 # maximum allowed size for filenames +PATH_LEN = 4096 # maximum allowed size for filenames class event_mgr_t(ctypes.Structure): @@ -68,9 +68,9 @@ class dparameters_t(ctypes.Structure): # cp_layer: the maximum number of quality layers to decode ("cp_layer", ctypes.c_int), # infile: input file name - ("infile", ctypes.c_char * _PATH_LEN), + ("infile", ctypes.c_char * PATH_LEN), # outfile: output file name - ("outfile", ctypes.c_char * _PATH_LEN), + ("outfile", ctypes.c_char * PATH_LEN), # decod_format: input file format 0: J2K, 1: JP2, 2: JPT ("decod_format", ctypes.c_int), # cod_format: output file format 0: PGX, 1: PxM, 2: BMP @@ -115,75 +115,75 @@ class image_t(ctypes.Structure): ("icc_profile_buf", ctypes.c_char_p), ("icc_profile_len", ctypes.c_int)] -def _cio_open(cinfo, src): +def cio_open(cinfo, src): """Wrapper for openjpeg library function opj_cio_open.""" argtypes = [ctypes.POINTER(common_struct_t), ctypes.c_char_p, ctypes.c_int] - _OPENJPEG.opj_cio_open.argtypes = argtypes - _OPENJPEG.opj_cio_open.restype = ctypes.POINTER(cio_t) + OPENJPEG.opj_cio_open.argtypes = argtypes + OPENJPEG.opj_cio_open.restype = ctypes.POINTER(cio_t) - cio = _OPENJPEG.opj_cio_open(ctypes.cast(cinfo, ctypes.POINTER(common_struct_t)), - src, len(src)) + cio = OPENJPEG.opj_cio_open(ctypes.cast(cinfo, ctypes.POINTER(common_struct_t)), + src, len(src)) return cio -def _cio_close(cio): +def cio_close(cio): """Wraps openjpeg library function cio_close. """ - _OPENJPEG.opj_cio_close.argtypes = [ctypes.POINTER(cio_t)] - _OPENJPEG.opj_cio_close(cio) + OPENJPEG.opj_cio_close.argtypes = [ctypes.POINTER(cio_t)] + OPENJPEG.opj_cio_close(cio) -def _create_decompress(fmt): +def create_decompress(fmt): """Wraps openjpeg library function opj_create_decompress. """ - _OPENJPEG.opj_create_decompress.argtypes = [ctypes.c_int] - _OPENJPEG.opj_create_decompress.restype = ctypes.POINTER(dinfo_t) - dinfo = _OPENJPEG.opj_create_decompress(fmt) + OPENJPEG.opj_create_decompress.argtypes = [ctypes.c_int] + OPENJPEG.opj_create_decompress.restype = ctypes.POINTER(dinfo_t) + dinfo = OPENJPEG.opj_create_decompress(fmt) return dinfo -def _decode(dinfo, cio): +def decode(dinfo, cio): """Wrapper for opj_decode. """ argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(cio_t)] - _OPENJPEG.opj_decode.argtypes = argtypes - _OPENJPEG.opj_decode.restype = ctypes.POINTER(image_t) - image = _OPENJPEG.opj_decode(dinfo, cio) + OPENJPEG.opj_decode.argtypes = argtypes + OPENJPEG.opj_decode.restype = ctypes.POINTER(image_t) + image = OPENJPEG.opj_decode(dinfo, cio) return image -def _destroy_decompress(dinfo): +def destroy_decompress(dinfo): """Wraps openjpeg library function opj_destroy_decompress.""" - _OPENJPEG.opj_destroy_decompress.argtypes = [ctypes.POINTER(dinfo_t)] - _OPENJPEG.opj_destroy_decompress(dinfo) + OPENJPEG.opj_destroy_decompress.argtypes = [ctypes.POINTER(dinfo_t)] + OPENJPEG.opj_destroy_decompress(dinfo) -def _image_destroy(image): +def image_destroy(image): """Wraps openjpeg library function opj_image_destroy.""" - _OPENJPEG.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] - _OPENJPEG.opj_image_destroy(image) + OPENJPEG.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] + OPENJPEG.opj_image_destroy(image) -def _set_default_decoder_parameters(dparams_p): +def set_default_decoder_parameters(dparams_p): """Wrapper for opj_set_default_decoder_parameters. """ argtypes = [ctypes.POINTER(dparameters_t)] - _OPENJPEG.opj_set_default_decoder_parameters.argtypes = argtypes - _OPENJPEG.opj_set_default_decoder_parameters(dparams_p) + OPENJPEG.opj_set_default_decoder_parameters.argtypes = argtypes + OPENJPEG.opj_set_default_decoder_parameters(dparams_p) -def _set_event_mgr(dinfo, event_mgr, context=None): +def set_event_mgr(dinfo, event_mgr, context=None): """Wrapper for openjpeg library function opj_set_event_mgr. """ argtypes = [ctypes.POINTER(common_struct_t), ctypes.POINTER(event_mgr_t), ctypes.c_void_p] - _OPENJPEG.opj_set_event_mgr(ctypes.cast(dinfo, - ctypes.POINTER(common_struct_t)), - event_mgr, context) + OPENJPEG.opj_set_event_mgr(ctypes.cast(dinfo, + ctypes.POINTER(common_struct_t)), + event_mgr, context) -def _setup_decoder(dinfo, dparams): +def setup_decoder(dinfo, dparams): """Wrapper for openjpeg library function opj_setup_decoder.""" argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(dparameters_t)] - _OPENJPEG.opj_setup_decoder.argtypes = argtypes - _OPENJPEG.opj_setup_decoder(dinfo, dparams) + OPENJPEG.opj_setup_decoder.argtypes = argtypes + OPENJPEG.opj_setup_decoder(dinfo, dparams) -def _version(): +def version(): """Wrapper for opj_version library routine.""" - _OPENJPEG.opj_version.restype = ctypes.c_char_p - v = _OPENJPEG.opj_version() + OPENJPEG.opj_version.restype = ctypes.c_char_p + v = OPENJPEG.opj_version() return v.decode('utf-8') diff --git a/glymur/lib/test/test_openjp2.py b/glymur/lib/test/test_openjp2.py index 90a5f08..6c4c2cd 100644 --- a/glymur/lib/test/test_openjp2.py +++ b/glymur/lib/test/test_openjp2.py @@ -12,13 +12,7 @@ import numpy as np import glymur -def load_tests(loader, tests, ignore): - if glymur.lib.openjp2._OPENJP2 is not None: - tests.addTests(doctest.DocTestSuite('glymur.lib.openjp2')) - return tests - - -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib._openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestOpenJP2(unittest.TestCase): @@ -29,7 +23,7 @@ class TestOpenJP2(unittest.TestCase): pass def test_set_default_encoder_parameters(self): - cparams = glymur.lib.openjp2._set_default_encoder_parameters() + cparams = glymur.lib._openjp2.set_default_encoder_parameters() self.assertEqual(cparams.res_spec, 0) self.assertEqual(cparams.cblockw_init, 64) @@ -38,7 +32,7 @@ class TestOpenJP2(unittest.TestCase): self.assertEqual(cparams.subsampling_dx, 1) self.assertEqual(cparams.subsampling_dy, 1) self.assertEqual(cparams.mode, 0) - self.assertEqual(cparams.prog_order, glymur.lib.openjp2.LRCP) + self.assertEqual(cparams.prog_order, glymur.lib._openjp2.LRCP) self.assertEqual(cparams.roi_shift, 0) self.assertEqual(cparams.cp_tx0, 0) self.assertEqual(cparams.cp_ty0, 0) @@ -46,7 +40,7 @@ class TestOpenJP2(unittest.TestCase): self.assertEqual(cparams.irreversible, 0) def test_set_default_decoder_parameters(self): - dparams = glymur.lib.openjp2._set_default_decoder_parameters() + dparams = glymur.lib._openjp2.set_default_decoder_parameters() self.assertEqual(dparams.DA_x0, 0) self.assertEqual(dparams.DA_y0, 0) @@ -55,34 +49,34 @@ class TestOpenJP2(unittest.TestCase): def tile_macro(self, codec, stream, imagep, tidx): # called only by j2k_random_tile_access - glymur.lib.openjp2._get_decoded_tile(codec, stream, imagep, tidx) + glymur.lib._openjp2.get_decoded_tile(codec, stream, imagep, tidx) for j in range(imagep.contents.numcomps): self.assertIsNotNone(imagep.contents.comps[j].data) def j2k_random_tile_access(self, filename, codec_format=None): # called by the test_rtaX methods - dparam = glymur.lib.openjp2._set_default_decoder_parameters() + dparam = glymur.lib._openjp2.set_default_decoder_parameters() infile = filename.encode() - nelts = glymur.lib.openjp2._PATH_LEN - len(infile) + nelts = glymur.lib._openjp2.PATH_LEN - len(infile) infile += b'0' * nelts dparam.infile = infile dparam.decod_format = codec_format - codec = glymur.lib.openjp2._create_decompress(codec_format) + codec = glymur.lib._openjp2.create_decompress(codec_format) - glymur.lib.openjp2._set_info_handler(codec, None) - glymur.lib.openjp2._set_warning_handler(codec, None) - glymur.lib.openjp2._set_error_handler(codec, None) + glymur.lib._openjp2.set_info_handler(codec, None) + glymur.lib._openjp2.set_warning_handler(codec, None) + glymur.lib._openjp2.set_error_handler(codec, None) x = (filename, True) - stream = glymur.lib.openjp2._stream_create_default_file_stream_v3(*x) + stream = glymur.lib._openjp2.stream_create_default_file_stream_v3(*x) - glymur.lib.openjp2._setup_decoder(codec, dparam) - image = glymur.lib.openjp2._read_header(stream, codec) + glymur.lib._openjp2.setup_decoder(codec, dparam) + image = glymur.lib._openjp2.read_header(stream, codec) - cstr_info = glymur.lib.openjp2._get_cstr_info(codec) + cstr_info = glymur.lib._openjp2.get_cstr_info(codec) tile_ul = 0 tile_ur = cstr_info.contents.tw - 1 @@ -94,18 +88,18 @@ class TestOpenJP2(unittest.TestCase): self.tile_macro(codec, stream, image, tile_lr) self.tile_macro(codec, stream, image, tile_ll) - glymur.lib.openjp2._destroy_cstr_info(cstr_info) + glymur.lib._openjp2.destroy_cstr_info(cstr_info) - glymur.lib.openjp2._end_decompress(codec, stream) - glymur.lib.openjp2._destroy_codec(codec) - glymur.lib.openjp2._stream_destroy_v3(stream) - glymur.lib.openjp2._image_destroy(image) + glymur.lib._openjp2.end_decompress(codec, stream) + glymur.lib._openjp2.destroy_codec(codec) + glymur.lib._openjp2.stream_destroy_v3(stream) + glymur.lib._openjp2.image_destroy(image) def tile_decoder(self, x0=None, y0=None, x1=None, y1=None, filename=None, codec_format=None): x = (filename, True) - stream = glymur.lib.openjp2._stream_create_default_file_stream_v3(*x) - dparam = glymur.lib.openjp2._set_default_decoder_parameters() + stream = glymur.lib._openjp2.stream_create_default_file_stream_v3(*x) + dparam = glymur.lib._openjp2.set_default_decoder_parameters() dparam.decod_format = codec_format @@ -115,30 +109,30 @@ class TestOpenJP2(unittest.TestCase): # do not use resolution reductions. dparam.cp_reduce = 0 - codec = glymur.lib.openjp2._create_decompress(codec_format) + codec = glymur.lib._openjp2.create_decompress(codec_format) - glymur.lib.openjp2._set_info_handler(codec, None) - glymur.lib.openjp2._set_warning_handler(codec, None) - glymur.lib.openjp2._set_error_handler(codec, None) + glymur.lib._openjp2.set_info_handler(codec, None) + glymur.lib._openjp2.set_warning_handler(codec, None) + glymur.lib._openjp2.set_error_handler(codec, None) - glymur.lib.openjp2._setup_decoder(codec, dparam) - image = glymur.lib.openjp2._read_header(stream, codec) - glymur.lib.openjp2._set_decode_area(codec, image, x0, y0, x1, y1) + glymur.lib._openjp2.setup_decoder(codec, dparam) + image = glymur.lib._openjp2.read_header(stream, codec) + glymur.lib._openjp2.set_decode_area(codec, image, x0, y0, x1, y1) data = np.zeros((1150, 2048, 3), dtype=np.uint8) while True: - rargs = glymur.lib.openjp2._read_tile_header(codec, stream) + rargs = glymur.lib._openjp2.read_tile_header(codec, stream) tidx = rargs[0] sz = rargs[1] go_on = rargs[-1] if not go_on: break - glymur.lib.openjp2._decode_tile_data(codec, tidx, data, sz, stream) + glymur.lib._openjp2.decode_tile_data(codec, tidx, data, sz, stream) - glymur.lib.openjp2._end_decompress(codec, stream) - glymur.lib.openjp2._destroy_codec(codec) - glymur.lib.openjp2._stream_destroy_v3(stream) - glymur.lib.openjp2._image_destroy(image) + glymur.lib._openjp2.end_decompress(codec, stream) + glymur.lib._openjp2.destroy_codec(codec) + glymur.lib._openjp2.stream_destroy_v3(stream) + glymur.lib._openjp2.image_destroy(image) def tile_encoder(self, num_comps=None, tile_width=None, tile_height=None, filename=None, codec=None, comp_prec=None, @@ -150,7 +144,7 @@ class TestOpenJP2(unittest.TestCase): data = np.random.random((tile_height, tile_width, num_comps)) data = (data * 255).astype(np.uint8) - l_param = glymur.lib.openjp2._set_default_encoder_parameters() + l_param = glymur.lib._openjp2.set_default_encoder_parameters() l_param.tcp_numlayers = 1 l_param.cp_fixed_quality = 1 @@ -170,9 +164,9 @@ class TestOpenJP2(unittest.TestCase): l_param.numresolution = 6 - l_param.prog_order = glymur.lib.openjp2.LRCP + l_param.prog_order = glymur.lib._openjp2.LRCP - l_params = (glymur.lib.openjp2._image_comptparm_t * num_comps)() + l_params = (glymur.lib._openjp2.image_comptparm_t * num_comps)() for j in range(num_comps): l_params[j].dx = 1 l_params[j].dy = 1 @@ -183,38 +177,38 @@ class TestOpenJP2(unittest.TestCase): l_params[j].x0 = 0 l_params[j].y0 = 0 - codec = glymur.lib.openjp2._create_compress(codec) + codec = glymur.lib._openjp2.create_compress(codec) - glymur.lib.openjp2._set_info_handler(codec, None) - glymur.lib.openjp2._set_warning_handler(codec, None) - glymur.lib.openjp2._set_error_handler(codec, None) + glymur.lib._openjp2.set_info_handler(codec, None) + glymur.lib._openjp2.set_warning_handler(codec, None) + glymur.lib._openjp2.set_error_handler(codec, None) - cspace = glymur.lib.openjp2._CLRSPC_SRGB - l_image = glymur.lib.openjp2._image_tile_create(l_params, cspace) + cspace = glymur.lib._openjp2.CLRSPC_SRGB + l_image = glymur.lib._openjp2.image_tile_create(l_params, cspace) l_image.contents.x0 = 0 l_image.contents.y0 = 0 l_image.contents.x1 = image_width l_image.contents.y1 = image_height - l_image.contents.color_space = glymur.lib.openjp2._CLRSPC_SRGB + l_image.contents.color_space = glymur.lib._openjp2.CLRSPC_SRGB - glymur.lib.openjp2._setup_encoder(codec, l_param, l_image) + glymur.lib._openjp2.setup_encoder(codec, l_param, l_image) x = (filename, False) - stream = glymur.lib.openjp2._stream_create_default_file_stream_v3(*x) - glymur.lib.openjp2._start_compress(codec, l_image, stream) + stream = glymur.lib._openjp2.stream_create_default_file_stream_v3(*x) + glymur.lib._openjp2.start_compress(codec, l_image, stream) for j in np.arange(num_tiles): - glymur.lib.openjp2._write_tile(codec, j, data, tile_size, stream) + glymur.lib._openjp2.write_tile(codec, j, data, tile_size, stream) - glymur.lib.openjp2._end_compress(codec, stream) - glymur.lib.openjp2._stream_destroy_v3(stream) - glymur.lib.openjp2._destroy_codec(codec) - glymur.lib.openjp2._image_destroy(l_image) + glymur.lib._openjp2.end_compress(codec, stream) + glymur.lib._openjp2.stream_destroy_v3(stream) + glymur.lib._openjp2.destroy_codec(codec) + glymur.lib._openjp2.image_destroy(l_image) def tte0_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_J2K, + 'codec': glymur.lib._openjp2.CODEC_J2K, 'comp_prec': 8, 'irreversible': 1, 'num_comps': 3, @@ -241,12 +235,12 @@ class TestOpenJP2(unittest.TestCase): 'x1': 1000, 'y1': 1000, 'filename': tfile.name, - 'codec_format': glymur.lib.openjp2._CODEC_J2K} + 'codec_format': glymur.lib._openjp2.CODEC_J2K} self.tile_decoder(**kwargs) def tte1_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_J2K, + 'codec': glymur.lib._openjp2.CODEC_J2K, 'comp_prec': 8, 'irreversible': 1, 'num_comps': 3, @@ -273,7 +267,7 @@ class TestOpenJP2(unittest.TestCase): 'x1': 128, 'y1': 128, 'filename': tfile.name, - 'codec_format': glymur.lib.openjp2._CODEC_J2K} + 'codec_format': glymur.lib._openjp2.CODEC_J2K} self.tile_decoder(**kwargs) def test_rta1(self): @@ -281,12 +275,12 @@ class TestOpenJP2(unittest.TestCase): # Runs test designated rta1 in OpenJPEG test suite. self.tte1_setup(tfile.name) - kwargs = {'codec_format': glymur.lib.openjp2._CODEC_J2K} + kwargs = {'codec_format': glymur.lib._openjp2.CODEC_J2K} self.j2k_random_tile_access(tfile.name, **kwargs) def tte2_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_JP2, + 'codec': glymur.lib._openjp2.CODEC_JP2, 'comp_prec': 8, 'irreversible': 1, 'num_comps': 3, @@ -312,7 +306,7 @@ class TestOpenJP2(unittest.TestCase): 'x1': 128, 'y1': 128, 'filename': tfile.name, - 'codec_format': glymur.lib.openjp2._CODEC_JP2} + 'codec_format': glymur.lib._openjp2.CODEC_JP2} self.tile_decoder(**kwargs) def test_rta2(self): @@ -320,12 +314,12 @@ class TestOpenJP2(unittest.TestCase): # Runs test designated rta2 in OpenJPEG test suite. self.tte2_setup(tfile.name) - kwargs = {'codec_format': glymur.lib.openjp2._CODEC_JP2} + kwargs = {'codec_format': glymur.lib._openjp2.CODEC_JP2} self.j2k_random_tile_access(tfile.name, **kwargs) def tte3_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_J2K, + 'codec': glymur.lib._openjp2.CODEC_J2K, 'comp_prec': 8, 'irreversible': 1, 'num_comps': 1, @@ -345,12 +339,12 @@ class TestOpenJP2(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix=".j2k") as tfile: self.tte3_setup(tfile.name) - kwargs = {'codec_format': glymur.lib.openjp2._CODEC_J2K} + kwargs = {'codec_format': glymur.lib._openjp2.CODEC_J2K} self.j2k_random_tile_access(tfile.name, **kwargs) def tte4_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_J2K, + 'codec': glymur.lib._openjp2.CODEC_J2K, 'comp_prec': 8, 'irreversible': 0, 'num_comps': 1, @@ -370,12 +364,12 @@ class TestOpenJP2(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix=".j2k") as tfile: self.tte4_setup(tfile.name) - kwargs = {'codec_format': glymur.lib.openjp2._CODEC_J2K} + kwargs = {'codec_format': glymur.lib._openjp2.CODEC_J2K} self.j2k_random_tile_access(tfile.name, **kwargs) def tte5_setup(self, filename): kwargs = {'filename': filename, - 'codec': glymur.lib.openjp2._CODEC_J2K, + 'codec': glymur.lib._openjp2.CODEC_J2K, 'comp_prec': 8, 'irreversible': 0, 'num_comps': 1, @@ -395,7 +389,7 @@ class TestOpenJP2(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix=".j2k") as tfile: self.tte5_setup(tfile.name) - kwargs = {'codec_format': glymur.lib.openjp2._CODEC_J2K} + kwargs = {'codec_format': glymur.lib._openjp2.CODEC_J2K} self.j2k_random_tile_access(tfile.name, **kwargs) if __name__ == "__main__": diff --git a/glymur/lib/test/test_openjpeg.py b/glymur/lib/test/test_openjpeg.py index 9307191..2bdc5db 100644 --- a/glymur/lib/test/test_openjpeg.py +++ b/glymur/lib/test/test_openjpeg.py @@ -3,7 +3,7 @@ import unittest import glymur -@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, +@unittest.skipIf(glymur.lib._openjpeg.OPENJPEG is None, "Missing openjpeg library.") class TestOpenJPEG(unittest.TestCase): @@ -14,15 +14,15 @@ class TestOpenJPEG(unittest.TestCase): pass def test_version(self): - v = glymur.lib.openjpeg._version() + v = glymur.lib._openjpeg.version() parts = v.split('.') self.assertEqual(parts[0], '1') self.assertEqual(parts[1], '5') def test_set_default_decoder_parameters(self): # Verify that we properly set the default decode parameters. - dp = glymur.lib.openjpeg.dparameters_t() - glymur.lib.openjpeg._set_default_decoder_parameters(ctypes.byref(dp)) + dp = glymur.lib._openjpeg.dparameters_t() + glymur.lib._openjpeg.set_default_decoder_parameters(ctypes.byref(dp)) self.assertEqual(dp.cp_reduce, 0) self.assertEqual(dp.cp_layer, 0) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index fd2f58c..b203f6b 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -14,7 +14,7 @@ else: import glymur -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestCallbacks(unittest.TestCase): @@ -60,7 +60,7 @@ class TestCallbacks(unittest.TestCase): self.assertEqual(actual, expected) -@unittest.skipIf(glymur.lib.openjp2._OPENJPEG is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJPEG is None, "Missing openjpeg library.") class TestCallbacks15(unittest.TestCase): """This test suite is for OpenJPEG 1.5.1 properties. @@ -69,13 +69,13 @@ class TestCallbacks15(unittest.TestCase): @classmethod def setUpClass(cls): # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 - cls.openjp2 = glymur.lib.openjp2._OPENJP2 - glymur.lib.openjp2._OPENJP2 = None + cls.openjp2 = glymur.lib.openjp2.OPENJP2 + glymur.lib.openjp2.OPENJP2 = None @classmethod def tearDownClass(cls): # Restore OPENJP2 - glymur.lib.openjp2._OPENJP2 = cls.openjp2 + glymur.lib.openjp2.OPENJP2 = cls.openjp2 def setUp(self): # Save sys.stdout. diff --git a/glymur/test/test_config.py b/glymur/test/test_config.py index 9e5374a..206da05 100644 --- a/glymur/test/test_config.py +++ b/glymur/test/test_config.py @@ -21,7 +21,7 @@ from glymur.lib import openjp2 as opj2 @unittest.skip("Cannot work when both OPENJPEG and OPENJP2 are both present.") -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Needs openjp2 library first before these tests make sense.") @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") @@ -55,7 +55,7 @@ class TestSuite(unittest.TestCase): filename = os.path.join(configdir, 'glymurrc') with open(filename, 'wb') as tfile: tfile.write('[library]\n'.encode()) - libloc = glymur.lib.openjp2._OPENJP2._name + libloc = glymur.lib.openjp2.OPENJP2._name line = 'openjp2: {0}\n'.format(libloc) tfile.write(line.encode()) tfile.flush() diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 512acf2..3a38002 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -18,7 +18,7 @@ def load_tests(loader, tests, ignore): return tests -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestChannelDefinition(unittest.TestCase): @@ -409,7 +409,7 @@ class TestColourSpecificationBox(unittest.TestCase): approximation=approx) -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestJp2Boxes(unittest.TestCase): diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 424d079..bbb4428 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -33,12 +33,12 @@ except: # Doc tests should be run as well. def load_tests(loader, tests, ignore): - if glymur.lib.openjp2._OPENJP2 is not None: + if glymur.lib.openjp2.OPENJP2 is not None: tests.addTests(doctest.DocTestSuite('glymur.jp2k')) return tests -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestJp2k(unittest.TestCase): @@ -648,20 +648,20 @@ class TestJp2k(unittest.TestCase): self.assertFalse('Make' in exif['Image'].keys()) -@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, +@unittest.skipIf(glymur.lib.openjpeg.OPENJPEG is None, "Missing openjpeg library.") class TestJp2k15(unittest.TestCase): @classmethod def setUpClass(cls): # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 - cls.openjp2 = glymur.lib.openjp2._OPENJP2 - glymur.lib.openjp2._OPENJP2 = None + cls.openjp2 = glymur.lib.openjp2.OPENJP2 + glymur.lib.openjp2.OPENJP2 = None @classmethod def tearDownClass(cls): # Restore OPENJP2 - glymur.lib.openjp2._OPENJP2 = cls.openjp2 + glymur.lib.openjp2.OPENJP2 = cls.openjp2 def setUp(self): self.jp2file = glymur.data.nemo() diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index b866489..f882811 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -34,7 +34,7 @@ except: raise -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") @unittest.skipIf(data_root is None, "OPJ_DATA_ROOT environment variable not set") @@ -7333,7 +7333,7 @@ class TestSuiteDump(unittest.TestCase): [8, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10, 9, 9, 10]) -@unittest.skipIf(glymur.lib.openjpeg._OPENJPEG is None, +@unittest.skipIf(glymur.lib.openjpeg.OPENJPEG is None, "Missing openjpeg library.") @unittest.skipIf(data_root is None, "OPJ_DATA_ROOT environment variable not set") @@ -7343,13 +7343,13 @@ class TestSuite15(unittest.TestCase): @classmethod def setUpClass(cls): # Monkey patch the package so as to use OPENJPEG instead of OPENJP2 - cls.openjp2 = glymur.lib.openjp2._OPENJP2 - glymur.lib.openjp2._OPENJP2 = None + cls.openjp2 = glymur.lib.openjp2.OPENJP2 + glymur.lib.openjp2.OPENJP2 = None @classmethod def tearDownClass(cls): # Restore OPENJP2 - glymur.lib.openjp2._OPENJP2 = cls.openjp2 + glymur.lib.openjp2.OPENJP2 = cls.openjp2 def setUp(self): pass diff --git a/glymur/test/test_opj_suite_neg.py b/glymur/test/test_opj_suite_neg.py index b9294be..6027ea2 100644 --- a/glymur/test/test_opj_suite_neg.py +++ b/glymur/test/test_opj_suite_neg.py @@ -57,7 +57,7 @@ def read_image(infile): return data -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") @unittest.skipIf(no_read_backend, no_read_backend_msg) @unittest.skipIf(data_root is None, diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index 9c7ac56..edbd893 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -57,7 +57,7 @@ def read_image(infile): return data -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") @unittest.skipIf(no_read_backend, no_read_backend_msg) @unittest.skipIf(data_root is None, diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 91b1741..54176cd 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -21,7 +21,7 @@ except: raise -@unittest.skipIf(glymur.lib.openjp2._OPENJP2 is None, +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestPrintingNeedsLib(unittest.TestCase): """These tests require the library, mostly in order to just setup the test. From e0441bbe8f52b285ca3985feb8debdb05776f69c Mon Sep 17 00:00:00 2001 From: John Evans Date: Tue, 9 Jul 2013 07:01:41 -0400 Subject: [PATCH 34/54] pylint work, #71 --- glymur/jp2k.py | 85 ++++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/glymur/jp2k.py b/glymur/jp2k.py index f9e4cc5..64dbcd1 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -2,6 +2,9 @@ License: MIT """ + +# pylint: disable=C0302 + import sys if sys.hexversion >= 0x03030000: from contextlib import ExitStack @@ -16,15 +19,23 @@ import warnings import numpy as np from .codestream import Codestream -from .core import * -from .jp2box import * +from .core import SRGB +from .core import GREYSCALE +from .core import progression_order +from .jp2box import Jp2kBox +from .jp2box import JPEG2000SignatureBox +from .jp2box import FileTypeBox +from .jp2box import JP2HeaderBox +from .jp2box import ContiguousCodestreamBox +from .jp2box import ImageHeaderBox +from .jp2box import ColourSpecificationBox from .lib import _openjpeg as _opj from .lib import _openjp2 as _opj2 -_cspace_map = {'rgb': _opj2.CLRSPC_SRGB, - 'gray': _opj2.CLRSPC_GRAY, - 'grey': _opj2.CLRSPC_GRAY, - 'ycc': _opj2.CLRSPC_YCC} +_COLORSPACE_MAP = {'rgb': _opj2.CLRSPC_SRGB, + 'gray': _opj2.CLRSPC_GRAY, + 'grey': _opj2.CLRSPC_GRAY, + 'ycc': _opj2.CLRSPC_YCC} # Setup the default callback handlers. See the callback functions subsection # in the ctypes section of the Python documentation for a solid explanation of @@ -32,16 +43,16 @@ _cspace_map = {'rgb': _opj2.CLRSPC_SRGB, _CMPFUNC = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p) -def _default_error_handler(msg, client_data): +def _default_error_handler(msg, _): msg = "OpenJPEG library error: {0}".format(msg.decode('utf-8').rstrip()) _opj2.set_error_message(msg) -def _default_info_handler(msg, client_data): +def _default_info_handler(msg, _): print("[INFO] {0}".format(msg.decode('utf-8').rstrip())) -def _default_warning_handler(library_msg, client_data): +def _default_warning_handler(library_msg, _): library_msg = library_msg.decode('utf-8').rstrip() msg = "OpenJPEG library warning: {0}".format(library_msg) warnings.warn(msg) @@ -90,8 +101,8 @@ class Jp2k(Jp2kBox): for box in self.box: metadata.append(str(box)) else: - c = self.get_codestream() - metadata.append(str(c)) + codestream = self.get_codestream() + metadata.append(str(codestream)) return '\n'.join(metadata) def _parse(self): @@ -110,8 +121,8 @@ class Jp2k(Jp2kBox): # Make sure we have a JPEG2000 file. It could be either JP2 or # J2C. Check for J2C first, single box in that case. - buffer = f.read(2) - signature, = struct.unpack('>H', buffer) + read_buffer = f.read(2) + signature, = struct.unpack('>H', read_buffer) if signature == 0xff4f: self._codec_format = _opj2.CODEC_J2K # That's it, we're done. The codestream object is only @@ -125,8 +136,8 @@ class Jp2k(Jp2kBox): # 2nd 4 bytes should be the box ID ('jP '). # 3rd 4 bytes should be the box signature (13, 10, 135, 10). f.seek(0) - buffer = f.read(12) - values = struct.unpack('>I4s4B', buffer) + read_buffer = f.read(12) + values = struct.unpack('>I4s4B', read_buffer) L = values[0] T = values[1] signature = values[2:] @@ -338,7 +349,7 @@ class Jp2k(Jp2kBox): msg = 'RGB colorspace requires at least 3 components.' raise IOError(msg) else: - colorspace = _cspace_map[colorspace] + colorspace = _COLORSPACE_MAP[colorspace] if mct is None: if colorspace == _opj2.CLRSPC_SRGB: @@ -439,10 +450,10 @@ class Jp2k(Jp2kBox): FileTypeBox(), JP2HeaderBox(), ContiguousCodestreamBox()] - c = self.get_codestream() - height = c.segment[1].ysiz - width = c.segment[1].xsiz - num_components = len(c.segment[1].xrsiz) + codestream = self.get_codestream() + height = codestream.segment[1].ysiz + width = codestream.segment[1].xsiz + num_components = len(codestream.segment[1].xrsiz) boxes[2].box = [ImageHeaderBox(height=height, width=width, num_components=num_components), @@ -477,7 +488,6 @@ class Jp2k(Jp2kBox): raise IOError(msg) # colr must be present in jp2 header box. - jp2hb = jp2h.box colr_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'colr'] if len(colr_lst) == 0: msg = "The jp2 header box must contain a color definition box." @@ -500,7 +510,6 @@ class Jp2k(Jp2kBox): cdef = jp2h.box[cdef_lst[0]] assn = cdef.association typ = cdef.channel_type - index = cdef.index if colr.colorspace == SRGB: if any([chan + 1 not in assn or typ[chan] != 0 for chan in [0, 1, 2]]): @@ -652,8 +661,8 @@ class Jp2k(Jp2kBox): _opj.setup_decoder(dinfo, dparameters) - with open(self.filename, 'rb') as fp: - src = fp.read() + with open(self.filename, 'rb') as fptr: + src = fptr.read() cio = _opj.cio_open(dinfo, src) image = _opj.decode(dinfo, cio) @@ -700,8 +709,9 @@ class Jp2k(Jp2kBox): with warnings.catch_warnings(): warnings.simplefilter("ignore") nelts = nrows * ncols - x = np.ctypeslib.as_array((ctypes.c_int32 * nelts).from_address(addr)) - data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) + band = np.ctypeslib.as_array((ctypes.c_int32 * nelts).from_address(addr)) + data[:, :, k] = np.reshape(band.astype(dtype), + (nrows, ncols)) if data.shape[2] == 1: data = data.view() @@ -885,12 +895,13 @@ class Jp2k(Jp2kBox): addr = ctypes.addressof(component.data.contents) with warnings.catch_warnings(): warnings.simplefilter("ignore") - x = np.ctypeslib.as_array( - (ctypes.c_int32 * nrows * ncols).from_address(addr)) + band = np.ctypeslib.as_array( + (ctypes.c_int32 * nrows * ncols).from_address(addr)) if as_bands: - data.append(np.reshape(x.astype(dtype), (nrows, ncols))) + data.append(np.reshape(band.astype(dtype), (nrows, ncols))) else: - data[:, :, k] = np.reshape(x.astype(dtype), (nrows, ncols)) + data[:, :, k] = np.reshape(band.astype(dtype), + (nrows, ncols)) return data @@ -985,20 +996,20 @@ class Jp2k(Jp2kBox): IOError If the file is JPX with more than one codestream. """ - with open(self.filename, 'rb') as fp: + with open(self.filename, 'rb') as fptr: if self._codec_format == _opj2.CODEC_J2K: - codestream = Codestream(fp, header_only=header_only) + codestream = Codestream(fptr, header_only=header_only) else: box = [x for x in self.box if x.box_id == 'jp2c'] if len(box) != 1: msg = "JP2 files must have a single codestream." raise RuntimeError(msg) - fp.seek(box[0].offset) - buffer = fp.read(8) - (L, T) = struct.unpack('>I4s', buffer) + fptr.seek(box[0].offset) + read_buffer = fptr.read(8) + (L, T) = struct.unpack('>I4s', read_buffer) if L == 1: # Seek past the XL field. - buffer = fp.read(8) - codestream = Codestream(fp, header_only=header_only) + read_buffer = fptr.read(8) + codestream = Codestream(fptr, header_only=header_only) return codestream From bb705db4615e5e91d16806617398333895df6af4 Mon Sep 17 00:00:00 2001 From: John Evans Date: Tue, 9 Jul 2013 08:16:37 -0400 Subject: [PATCH 35/54] pylint work, wraps up much of jp2k module. #71 --- docs/source/how_do_i.rst | 6 +- glymur/jp2k.py | 128 +++++++++--------- glymur/test/test_callbacks.py | 4 +- glymur/test/test_jp2k.py | 22 ++-- glymur/test/test_opj_suite.py | 212 +++++++++++++++--------------- glymur/test/test_opj_suite_neg.py | 6 +- glymur/test/test_printing.py | 4 +- 7 files changed, 195 insertions(+), 187 deletions(-) diff --git a/docs/source/how_do_i.rst b/docs/source/how_do_i.rst index a15b865..5fcee3a 100644 --- a/docs/source/how_do_i.rst +++ b/docs/source/how_do_i.rst @@ -6,13 +6,13 @@ How do I...? Read the lowest resolution thumbnail? ===================================== Printing the Jp2k object should reveal the number of resolutions (look in the -COD segment section), but you can take a shortcut by supplying -1 as the reduce -level. :: +COD segment section), but you can take a shortcut by supplying -1 as the +resolution level. :: >>> import glymur >>> file = glymur.data.nemo() >>> j = glymur.Jp2k(file) - >>> thumbnail = j.read(reduce=-1) + >>> thumbnail = j.read(rlevel=-1) Display metadata? ================= diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 64dbcd1..1677954 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -44,22 +44,25 @@ _CMPFUNC = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p) def _default_error_handler(msg, _): + """Default error handler callback for openjpeg library.""" msg = "OpenJPEG library error: {0}".format(msg.decode('utf-8').rstrip()) _opj2.set_error_message(msg) def _default_info_handler(msg, _): + """Default info handler callback for openjpeg library.""" print("[INFO] {0}".format(msg.decode('utf-8').rstrip())) def _default_warning_handler(library_msg, _): + """Default warning handler callback for openjpeg library.""" library_msg = library_msg.decode('utf-8').rstrip() msg = "OpenJPEG library warning: {0}".format(library_msg) warnings.warn(msg) -_error_callback = _CMPFUNC(_default_error_handler) -_info_callback = _CMPFUNC(_default_info_handler) -_warning_callback = _CMPFUNC(_default_warning_handler) +_ERROR_CALLBACK = _CMPFUNC(_default_error_handler) +_INFO_CALLBACK = _CMPFUNC(_default_info_handler) +_WARNING_CALLBACK = _CMPFUNC(_default_warning_handler) class Jp2k(Jp2kBox): @@ -86,10 +89,12 @@ class Jp2k(Jp2kBox): mode : str, optional The mode used to open the file. """ + Jp2kBox.__init__(self) self.filename = filename self.mode = mode self.box = [] - self.offset = 0 + self._codec_format = None + self._file_size = 0 # Parse the file for JP2/JPX contents only if we are reading it. if mode == 'rb': @@ -117,11 +122,11 @@ class Jp2k(Jp2kBox): self.length = stat.st_size self._file_size = stat.st_size - with open(self.filename, 'rb') as f: + with open(self.filename, 'rb') as fptr: # Make sure we have a JPEG2000 file. It could be either JP2 or # J2C. Check for J2C first, single box in that case. - read_buffer = f.read(2) + read_buffer = fptr.read(2) signature, = struct.unpack('>H', read_buffer) if signature == 0xff4f: self._codec_format = _opj2.CODEC_J2K @@ -135,21 +140,23 @@ class Jp2k(Jp2kBox): # First 4 bytes should be 12, the length of the 'jP ' box. # 2nd 4 bytes should be the box ID ('jP '). # 3rd 4 bytes should be the box signature (13, 10, 135, 10). - f.seek(0) - read_buffer = f.read(12) + fptr.seek(0) + read_buffer = fptr.read(12) values = struct.unpack('>I4s4B', read_buffer) - L = values[0] - T = values[1] + box_length = values[0] + box_id = values[1] signature = values[2:] - if L != 12 or T != b'jP ' or signature != (13, 10, 135, 10): + if ((box_length != 12) or (box_id != b'jP ') or + (signature != (13, 10, 135, 10))): msg = '{0} is not a JPEG 2000 file.'.format(self.filename) raise IOError(msg) # Back up and start again, we know we have a superbox (box of # boxes) here. - f.seek(0) - self.box = self.parse_superbox(f) + fptr.seek(0) + self.box = self.parse_superbox(fptr) + # pylint: disable-msg=W0221 def write(self, img_array, cratios=None, eph=False, psnr=None, numres=None, cbsize=None, psizes=None, grid_offset=None, sop=False, subsam=None, tilesize=None, prog=None, modesw=None, @@ -214,7 +221,7 @@ class Jp2k(Jp2kBox): >>> import glymur >>> jfile = glymur.data.nemo() >>> jp2 = glymur.Jp2k(jfile) - >>> data = jp2.read(reduce=1) + >>> data = jp2.read(rlevel=1) >>> from tempfile import NamedTemporaryFile >>> tfile = NamedTemporaryFile(suffix='.jp2', delete=False) >>> j = Jp2k(tfile.name, mode='wb') @@ -224,8 +231,8 @@ class Jp2k(Jp2kBox): cparams = _opj2.set_default_encoder_parameters() outfile = self.filename.encode() - n = _opj2.PATH_LEN - len(outfile) - outfile += b'0' * n + num_pad_bytes = _opj2.PATH_LEN - len(outfile) + outfile += b'0' * num_pad_bytes cparams.outfile = outfile if self.filename[-4:].lower() == '.jp2': @@ -241,19 +248,19 @@ class Jp2k(Jp2kBox): cparams.cp_disto_alloc = 1 if cbsize is not None: - w = cbsize[1] - h = cbsize[0] - if h * w > 4096 or h < 4 or w < 4: + width = cbsize[1] + height = cbsize[0] + if height * width > 4096 or height < 4 or width < 4: msg = "Code block area cannot exceed 4096. " msg += "Code block height and width must be larger than 4." raise RuntimeError(msg) - if ((math.log(h, 2) != math.floor(math.log(h, 2)) or - math.log(w, 2) != math.floor(math.log(w, 2)))): + if ((math.log(height, 2) != math.floor(math.log(height, 2)) or + math.log(width, 2) != math.floor(math.log(width, 2)))): msg = "Bad code block size ({0}, {1}), " msg += "must be powers of 2." - raise IOError(msg.format(h, w)) - cparams.cblockw_init = w - cparams.cblockh_init = h + raise IOError(msg.format(height, width)) + cparams.cblockw_init = width + cparams.cblockh_init = height if cratios is not None: cparams.tcp_numlayers = len(cratios) @@ -269,9 +276,10 @@ class Jp2k(Jp2kBox): cparams.image_offset_y0 = grid_offset[0] if modesw is not None: - for x in range(6): - if modesw & (1 << x): - cparams.mode |= (1 << x) + for shift in range(6): + power_of_two = 1 << shift + if modesw & power_of_two: + cparams.mode |= power_of_two if numres is not None: cparams.numresolution = numres @@ -402,12 +410,12 @@ class Jp2k(Jp2kBox): codec = _opj2.create_compress(codec_fmt) if verbose: - _opj2.set_info_handler(codec, _info_callback) + _opj2.set_info_handler(codec, _INFO_CALLBACK) else: _opj2.set_info_handler(codec, None) - _opj2.set_warning_handler(codec, _warning_callback) - _opj2.set_error_handler(codec, _error_callback) + _opj2.set_warning_handler(codec, _WARNING_CALLBACK) + _opj2.set_error_handler(codec, _ERROR_CALLBACK) _opj2.setup_encoder(codec, cparams, image) strm = _opj2.stream_create_default_file_stream_v3(self.filename, False) _opj2.start_compress(codec, image, strm) @@ -559,8 +567,8 @@ class Jp2k(Jp2kBox): Parameters ---------- - reduce : int, optional - Factor by which to reduce output resolution. Use -1 to get the + rlevel : int, optional + Factor by which to rlevel output resolution. Use -1 to get the lowest resolution thumbnail. This is the only keyword option available to use when only OpenJPEG version 1.5.1 is present. layer : int, optional @@ -594,7 +602,7 @@ class Jp2k(Jp2kBox): Read the lowest resolution thumbnail. - >>> thumbnail = jp.read(reduce=-1) + >>> thumbnail = jp.read(rlevel=-1) >>> thumbnail.shape (728, 1296, 3) """ @@ -604,13 +612,13 @@ class Jp2k(Jp2kBox): img = self._read_openjpeg(**kwargs) return img - def _read_openjpeg(self, reduce=0, verbose=False): + def _read_openjpeg(self, rlevel=0, verbose=False): """Read a JPEG 2000 image using libopenjpeg. Parameters ---------- - reduce : int, optional - Factor by which to reduce output resolution. Use -1 to get the + rlevel : int, optional + Factor by which to rlevel output resolution. Use -1 to get the lowest resolution thumbnail. verbose : bool, optional Print informational messages produced by the OpenJPEG library. @@ -640,7 +648,7 @@ class Jp2k(Jp2kBox): # Set decoding parameters. dparameters = _opj.dparameters_t() _opj.set_default_decoder_parameters(ctypes.byref(dparameters)) - dparameters.cp_reduce = reduce + dparameters.cp_reduce = rlevel dparameters.decod_format = self._codec_format infile = self.filename.encode() @@ -651,11 +659,11 @@ class Jp2k(Jp2kBox): dinfo = _opj.create_decompress(dparameters.decod_format) event_mgr = _opj.event_mgr_t() - info_handler = ctypes.cast(_info_callback, ctypes.c_void_p) + info_handler = ctypes.cast(_INFO_CALLBACK, ctypes.c_void_p) event_mgr.info_handler = info_handler if verbose else None - event_mgr.warning_handler = ctypes.cast(_warning_callback, + event_mgr.warning_handler = ctypes.cast(_WARNING_CALLBACK, ctypes.c_void_p) - event_mgr.error_handler = ctypes.cast(_error_callback, + event_mgr.error_handler = ctypes.cast(_ERROR_CALLBACK, ctypes.c_void_p) _opj.set_event_mgr(dinfo, ctypes.byref(event_mgr)) @@ -719,7 +727,7 @@ class Jp2k(Jp2kBox): return data - def _read_openjp2(self, reduce=0, layer=0, area=None, tile=None, + def _read_openjp2(self, rlevel=0, layer=0, area=None, tile=None, verbose=False): """Read a JPEG 2000 image using libopenjp2. @@ -727,8 +735,8 @@ class Jp2k(Jp2kBox): ---------- layer : int, optional Number of quality layer to decode. - reduce : int, optional - Factor by which to reduce output resolution. Use -1 to get the + rlevel : int, optional + Factor by which to rlevel output resolution. Use -1 to get the lowest resolution thumbnail. area : tuple, optional Specifies decoding image area, @@ -756,7 +764,7 @@ class Jp2k(Jp2kBox): msg = "Components must all have the same subsampling factors." raise RuntimeError(msg) - img_array = self._read_common(reduce=reduce, + img_array = self._read_common(rlevel=rlevel, layer=layer, area=area, tile=tile, @@ -769,7 +777,7 @@ class Jp2k(Jp2kBox): return img_array - def _read_common(self, reduce=0, layer=0, area=None, tile=None, + def _read_common(self, rlevel=0, layer=0, area=None, tile=None, verbose=False, as_bands=False): """Read a JPEG 2000 image. @@ -777,8 +785,8 @@ class Jp2k(Jp2kBox): ---------- layer : int, optional Number of quality layer to decode. - reduce : int, optional - Factor by which to reduce output resolution. + rlevel : int, optional + Factor by which to rlevel output resolution. area : tuple, optional Specifies decoding image area, (first_row, first_col, last_row, last_col) @@ -805,12 +813,12 @@ class Jp2k(Jp2kBox): dparam.cp_layer = layer - if reduce == -1: + if rlevel == -1: # Get the lowest resolution thumbnail. codestream = self.get_codestream() - reduce = codestream.segment[2].spcod[4] + rlevel = codestream.segment[2].spcod[4] - dparam.cp_reduce = reduce + dparam.cp_reduce = rlevel if area is not None: if area[0] < 0 or area[1] < 0: msg = "Upper left corner coordinates must be nonnegative: {0}" @@ -836,10 +844,10 @@ class Jp2k(Jp2kBox): codec = _opj2.create_decompress(self._codec_format) stack.callback(_opj2.destroy_codec, codec) - _opj2.set_error_handler(codec, _error_callback) - _opj2.set_warning_handler(codec, _warning_callback) + _opj2.set_error_handler(codec, _ERROR_CALLBACK) + _opj2.set_warning_handler(codec, _WARNING_CALLBACK) if verbose: - _opj2.set_info_handler(codec, _info_callback) + _opj2.set_info_handler(codec, _INFO_CALLBACK) else: _opj2.set_info_handler(codec, None) @@ -905,7 +913,7 @@ class Jp2k(Jp2kBox): return data - def read_bands(self, reduce=0, layer=0, area=None, tile=None, + def read_bands(self, rlevel=0, layer=0, area=None, tile=None, verbose=False): """Read a JPEG 2000 image. @@ -917,8 +925,8 @@ class Jp2k(Jp2kBox): ---------- layer : int, optional Number of quality layer to decode. - reduce : int, optional - Factor by which to reduce output resolution. + rlevel : int, optional + Factor by which to rlevel output resolution. area : tuple, optional Specifies decoding image area, (first_row, first_col, last_row, last_col) @@ -941,7 +949,7 @@ class Jp2k(Jp2kBox): >>> import glymur >>> jfile = glymur.data.nemo() >>> jp = glymur.Jp2k(jfile) - >>> components_lst = jp.read_bands(reduce=1) + >>> components_lst = jp.read_bands(rlevel=1) Raises ------ @@ -952,7 +960,7 @@ class Jp2k(Jp2kBox): msg = "Requires openjp2 library." raise NotImplementedError(msg) - lst = self._read_common(reduce=reduce, + lst = self._read_common(rlevel=rlevel, layer=layer, area=area, tile=tile, @@ -1006,8 +1014,8 @@ class Jp2k(Jp2kBox): raise RuntimeError(msg) fptr.seek(box[0].offset) read_buffer = fptr.read(8) - (L, T) = struct.unpack('>I4s', read_buffer) - if L == 1: + (box_length, _) = struct.unpack('>I4s', read_buffer) + if box_length == 1: # Seek past the XL field. read_buffer = fptr.read(8) codestream = Codestream(fptr, header_only=header_only) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index b203f6b..5b2dc6b 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -46,7 +46,7 @@ class TestCallbacks(unittest.TestCase): # Verify that we get the expected stdio output when our internal info # callback handler is enabled. j = glymur.Jp2k(self.j2kfile) - d = j.read(reduce=1, verbose=True, area=(0, 0, 200, 150)) + d = j.read(rlevel=1, verbose=True, area=(0, 0, 200, 150)) actual = sys.stdout.getvalue().strip() lines = ['[INFO] Start to read j2k main header (0).', @@ -92,7 +92,7 @@ class TestCallbacks15(unittest.TestCase): # Verify that we get the expected stdio output when our internal info # callback handler is enabled. j = glymur.Jp2k(self.j2kfile) - d = j.read(reduce=1, verbose=True) + d = j.read(rlevel=1, verbose=True) actual = sys.stdout.getvalue().strip() regex = re.compile(r"""\[INFO\]\stile\s1\sof\s1\s+ diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index bbb4428..5f04283 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -88,11 +88,11 @@ class TestJp2k(unittest.TestCase): with self.assertWarns(UserWarning) as cw: jp2k = Jp2k(self._bad_xml_file) - def test_reduce_max(self): - # Verify that reduce=-1 gets us the lowest resolution image + def test_rlevel_max(self): + # Verify that rlevel=-1 gets us the lowest resolution image j = Jp2k(self.j2kfile) - thumbnail1 = j.read(reduce=-1) - thumbnail2 = j.read(reduce=5) + thumbnail1 = j.read(rlevel=-1) + thumbnail2 = j.read(rlevel=5) np.testing.assert_array_equal(thumbnail1, thumbnail2) self.assertEqual(thumbnail1.shape, (25, 15, 3)) @@ -120,11 +120,11 @@ class TestJp2k(unittest.TestCase): # End corner must be >= start corner d = j.read(area=(10, 10, 8, 8)) - def test_reduce_too_high(self): + def test_rlevel_too_high(self): # Verify that we error out appropriately if not given a JPEG 2000 file. j = Jp2k(self.jp2file) with self.assertRaises(IOError): - d = j.read(reduce=6) + d = j.read(rlevel=6) def test_not_JPEG2000(self): # Verify that we error out appropriately if not given a JPEG 2000 file. @@ -167,7 +167,7 @@ class TestJp2k(unittest.TestCase): def test_write_cprl(self): # Issue 17 j = Jp2k(self.jp2file) - expdata = j.read(reduce=1) + expdata = j.read(rlevel=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') ofile.write(expdata, prog='CPRL') @@ -529,7 +529,7 @@ class TestJp2k(unittest.TestCase): def test_asoc_label_box(self): # Construct a fake file with an asoc and a label box, as # OpenJPEG doesn't have such a file. - data = Jp2k(self.jp2file).read(reduce=1) + data = Jp2k(self.jp2file).read(rlevel=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') j.write(data) @@ -600,10 +600,10 @@ class TestJp2k(unittest.TestCase): :\sdx=1\sdy=0''', re.VERBOSE) if sys.hexversion < 0x03020000: with self.assertRaisesRegexp((IOError, OSError), regexp) as ce: - d = j.read(reduce=1) + d = j.read(rlevel=1) else: with self.assertRaisesRegex((IOError, OSError), regexp) as ce: - d = j.read(reduce=1) + d = j.read(rlevel=1) def test_xmp_attribute(self): # Verify that we can read the XMP packet in our shipping example file. @@ -699,7 +699,7 @@ class TestJp2k15(unittest.TestCase): # and OPJ_DATA_ROOT is not set. We need at least one # working JP2 test. j2k = Jp2k(self.jp2file) - d = j2k.read(reduce=1) + d = j2k.read(rlevel=1) def test_basic_j2k(self): # This test is only useful when openjp2 is not available diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index f882811..f780725 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -49,7 +49,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_01.pgx') pgxdata = read_pgx(pgxfile) @@ -62,7 +62,7 @@ class TestSuite(unittest.TestCase): # really know what to do with it. Just ignore. warnings.simplefilter("ignore") jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_02.pgx') pgxdata = read_pgx(pgxfile) @@ -72,7 +72,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_03_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_03r0.pgx') pgxdata = read_pgx(pgxfile) @@ -81,7 +81,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_03_j2k_r1(self): jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) + jpdata = jp2k.read(rlevel=1) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_03r1.pgx') @@ -92,7 +92,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_04_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=3) + jpdata = jp2k.read(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_04.pgx') @@ -105,7 +105,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_05_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_05.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read_bands(reduce=3) + jpdata = jp2k.read_bands(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_05.pgx') @@ -117,7 +117,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_06_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_06.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=3) + jpdata = jp2k.read(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_06.pgx') @@ -142,7 +142,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_08_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=5) + jpdata = jp2k.read(rlevel=5) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_08.pgx') @@ -154,7 +154,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_09_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=2) + jpdata = jp2k.read(rlevel=2) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_09.pgx') @@ -167,7 +167,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_10_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_10.pgx') @@ -179,7 +179,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_11_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_11.pgx') @@ -191,7 +191,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_12_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_12.pgx') @@ -203,7 +203,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_13_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_13.pgx') @@ -215,7 +215,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_14_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=2) + jpdata = jp2k.read(rlevel=2) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_14.pgx') @@ -227,7 +227,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_15_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_15r0.pgx') @@ -238,7 +238,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_15_j2k_r1(self): jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) + jpdata = jp2k.read(rlevel=1) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_15r1.pgx') @@ -249,7 +249,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P0_p0_16_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_16.pgx') @@ -260,7 +260,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_01.pgx') @@ -272,7 +272,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_02_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=3) + jpdata = jp2k.read(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_02.pgx') @@ -288,7 +288,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_03_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_03.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=3) + jpdata = jp2k.read(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_03.pgx') @@ -304,7 +304,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_04_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_04r0.pgx') @@ -318,7 +318,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_04_j2k_r3(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=3) + jpdata = jp2k.read(rlevel=3) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_04r3.pgx') @@ -332,7 +332,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_05_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_05.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=4) + jpdata = jp2k.read(rlevel=4) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_05.pgx') @@ -347,7 +347,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_06_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) + jpdata = jp2k.read(rlevel=1) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_06.pgx') @@ -362,7 +362,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C0P1_p1_07_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_07.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_07.pgx') @@ -376,7 +376,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_01_0.pgx') pgxdata = read_pgx(pgxfile) @@ -390,7 +390,7 @@ class TestSuite(unittest.TestCase): # really know what to do with it. Just ignore. warnings.simplefilter("ignore") jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_02_0.pgx') pgxdata = read_pgx(pgxfile) @@ -400,7 +400,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_03_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_03_0.pgx') pgxdata = read_pgx(pgxfile) @@ -410,7 +410,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_04_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_0.pgx') pgxdata = read_pgx(pgxfile) @@ -498,7 +498,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_08_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) + jpdata = jp2k.read(rlevel=1) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_0.pgx') pgxdata = read_pgx(pgxfile) @@ -515,7 +515,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_09_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_09_0.pgx') pgxdata = read_pgx(pgxfile) @@ -524,7 +524,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_10_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_10.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') pgxdata = read_pgx(pgxfile) @@ -541,7 +541,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_11_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_11_0.pgx') pgxdata = read_pgx(pgxfile) @@ -551,7 +551,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_12_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_12_0.pgx') pgxdata = read_pgx(pgxfile) @@ -561,7 +561,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_13_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_0.pgx') pgxdata = read_pgx(pgxfile) @@ -582,7 +582,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_14_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_0.pgx') pgxdata = read_pgx(pgxfile) @@ -599,7 +599,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_15_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_15_0.pgx') pgxdata = read_pgx(pgxfile) @@ -608,7 +608,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P0_p0_16_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_16_0.pgx') pgxdata = read_pgx(pgxfile) @@ -617,7 +617,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P1_p1_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_01_0.pgx') pgxdata = read_pgx(pgxfile) @@ -626,7 +626,7 @@ class TestSuite(unittest.TestCase): def test_ETS_C1P1_p1_02_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_0.pgx') pgxdata = read_pgx(pgxfile) @@ -1140,51 +1140,51 @@ class TestSuite(unittest.TestCase): def test_NR_DEC_p1_04_j2k_50_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(0, 0, 1024, 1024), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(0, 0, 1024, 1024), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[0:256, 0:256]) def test_NR_DEC_p1_04_j2k_51_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(640, 512, 768, 640), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(640, 512, 768, 640), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[160:192, 128:160]) def test_NR_DEC_p1_04_j2k_52_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(896, 896, 1024, 1024), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(896, 896, 1024, 1024), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[224:352, 224:352]) def test_NR_DEC_p1_04_j2k_53_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(500, 100, 800, 300), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(500, 100, 800, 300), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[125:200, 25:75]) def test_NR_DEC_p1_04_j2k_54_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(520, 260, 600, 360), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(520, 260, 600, 360), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[130:150, 65:90]) def test_NR_DEC_p1_04_j2k_55_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(520, 260, 660, 360), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(520, 260, 660, 360), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[130:165, 65:90]) def test_NR_DEC_p1_04_j2k_56_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(520, 360, 600, 400), reduce=2) - odata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(520, 360, 600, 400), rlevel=2) + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(ssdata, odata[130:150, 90:100]) def test_NR_DEC_p1_04_j2k_57_decode(self): @@ -1201,8 +1201,8 @@ class TestSuite(unittest.TestCase): jp2k = Jp2k(jfile) with warnings.catch_warnings(): warnings.simplefilter("ignore") - tdata = jp2k.read(tile=63, reduce=2) # last tile - odata = jp2k.read(reduce=2) + tdata = jp2k.read(tile=63, rlevel=2) # last tile + odata = jp2k.read(rlevel=2) np.testing.assert_array_equal(tdata, odata[224:256, 224:256]) def test_NR_DEC_p1_04_j2k_59_decode(self): @@ -1219,8 +1219,8 @@ class TestSuite(unittest.TestCase): jp2k = Jp2k(jfile) with warnings.catch_warnings(): warnings.simplefilter("ignore") - tdata = jp2k.read(tile=12, reduce=1) # 2nd row, 5th column - odata = jp2k.read(reduce=1) + tdata = jp2k.read(tile=12, rlevel=1) # 2nd row, 5th column + odata = jp2k.read(rlevel=1) np.testing.assert_array_equal(tdata, odata[64:128, 256:320]) @unittest.skip("fprintf stderr output in r2343.") @@ -1283,45 +1283,45 @@ class TestSuite(unittest.TestCase): def test_NR_DEC_p1_06_j2k_68_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(0, 0, 12, 12), reduce=1) - odata = jp2k.read(reduce=1) + ssdata = jp2k.read(area=(0, 0, 12, 12), rlevel=1) + odata = jp2k.read(rlevel=1) np.testing.assert_array_equal(ssdata, odata[0:6, 0:6]) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_69_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(1, 8, 8, 11), reduce=1) + ssdata = jp2k.read(area=(1, 8, 8, 11), rlevel=1) self.assertEqual(ssdata.shape, (3, 2, 3)) def test_NR_DEC_p1_06_j2k_70_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(9, 9, 12, 12), reduce=1) + ssdata = jp2k.read(area=(9, 9, 12, 12), rlevel=1) self.assertEqual(ssdata.shape, (1, 1, 3)) def test_NR_DEC_p1_06_j2k_71_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(10, 4, 12, 10), reduce=1) + ssdata = jp2k.read(area=(10, 4, 12, 10), rlevel=1) self.assertEqual(ssdata.shape, (1, 3, 3)) def test_NR_DEC_p1_06_j2k_72_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(3, 3, 9, 9), reduce=1) + ssdata = jp2k.read(area=(3, 3, 9, 9), rlevel=1) self.assertEqual(ssdata.shape, (3, 3, 3)) def test_NR_DEC_p1_06_j2k_73_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(4, 4, 7, 7), reduce=1) + ssdata = jp2k.read(area=(4, 4, 7, 7), rlevel=1) self.assertEqual(ssdata.shape, (2, 2, 3)) def test_NR_DEC_p1_06_j2k_74_decode(self): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(4, 4, 5, 5), reduce=1) + ssdata = jp2k.read(area=(4, 4, 5, 5), rlevel=1) self.assertEqual(ssdata.shape, (1, 1, 3)) def test_NR_DEC_p1_06_j2k_75_decode(self): @@ -1329,7 +1329,7 @@ class TestSuite(unittest.TestCase): jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) with self.assertRaises((IOError, OSError)) as ce: - ssdata = jp2k.read(area=(9, 9, 12, 12), reduce=2) + ssdata = jp2k.read(area=(9, 9, 12, 12), rlevel=2) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_76_decode(self): @@ -1378,7 +1378,7 @@ class TestSuite(unittest.TestCase): jp2k = Jp2k(jfile) with warnings.catch_warnings(): warnings.simplefilter("ignore") - tiledata = jp2k.read(tile=0, reduce=2) + tiledata = jp2k.read(tile=0, rlevel=2) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_81_decode(self): @@ -1387,7 +1387,7 @@ class TestSuite(unittest.TestCase): jp2k = Jp2k(jfile) with warnings.catch_warnings(): warnings.simplefilter("ignore") - tiledata = jp2k.read(tile=5, reduce=2) + tiledata = jp2k.read(tile=5, rlevel=2) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_82_decode(self): @@ -1396,7 +1396,7 @@ class TestSuite(unittest.TestCase): jp2k = Jp2k(jfile) with warnings.catch_warnings(): warnings.simplefilter("ignore") - tiledata = jp2k.read(tile=9, reduce=2) + tiledata = jp2k.read(tile=9, rlevel=2) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_83_decode(self): @@ -1406,14 +1406,14 @@ class TestSuite(unittest.TestCase): with warnings.catch_warnings(): warnings.simplefilter("ignore") with self.assertRaises((IOError, OSError)) as ce: - tiledata = jp2k.read(tile=15, reduce=2) + tiledata = jp2k.read(tile=15, rlevel=2) @unittest.skip("fprintf stderr output in r2343.") def test_NR_DEC_p1_06_j2k_84_decode(self): # Just read the data, don't bother verifying. jfile = os.path.join(data_root, 'input/conformance/p1_06.j2k') jp2k = Jp2k(jfile) - data = jp2k.read(reduce=4) + data = jp2k.read(rlevel=4) def test_NR_DEC_p0_04_j2k_85_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') @@ -1460,43 +1460,43 @@ class TestSuite(unittest.TestCase): def test_NR_DEC_p0_04_j2k_91_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(0, 0, 256, 256), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(0, 0, 256, 256), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[0:64, 0:64], ssdata) def test_NR_DEC_p0_04_j2k_92_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(0, 128, 128, 256), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(0, 128, 128, 256), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[0:32, 32:64], ssdata) def test_NR_DEC_p0_04_j2k_93_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(10, 50, 200, 120), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(10, 50, 200, 120), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[3:50, 13:30], ssdata) def test_NR_DEC_p0_04_j2k_94_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(150, 10, 210, 190), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(150, 10, 210, 190), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[38:53, 3:48], ssdata) def test_NR_DEC_p0_04_j2k_95_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(80, 100, 150, 200), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(80, 100, 150, 200), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[20:38, 25:50], ssdata) def test_NR_DEC_p0_04_j2k_96_decode(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - ssdata = jp2k.read(area=(20, 150, 50, 200), reduce=2) - fulldata = jp2k.read(reduce=2) + ssdata = jp2k.read(area=(20, 150, 50, 200), rlevel=2) + fulldata = jp2k.read(rlevel=2) np.testing.assert_array_equal(fulldata[5:13, 38:50], ssdata) @@ -7360,7 +7360,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P0_p0_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_01.pgx') pgxdata = read_pgx(pgxfile) @@ -7373,7 +7373,7 @@ class TestSuite15(unittest.TestCase): # really know what to do with it. Just ignore. warnings.simplefilter("ignore") jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_02.pgx') pgxdata = read_pgx(pgxfile) @@ -7382,7 +7382,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P0_p0_09_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=2) + jpdata = jp2k.read(rlevel=2) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_09.pgx') @@ -7394,7 +7394,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P0_p0_11_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_11.pgx') @@ -7406,7 +7406,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P0_p0_12_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_12.pgx') @@ -7417,7 +7417,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P0_p0_16_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p0_16.pgx') @@ -7428,7 +7428,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C0P1_p1_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c0p1_01.pgx') @@ -7439,7 +7439,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_01_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7453,7 +7453,7 @@ class TestSuite15(unittest.TestCase): # really know what to do with it. Just ignore. warnings.simplefilter("ignore") jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_02_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7463,7 +7463,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_03_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_03.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_03_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7473,7 +7473,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_04_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_04.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_04_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7493,7 +7493,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_08_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_08.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=1) + jpdata = jp2k.read(rlevel=1) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_08_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7510,7 +7510,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_09_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_09.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_09_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7522,7 +7522,7 @@ class TestSuite15(unittest.TestCase): with warnings.catch_warnings(): # This file has an invalid ICC profile warnings.simplefilter("ignore") - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_10_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7539,7 +7539,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_11_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_11.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_11_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7549,7 +7549,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_12_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_12.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_12_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7559,7 +7559,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_13_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_13.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_13_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7580,7 +7580,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_14_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_14.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_14_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7597,7 +7597,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_15_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_15.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_15_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7606,7 +7606,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P0_p0_16_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p0_16.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p0_16_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7615,7 +7615,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P1_p1_01_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_01.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_01_0.pgx') pgxdata = read_pgx(pgxfile) @@ -7624,7 +7624,7 @@ class TestSuite15(unittest.TestCase): def test_ETS_C1P1_p1_02_j2k(self): jfile = os.path.join(data_root, 'input/conformance/p1_02.j2k') jp2k = Jp2k(jfile) - jpdata = jp2k.read(reduce=0) + jpdata = jp2k.read(rlevel=0) pgxfile = os.path.join(data_root, 'baseline/conformance/c1p1_02_0.pgx') pgxdata = read_pgx(pgxfile) diff --git a/glymur/test/test_opj_suite_neg.py b/glymur/test/test_opj_suite_neg.py index 6027ea2..8220f24 100644 --- a/glymur/test/test_opj_suite_neg.py +++ b/glymur/test/test_opj_suite_neg.py @@ -157,7 +157,7 @@ class TestSuiteNegative(unittest.TestCase): def test_precinct_size_not_multiple_of_two(self): # Seems like precinct sizes should be powers of two. ifile = Jp2k(self.j2kfile) - data = ifile.read(reduce=2) + data = ifile.read(rlevel=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: @@ -166,7 +166,7 @@ class TestSuiteNegative(unittest.TestCase): def test_codeblock_size_not_multiple_of_two(self): # Seems like code block sizes should be powers of two. ifile = Jp2k(self.j2kfile) - data = ifile.read(reduce=2) + data = ifile.read(rlevel=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: @@ -176,7 +176,7 @@ class TestSuiteNegative(unittest.TestCase): # Seems like code block sizes should never exceed half that of # precinct size. ifile = Jp2k(self.j2kfile) - data = ifile.read(reduce=2) + data = ifile.read(rlevel=2) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: ofile = Jp2k(tfile.name, 'wb') with self.assertRaises(IOError) as ce: diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 54176cd..4ced196 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -34,7 +34,7 @@ class TestPrintingNeedsLib(unittest.TestCase): with tempfile.NamedTemporaryFile(suffix='.jp2', delete=False) as tfile: cls._plain_nemo_file = tfile.name ijfile = Jp2k(jp2file) - data = ijfile.read(reduce=1) + data = ijfile.read(rlevel=1) ojfile = Jp2k(cls._plain_nemo_file, 'wb') ojfile.write(data) @@ -122,7 +122,7 @@ class TestPrintingNeedsLib(unittest.TestCase): def test_asoc_label_box(self): # Construct a fake file with an asoc and a label box, as # OpenJPEG doesn't have such a file. - data = glymur.Jp2k(self.jp2file).read(reduce=1) + data = glymur.Jp2k(self.jp2file).read(rlevel=1) with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = glymur.Jp2k(tfile.name, 'wb') j.write(data) From b31767823041260de80ef3259c6c77004fb9b6bd Mon Sep 17 00:00:00 2001 From: John Evans Date: Tue, 9 Jul 2013 09:01:16 -0400 Subject: [PATCH 36/54] pylint work, moving some definitions around. #71 --- glymur/codestream.py | 24 +++++++++---- glymur/core.py | 30 +--------------- glymur/jp2box.py | 19 +++++++--- glymur/jp2k.py | 19 ++++++---- glymur/test/test_opj_suite.py | 68 ++++++++++++++++++++++------------- 5 files changed, 90 insertions(+), 70 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index 3995306..efdf8c3 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -12,11 +12,23 @@ import warnings import numpy as np -from .core import _progression_order_display -from .core import _wavelet_transform_display +from .core import LRCP, RLCP, RPCL, PCRL, CPRL +from .core import WAVELET_TRANSFORM_9x7_IRREVERSIBLE +from .core import WAVELET_TRANSFORM_5x3_REVERSIBLE from .core import _capabilities_display from .lib import openjp2 as opj2 +_PROGRESSION_ORDER_DISPLAY = { + LRCP: 'LRCP', + RLCP: 'RLCP', + RPCL: 'RPCL', + PCRL: 'PCRL', + CPRL: 'CPRL'} + +_WAVELET_TRANSFORM_DISPLAY = { + WAVELET_TRANSFORM_9x7_IRREVERSIBLE: '9-7 irreversible', + WAVELET_TRANSFORM_5x3_REVERSIBLE: '5-3 reversible'} + # Need a catch-all list of valid markers. # See table A-1 in ISO/IEC FCD15444-1. _VALID_MARKERS = [0xff00, 0xff01, 0xfffe] @@ -493,7 +505,7 @@ class COCsegment(Segment): msg = msg.format(self.spcoc[0] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.spcoc[4]]) + _WAVELET_TRANSFORM_DISPLAY[self.spcoc[4]]) msg += '\n ' msg += _context_string(self.spcoc[3]) @@ -587,13 +599,13 @@ class CODsegment(Segment): ' Wavelet transform: {6}'] msg += '\n '.join(lines) - msg = msg.format(_progression_order_display[self.spcod[0]], + msg = msg.format(_PROGRESSION_ORDER_DISPLAY[self.spcod[0]], self._layers, mct, self.spcod[4] + 1, int(self._code_block_size[0]), int(self._code_block_size[1]), - _wavelet_transform_display[self.spcod[8]]) + _WAVELET_TRANSFORM_DISPLAY[self.spcod[8]]) msg += '\n Precinct size: ' if self._precinct_size is None: @@ -770,7 +782,7 @@ class PODsegment(Segment): self.lyepod[j], self.repod[j], self.cdpod[j], - _progression_order_display[self.ppod[j]]) + _PROGRESSION_ORDER_DISPLAY[self.ppod[j]]) return msg diff --git a/glymur/core.py b/glymur/core.py index 05af436..71c08cd 100644 --- a/glymur/core.py +++ b/glymur/core.py @@ -5,14 +5,7 @@ RPCL = 2 PCRL = 3 CPRL = 4 -_progression_order_display = { - LRCP: 'LRCP', - RLCP: 'RLCP', - RPCL: 'RPCL', - PCRL: 'PCRL', - CPRL: 'CPRL'} - -progression_order = { +PROGRESSION_ORDER = { 'LRCP': LRCP, 'RLCP': RLCP, 'RPCL': RPCL, @@ -22,27 +15,11 @@ progression_order = { WAVELET_TRANSFORM_9x7_IRREVERSIBLE = 0 WAVELET_TRANSFORM_5x3_REVERSIBLE = 1 -_wavelet_transform_display = { - WAVELET_TRANSFORM_9x7_IRREVERSIBLE: '9-7 irreversible', - WAVELET_TRANSFORM_5x3_REVERSIBLE: '5-3 reversible'} - ENUMERATED_COLORSPACE = 1 RESTRICTED_ICC_PROFILE = 2 ANY_ICC_PROFILE = 3 VENDOR_COLOR_METHOD = 4 -_method_display = { - ENUMERATED_COLORSPACE: 'enumerated colorspace', - RESTRICTED_ICC_PROFILE: 'restricted ICC profile', - ANY_ICC_PROFILE: 'any ICC profile', - VENDOR_COLOR_METHOD: 'vendor color method'} - -_ = {1: 'accurately represents correct colorspace definition', - 2: 'approximates correct colorspace definition, exceptional quality', - 3: 'approximates correct colorspace definition, reasonable quality', - 4: 'approximates correct colorspace definition, poor quality'} -_approximation_display = _ - # Registration values for comment markers. RCME_BINARY = 0 # binary value comments RCME_ISO_8859_1 = 1 # comments in latin-1 codec @@ -98,11 +75,6 @@ _capabilities_display = { 3: '3'} # Reader requirements -#RREQ_UNRESTRICTED_JPEG2000_PART_1 = 5 -#RREQ_UNRESTRICTED_JPEG2000_PART_2 = 6 -#RREQ_CMYK_ENUMERATED_COLORSPACE = 55 -#RREQ_E_SRGB_ENUMERATED_COLORSPACE = 60 -#RREQ_ROMM_RGB_ENUMERATED_COLORSPACE = 61 _reader_requirements_display = { 0: 'File not completely understood', 1: 'Deprecated', diff --git a/glymur/jp2box.py b/glymur/jp2box.py index a608e5f..b12af8d 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -27,12 +27,23 @@ import xml.etree.cElementTree as ET import numpy as np from .codestream import Codestream -from .core import _approximation_display from .core import _colorspace_map_display from .core import _color_type_map_display -from .core import _method_display from .core import _reader_requirements_display -from .core import ENUMERATED_COLORSPACE +from .core import ENUMERATED_COLORSPACE, RESTRICTED_ICC_PROFILE +from .core import ANY_ICC_PROFILE, VENDOR_COLOR_METHOD + +_METHOD_DISPLAY = { + ENUMERATED_COLORSPACE: 'enumerated colorspace', + RESTRICTED_ICC_PROFILE: 'restricted ICC profile', + ANY_ICC_PROFILE: 'any ICC profile', + VENDOR_COLOR_METHOD: 'vendor color method'} + +_ = {1: 'accurately represents correct colorspace definition', + 2: 'approximates correct colorspace definition, exceptional quality', + 3: 'approximates correct colorspace definition, reasonable quality', + 4: 'approximates correct colorspace definition, poor quality'} +_approximation_display = _ class Jp2kBox(object): @@ -189,7 +200,7 @@ class ColourSpecificationBox(Jp2kBox): def __str__(self): msg = Jp2kBox.__str__(self) - msg += '\n Method: {0}'.format(_method_display[self.method]) + msg += '\n Method: {0}'.format(_METHOD_DISPLAY[self.method]) msg += '\n Precedence: {0}'.format(self.precedence) if self.approximation is not 0: diff --git a/glymur/jp2k.py b/glymur/jp2k.py index 1677954..abc54e2 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -21,7 +21,7 @@ import numpy as np from .codestream import Codestream from .core import SRGB from .core import GREYSCALE -from .core import progression_order +from .core import PROGRESSION_ORDER from .jp2box import Jp2kBox from .jp2box import JPEG2000SignatureBox from .jp2box import FileTypeBox @@ -286,7 +286,7 @@ class Jp2k(Jp2kBox): if prog is not None: prog = prog.upper() - cparams.prog_order = progression_order[prog] + cparams.prog_order = PROGRESSION_ORDER[prog] if psnr is not None: cparams.tcp_numlayers = len(psnr) @@ -475,9 +475,11 @@ class Jp2k(Jp2kBox): raise IOError(msg) # jp2c must be preceeded by jp2h - jp2h_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2h'] + jp2h_lst = [idx for (idx, box) in enumerate(boxes) + if box.box_id == 'jp2h'] jp2h_idx = jp2h_lst[0] - jp2c_lst = [idx for (idx, box) in enumerate(boxes) if box.box_id == 'jp2c'] + jp2c_lst = [idx for (idx, box) in enumerate(boxes) + if box.box_id == 'jp2c'] if len(jp2c_lst) == 0: msg = "A codestream box must be defined in the outermost " msg += "list of boxes." @@ -496,7 +498,8 @@ class Jp2k(Jp2kBox): raise IOError(msg) # colr must be present in jp2 header box. - colr_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'colr'] + colr_lst = [j for (j, box) in enumerate(jp2h.box) + if box.box_id == 'colr'] if len(colr_lst) == 0: msg = "The jp2 header box must contain a color definition box." raise IOError(msg) @@ -509,7 +512,8 @@ class Jp2k(Jp2kBox): msg += "following the image header." raise IOError(msg) - cdef_lst = [j for (j, box) in enumerate(jp2h.box) if box.box_id == 'cdef'] + cdef_lst = [j for (j, box) in enumerate(jp2h.box) + if box.box_id == 'cdef'] if len(cdef_lst) > 1: msg = "Only one channel definition box is allowed in the " msg += "JP2 header." @@ -717,7 +721,8 @@ class Jp2k(Jp2kBox): with warnings.catch_warnings(): warnings.simplefilter("ignore") nelts = nrows * ncols - band = np.ctypeslib.as_array((ctypes.c_int32 * nelts).from_address(addr)) + band = np.ctypeslib.as_array( + (ctypes.c_int32 * nelts).from_address(addr)) data[:, :, k] = np.reshape(band.astype(dtype), (nrows, ncols)) diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index f780725..763b6e9 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4035,7 +4035,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact ?? self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -4077,7 +4078,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact?? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -4123,7 +4125,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -4169,7 +4172,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.GREYSCALE) @@ -4211,7 +4215,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 2) # enumerated + self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 546) @@ -4219,7 +4223,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[2].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[2].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[2].precedence, 1) self.assertEqual(jp2.box[3].box[2].approximation, 1) # JPX exact self.assertIsNone(jp2.box[3].box[2].icc_profile) @@ -4257,7 +4262,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -4306,7 +4312,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 2) + self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 13332) @@ -4314,7 +4320,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[2].method, 1) # enumerated cspace + self.assertEqual(jp2.box[3].box[2].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[2].precedence, 1) self.assertEqual(jp2.box[3].box[2].approximation, 1) # JPX exact self.assertIsNone(jp2.box[3].box[2].icc_profile) @@ -4355,7 +4362,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # enumerated + self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[2].box[1].icc_profile['Size'], 414) @@ -4427,7 +4434,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[3].method, 1) + self.assertEqual(jp2.box[2].box[3].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[3].precedence, 0) self.assertEqual(jp2.box[2].box[3].approximation, 1) # JPX exact self.assertIsNone(jp2.box[2].box[3].icc_profile) @@ -5904,7 +5912,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # not allowed? self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6037,7 +6046,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6165,7 +6175,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -6305,7 +6316,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6416,7 +6428,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) @@ -6516,7 +6529,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # ICC + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6613,7 +6627,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.GREYSCALE) @@ -6732,7 +6747,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.CMYK) @@ -6846,7 +6862,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 1) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].colorspace, glymur.core.SRGB) @@ -6954,7 +6971,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 1) + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.ENUMERATED_COLORSPACE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.YCC) @@ -7061,7 +7079,7 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # res icc + self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # res icc self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -7160,7 +7178,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, 2) # restricted icc + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertIsNone(jp2.box[2].box[1].icc_profile) @@ -7262,7 +7281,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, 3) # any icc + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.ANY_ICC_PROFILE) self.assertEqual(jp2.box[3].box[1].precedence, 2) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 1328) From 73cdb5d58633bb2b5bfcfe312ac0fae0f965d23c Mon Sep 17 00:00:00 2001 From: John Evans Date: Tue, 9 Jul 2013 09:26:14 -0400 Subject: [PATCH 37/54] pylint work on openjp2 module, #71 --- glymur/lib/openjp2.py | 123 +++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index 48aa431..86b1b4a 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -121,19 +121,15 @@ import warnings import sys if sys.hexversion <= 0x03000000: from ConfigParser import SafeConfigParser as ConfigParser - from ConfigParser import NoOptionError else: from configparser import ConfigParser - from configparser import NoOptionError OPENJP2, OPENJPEG = config() if OPENJP2 is None and OPENJPEG is None: - msg = "Neither the glymur configuration file could not be located " - msg += "nor could openjpeg 1.5.1 be located. Glymur can only " - msg += "operate under extremely degraded conditions." - warnings.warn(msg, UserWarning) - -import numpy as np + wmsg = "Neither the glymur configuration file could not be located " + wmsg += "nor could openjpeg 1.5.1 be located. Glymur can only " + wmsg += "operate under extremely degraded conditions." + warnings.warn(wmsg, UserWarning) # Progression order LRCP = 0 @@ -668,50 +664,50 @@ if OPENJP2 is not None: OPENJP2.opj_create_decompress.argtypes = [codec_format_t] OPENJP2.opj_create_decompress.restype = codec_t_p - argtypes = [codec_t_p, stream_t_p, ctypes.POINTER(image_t)] - OPENJP2.opj_decode.argtypes = argtypes + ARGTYPES = [codec_t_p, stream_t_p, ctypes.POINTER(image_t)] + OPENJP2.opj_decode.argtypes = ARGTYPES - argtypes = [codec_t_p, ctypes.c_uint32, + ARGTYPES = [codec_t_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint32, stream_t_p] - OPENJP2.opj_decode_tile_data.argtypes = argtypes + OPENJP2.opj_decode_tile_data.argtypes = ARGTYPES - argtypes = [ctypes.POINTER(ctypes.POINTER(codestream_info_v2_t))] - OPENJP2.opj_destroy_cstr_info.argtypes = argtypes + ARGTYPES = [ctypes.POINTER(ctypes.POINTER(codestream_info_v2_t))] + OPENJP2.opj_destroy_cstr_info.argtypes = ARGTYPES OPENJP2.opj_destroy_cstr_info.restype = ctypes.c_void_p - argtypes = [codec_t_p, stream_t_p] - OPENJP2.opj_encode.argtypes = argtypes + ARGTYPES = [codec_t_p, stream_t_p] + OPENJP2.opj_encode.argtypes = ARGTYPES OPENJP2.opj_get_cstr_info.argtypes = [codec_t_p] OPENJP2.opj_get_cstr_info.restype = ctypes.POINTER(codestream_info_v2_t) - argtypes = [codec_t_p, + ARGTYPES = [codec_t_p, stream_t_p, ctypes.POINTER(image_t), ctypes.c_uint32] - OPENJP2.opj_get_decoded_tile.argtypes = argtypes + OPENJP2.opj_get_decoded_tile.argtypes = ARGTYPES - argtypes = [ctypes.c_uint32, + ARGTYPES = [ctypes.c_uint32, ctypes.POINTER(image_comptparm_t), color_space_t] - OPENJP2.opj_image_create.argtypes = argtypes + OPENJP2.opj_image_create.argtypes = ARGTYPES OPENJP2.opj_image_create.restype = ctypes.POINTER(image_t) - argtypes = [ctypes.c_uint32, + ARGTYPES = [ctypes.c_uint32, ctypes.POINTER(image_comptparm_t), color_space_t] - OPENJP2.opj_image_tile_create.argtypes = argtypes + OPENJP2.opj_image_tile_create.argtypes = ARGTYPES OPENJP2.opj_image_tile_create.restype = ctypes.POINTER(image_t) OPENJP2.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] - argtypes = [stream_t_p, codec_t_p, + ARGTYPES = [stream_t_p, codec_t_p, ctypes.POINTER(ctypes.POINTER(image_t))] - OPENJP2.opj_read_header.argtypes = argtypes + OPENJP2.opj_read_header.argtypes = ARGTYPES - argtypes = [codec_t_p, + ARGTYPES = [codec_t_p, stream_t_p, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), @@ -721,37 +717,37 @@ if OPENJP2 is not None: ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(bool_t)] - OPENJP2.opj_read_tile_header.argtypes = argtypes + OPENJP2.opj_read_tile_header.argtypes = ARGTYPES - argtypes = [codec_t_p, ctypes.POINTER(image_t), ctypes.c_int32, + ARGTYPES = [codec_t_p, ctypes.POINTER(image_t), ctypes.c_int32, ctypes.c_int32, ctypes.c_int32, ctypes.c_int32] - OPENJP2.opj_set_decode_area.argtypes = argtypes + OPENJP2.opj_set_decode_area.argtypes = ARGTYPES - argtypes = [ctypes.POINTER(cparameters_t)] - OPENJP2.opj_set_default_encoder_parameters.argtypes = argtypes + ARGTYPES = [ctypes.POINTER(cparameters_t)] + OPENJP2.opj_set_default_encoder_parameters.argtypes = ARGTYPES - argtypes = [ctypes.POINTER(dparameters_t)] - OPENJP2.opj_set_default_decoder_parameters.argtypes = argtypes + ARGTYPES = [ctypes.POINTER(dparameters_t)] + OPENJP2.opj_set_default_decoder_parameters.argtypes = ARGTYPES - argtypes = [codec_t_p, ctypes.c_void_p, ctypes.c_void_p] - OPENJP2.opj_set_error_handler.argtypes = argtypes - OPENJP2.opj_set_info_handler.argtypes = argtypes - OPENJP2.opj_set_warning_handler.argtypes = argtypes + ARGTYPES = [codec_t_p, ctypes.c_void_p, ctypes.c_void_p] + OPENJP2.opj_set_error_handler.argtypes = ARGTYPES + OPENJP2.opj_set_info_handler.argtypes = ARGTYPES + OPENJP2.opj_set_warning_handler.argtypes = ARGTYPES - argtypes = [codec_t_p, ctypes.POINTER(dparameters_t)] - OPENJP2.opj_setup_decoder.argtypes = argtypes + ARGTYPES = [codec_t_p, ctypes.POINTER(dparameters_t)] + OPENJP2.opj_setup_decoder.argtypes = ARGTYPES - argtypes = [codec_t_p, + ARGTYPES = [codec_t_p, ctypes.POINTER(cparameters_t), ctypes.POINTER(image_t)] - OPENJP2.opj_setup_encoder.argtypes = argtypes + OPENJP2.opj_setup_encoder.argtypes = ARGTYPES - argtypes = [ctypes.c_char_p, ctypes.c_int32] - OPENJP2.opj_stream_create_default_file_stream_v3.argtypes = argtypes + ARGTYPES = [ctypes.c_char_p, ctypes.c_int32] + OPENJP2.opj_stream_create_default_file_stream_v3.argtypes = ARGTYPES OPENJP2.opj_stream_create_default_file_stream_v3.restype = stream_t_p - argtypes = [codec_t_p, ctypes.POINTER(image_t), stream_t_p] - OPENJP2.opj_start_compress.argtypes = argtypes + ARGTYPES = [codec_t_p, ctypes.POINTER(image_t), stream_t_p] + OPENJP2.opj_start_compress.argtypes = ARGTYPES OPENJP2.opj_end_compress.argtypes = [codec_t_p, stream_t_p] OPENJP2.opj_end_decompress.argtypes = [codec_t_p, stream_t_p] @@ -759,12 +755,12 @@ if OPENJP2 is not None: OPENJP2.opj_stream_destroy_v3.argtypes = [stream_t_p] OPENJP2.opj_destroy_codec.argtypes = [codec_t_p] - argtypes = [codec_t_p, + ARGTYPES = [codec_t_p, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint32, stream_t_p] - OPENJP2.opj_write_tile.argtypes = argtypes + OPENJP2.opj_write_tile.argtypes = ARGTYPES def check_error(status): @@ -786,7 +782,7 @@ def check_error(status): # These library functions all return an error status. Circumvent that and # force # them to raise an exception. -fcns = ['opj_decode', 'opj_decode_tile_data', 'opj_end_compress', +FCNS = ['opj_decode', 'opj_decode_tile_data', 'opj_end_compress', 'opj_encode', 'opj_end_decompress', 'opj_get_decoded_tile', 'opj_read_header', 'opj_read_tile_header', 'opj_set_decode_area', 'opj_set_error_handler', 'opj_set_info_handler', @@ -794,7 +790,7 @@ fcns = ['opj_decode', 'opj_decode_tile_data', 'opj_end_compress', 'opj_setup_decoder', 'opj_setup_encoder', 'opj_start_compress', 'opj_write_tile'] if OPENJP2 is not None: - for fcn in fcns: + for fcn in FCNS: setattr(getattr(OPENJP2, fcn), 'restype', check_error) @@ -1137,29 +1133,29 @@ def read_tile_header(codec, stream): """ tile_index = ctypes.c_uint32() data_size = ctypes.c_uint32() - x0 = ctypes.c_int32() - y0 = ctypes.c_int32() - x1 = ctypes.c_int32() - y1 = ctypes.c_int32() + col0 = ctypes.c_int32() + row0 = ctypes.c_int32() + col1 = ctypes.c_int32() + row1 = ctypes.c_int32() ncomps = ctypes.c_uint32() go_on = bool_t() OPENJP2.opj_read_tile_header(codec, stream, ctypes.byref(tile_index), ctypes.byref(data_size), - ctypes.byref(x0), - ctypes.byref(y0), - ctypes.byref(x1), - ctypes.byref(y1), + ctypes.byref(col0), + ctypes.byref(row0), + ctypes.byref(col1), + ctypes.byref(row1), ctypes.byref(ncomps), ctypes.byref(go_on)) go_on = bool(go_on.value) return (tile_index.value, data_size.value, - x0.value, - y0.value, - x1.value, - y1.value, + col0.value, + row0.value, + col1.value, + row1.value, ncomps.value, go_on) @@ -1391,9 +1387,10 @@ def stream_create_default_file_stream_v3(fname, a_read_stream): stream : stream_t An OpenJPEG file stream. """ - tf = 1 if a_read_stream else 0 - fn = ctypes.c_char_p(fname.encode()) - stream = OPENJP2.opj_stream_create_default_file_stream_v3(fn, tf) + read_stream = 1 if a_read_stream else 0 + file_argument = ctypes.c_char_p(fname.encode()) + stream = OPENJP2.opj_stream_create_default_file_stream_v3(file_argument, + read_stream) return stream From a9ef89fbf0b0c4785c25b65454e95d2b7bd4d1e5 Mon Sep 17 00:00:00 2001 From: jevans Date: Tue, 9 Jul 2013 18:20:12 -0400 Subject: [PATCH 38/54] Abstracted out library configuration into separate config module. #71 --- glymur/lib/config.py | 124 ++++++++++++++++++++++++++++++++++++++++ glymur/lib/openjp2.py | 127 +---------------------------------------- glymur/lib/openjpeg.py | 12 +--- 3 files changed, 128 insertions(+), 135 deletions(-) create mode 100644 glymur/lib/config.py diff --git a/glymur/lib/config.py b/glymur/lib/config.py new file mode 100644 index 0000000..fa9f587 --- /dev/null +++ b/glymur/lib/config.py @@ -0,0 +1,124 @@ +""" +Configure glymur to use installed libraries if possible. +""" +import ctypes +from ctypes.util import find_library +import os +import platform + +import sys +if sys.hexversion <= 0x03000000: + from ConfigParser import SafeConfigParser as ConfigParser +else: + from configparser import ConfigParser + + +def glymurrc_fname(): + """Return the path to the configuration file. + + Search order: + 1) current working directory + 2) environ var XDG_CONFIG_HOME + 3) $HOME/.config/glymur/glymurrc + """ + + # Current directory. + fname = os.path.join(os.getcwd(), 'glymurrc') + if os.path.exists(fname): + return fname + + # Either GLYMURCONFIGDIR/glymurrc or $HOME/.glymur/glymurrc + confdir = get_configdir() + if confdir is not None: + fname = os.path.join(confdir, 'glymurrc') + if os.path.exists(fname): + return fname + + # didn't find a configuration file. + return None + + +def get_openjpeg_config(): + libopenjpeg_path = find_library('openjpeg') + + # If we could not find it, then look in some likely locations. + if libopenjpeg_path is None: + if platform.system() == 'Darwin': + path = '/opt/local/lib/libopenjpeg.dylib' + if os.path.exists(path): + libopenjpeg_path = path + elif os.name == 'nt': + path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', + 'bin', 'openjpeg.dll') + if os.path.exists(path): + libopenjpeg_path = path + + try: + if os.name == "nt": + openjpeg_lib = ctypes.windll.LoadLibrary(libopenjpeg_path) + else: + openjpeg_lib = ctypes.CDLL(libopenjpeg_path) + except OSError: + openjpeg_lib = None + + if openjpeg_lib is not None: + # Must be at least 1.5.0 + openjpeg_lib.opj_version.restype = ctypes.c_char_p + v = openjpeg_lib.opj_version() + v = v.decode('utf-8') + major, minor, patch = v.split('.') + if minor != '5': + openjpeg_lib = None + return openjpeg_lib + + +def get_openjp2_config(): + filename = glymurrc_fname() + if filename is not None: + # Read the configuration file for the library location. + parser = ConfigParser() + parser.read(filename) + libopenjp2_path = parser.get('library', 'openjp2') + else: + # No help from the config file, try to find it ourselves. + libopenjp2_path = find_library('openjp2') + + if libopenjp2_path is None: + return None + + try: + if os.name == "nt": + openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) + else: + openjp2_lib = ctypes.CDLL(libopenjp2_path) + except OSError: + msg = '"Library {0}" could not be loaded. Operating in degraded mode.' + msg = msg.format(libopenjp2_path) + warnings.warn(msg, UserWarning) + openjp2_lib = None + return openjp2_lib + + +def glymur_config(): + """Try to ascertain locations of openjp2, openjpeg libraries. + """ + openjp2_lib = get_openjp2_config() + openjpeg_lib = get_openjpeg_config() + return openjp2_lib, openjpeg_lib + +def get_configdir(): + """Return string representing the configuration directory. + + Default is $HOME/.config/glymur. You can override this with the + XDG_CONFIG_HOME environment variable. + """ + + if 'XDG_CONFIG_HOME' in os.environ: + return os.path.join(os.environ['XDG_CONFIG_HOME'], 'glymur') + + if 'HOME' in os.environ: + return os.path.join(os.environ['HOME'], '.config', 'glymur') + + if 'USERPROFILE' in os.environ: + # Windows? + return os.path.join(os.environ['USERPROFILE'], 'Application Data', 'glymur') diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index 86b1b4a..0769cbc 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -2,134 +2,11 @@ Wraps individual functions in openjp2 library. """ import ctypes -import platform from ctypes.util import find_library - - -def glymurrc_fname(): - """Return the path to the configuration file. - - Search order: - 1) current working directory - 2) environ var XDG_CONFIG_HOME - 3) $HOME/.config/glymur/glymurrc - """ - - # Current directory. - fname = os.path.join(os.getcwd(), 'glymurrc') - if os.path.exists(fname): - return fname - - # Either GLYMURCONFIGDIR/glymurrc or $HOME/.glymur/glymurrc - confdir = get_configdir() - if confdir is not None: - fname = os.path.join(confdir, 'glymurrc') - if os.path.exists(fname): - return fname - - # didn't find a configuration file. - return None - - -def get_openjpeg_config(): - libopenjpeg_path = find_library('openjpeg') - - # If we could not find it, then look in some likely locations. - if libopenjpeg_path is None: - if platform.system() == 'Darwin': - path = '/opt/local/lib/libopenjpeg.dylib' - if os.path.exists(path): - libopenjpeg_path = path - elif os.name == 'nt': - path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', - 'bin', 'openjpeg.dll') - if os.path.exists(path): - libopenjpeg_path = path - - try: - if os.name == "nt": - OPENJPEG = ctypes.windll.LoadLibrary(libopenjpeg_path) - else: - OPENJPEG = ctypes.CDLL(libopenjpeg_path) - except OSError: - OPENJPEG = None - - if OPENJPEG is not None: - # Must be at least 1.5.0 - OPENJPEG.opj_version.restype = ctypes.c_char_p - v = OPENJPEG.opj_version() - v = v.decode('utf-8') - major, minor, patch = v.split('.') - if minor != '5': - OPENJPEG = None - return OPENJPEG - - -def get_openjp2_config(): - filename = glymurrc_fname() - if filename is not None: - # Read the configuration file for the library location. - parser = ConfigParser() - parser.read(filename) - libopenjp2_path = parser.get('library', 'openjp2') - else: - # No help from the config file, try to find it ourselves. - libopenjp2_path = find_library('openjp2') - - if libopenjp2_path is None: - return None - - try: - if os.name == "nt": - OPENJP2 = ctypes.windll.LoadLibrary(libopenjp2_path) - else: - OPENJP2 = ctypes.CDLL(libopenjp2_path) - except OSError: - msg = '"Library {0}" could not be loaded. Operating in degraded mode.' - msg = msg.format(libopenjp2_path) - warnings.warn(msg, UserWarning) - OPENJP2 = None - return OPENJP2 - - -def config(): - """Read configuration file. - """ - OPENJP2 = get_openjp2_config() - OPENJPEG = get_openjpeg_config() - return OPENJP2, OPENJPEG - -def get_configdir(): - """Return string representing the configuration directory. - - Default is $HOME/.config/glymur. You can override this with the - XDG_CONFIG_HOME environment variable. - """ - - if 'XDG_CONFIG_HOME' in os.environ: - return os.path.join(os.environ['XDG_CONFIG_HOME'], 'glymur') - - if 'HOME' in os.environ: - return os.path.join(os.environ['HOME'], '.config', 'glymur') - - if 'USERPROFILE' in os.environ: - return os.path.join(os.environ['USERPROFILE'], 'Application Data', 'glymur') - -import os import warnings -import sys -if sys.hexversion <= 0x03000000: - from ConfigParser import SafeConfigParser as ConfigParser -else: - from configparser import ConfigParser - -OPENJP2, OPENJPEG = config() -if OPENJP2 is None and OPENJPEG is None: - wmsg = "Neither the glymur configuration file could not be located " - wmsg += "nor could openjpeg 1.5.1 be located. Glymur can only " - wmsg += "operate under extremely degraded conditions." - warnings.warn(wmsg, UserWarning) +from .config import glymur_config +OPENJP2, OPENJPEG = glymur_config() # Progression order LRCP = 0 diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index fc95861..9b93a54 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -6,19 +6,11 @@ from ctypes.util import find_library import platform import os -if os.name == "nt": - path = os.path.join('C:\\', 'Program files', 'OpenJPEG 1.5', - 'bin', 'openjpeg.dll') - OPENJPEG = ctypes.windll.LoadLibrary(path) -else: - if platform.system() == 'Darwin': - OPENJPEG = ctypes.CDLL('/opt/local/lib/libopenjpeg.dylib') - elif platform.system() == 'Linux': - OPENJPEG = ctypes.CDLL(find_library('openjpeg')) +from .config import glymur_config +_, OPENJPEG = glymur_config() PATH_LEN = 4096 # maximum allowed size for filenames - class event_mgr_t(ctypes.Structure): """Message handler object. """ From 4c1d02919884143c55ea6a0401664d8077d07f6c Mon Sep 17 00:00:00 2001 From: jevans Date: Tue, 9 Jul 2013 20:22:50 -0400 Subject: [PATCH 39/54] Closes #71 --- glymur/codestream.py | 12 +- glymur/core.py | 110 +-------- glymur/jp2box.py | 132 +++++++++-- glymur/jp2k.py | 22 +- glymur/lib/config.py | 23 +- glymur/lib/openjp2.py | 344 +++++++++++++++------------- glymur/lib/openjpeg.py | 100 +++++--- glymur/lib/test/test_openjp2.py | 6 +- glymur/lib/test/test_openjpeg.py | 2 +- glymur/test/test_opj_suite.py | 142 ++++++------ glymur/test/test_opj_suite_write.py | 24 +- 11 files changed, 488 insertions(+), 429 deletions(-) diff --git a/glymur/codestream.py b/glymur/codestream.py index efdf8c3..ce11e9d 100644 --- a/glymur/codestream.py +++ b/glymur/codestream.py @@ -13,9 +13,9 @@ import warnings import numpy as np from .core import LRCP, RLCP, RPCL, PCRL, CPRL -from .core import WAVELET_TRANSFORM_9x7_IRREVERSIBLE -from .core import WAVELET_TRANSFORM_5x3_REVERSIBLE -from .core import _capabilities_display +from .core import WAVELET_XFORM_9X7_IRREVERSIBLE +from .core import WAVELET_XFORM_5X3_REVERSIBLE +from .core import _CAPABILITIES_DISPLAY from .lib import openjp2 as opj2 _PROGRESSION_ORDER_DISPLAY = { @@ -26,8 +26,8 @@ _PROGRESSION_ORDER_DISPLAY = { CPRL: 'CPRL'} _WAVELET_TRANSFORM_DISPLAY = { - WAVELET_TRANSFORM_9x7_IRREVERSIBLE: '9-7 irreversible', - WAVELET_TRANSFORM_5x3_REVERSIBLE: '5-3 reversible'} + WAVELET_XFORM_9X7_IRREVERSIBLE: '9-7 irreversible', + WAVELET_XFORM_5X3_REVERSIBLE: '5-3 reversible'} # Need a catch-all list of valid markers. # See table A-1 in ISO/IEC FCD15444-1. @@ -1134,7 +1134,7 @@ class SIZsegment(Segment): 'Signed: {10}', 'Vertical, Horizontal Subsampling: {11}'] msg += '\n '.join(lines) - msg = msg.format(_capabilities_display[self.rsiz], + msg = msg.format(_CAPABILITIES_DISPLAY[self.rsiz], self.ysiz, self.xsiz, self.yosiz, self.xosiz, self.ytsiz, self.xtsiz, diff --git a/glymur/core.py b/glymur/core.py index 71c08cd..3959dd0 100644 --- a/glymur/core.py +++ b/glymur/core.py @@ -1,3 +1,5 @@ +"""Core definitions to be shared amongst the modules. +""" # Progression order LRCP = 0 RLCP = 1 @@ -12,8 +14,8 @@ PROGRESSION_ORDER = { 'PCRL': PCRL, 'CPRL': CPRL} -WAVELET_TRANSFORM_9x7_IRREVERSIBLE = 0 -WAVELET_TRANSFORM_5x3_REVERSIBLE = 1 +WAVELET_XFORM_9X7_IRREVERSIBLE = 0 +WAVELET_XFORM_5X3_REVERSIBLE = 1 ENUMERATED_COLORSPACE = 1 RESTRICTED_ICC_PROFILE = 2 @@ -32,7 +34,7 @@ YCC = 18 E_SRGB = 20 ROMM_RGB = 21 -_colorspace_map_display = { +_COLORSPACE_MAP_DISPLAY = { CMYK: 'CMYK', SRGB: 'sRGB', GREYSCALE: 'greyscale', @@ -45,7 +47,7 @@ _COLOR = 0 _OPACITY = 1 _PRE_MULTIPLIED_OPACITY = 2 _UNSPECIFIED = 65535 -_color_type_map_display = { +_COLOR_TYPE_MAP_DISPLAY = { _COLOR: 'color', _OPACITY: 'opacity', _PRE_MULTIPLIED_OPACITY: 'pre-multiplied opacity', @@ -58,103 +60,15 @@ BLUE = 3 GREY = 1 # enumerated color channel associations -_rgb_colorspace = {"R": 1, "G": 2, "B": 3} -_greyscale_colorspace = {"Y": 1} -_ycbcr_colorspace = {"Y": 1, "Cb": 2, "Cr": 3} -_colorspace = {SRGB: _rgb_colorspace, - GREYSCALE: _greyscale_colorspace, - YCC: _ycbcr_colorspace, - E_SRGB: _rgb_colorspace, - ROMM_RGB: _rgb_colorspace} +_COLORSPACE = {SRGB: {"R": 1, "G": 2, "B": 3}, + GREYSCALE: {"Y": 1}, + YCC: {"Y": 1, "Cb": 2, "Cr": 3}, + E_SRGB: {"R": 1, "G": 2, "B": 3}, + ROMM_RGB: {"R": 1, "G": 2, "B": 3}} # How to display the codestream profile. -_capabilities_display = { +_CAPABILITIES_DISPLAY = { 0: '2', 1: '0', 2: '1', 3: '3'} - -# Reader requirements -_reader_requirements_display = { - 0: 'File not completely understood', - 1: 'Deprecated', - 2: 'Contains multiple composition layers', - 3: 'Deprecated', - 4: 'JPEG 2000 Part 1 Profile 1 codestream', - 5: 'Unrestricted JPEG 2000 Part 1 codestream, ITU-T Rec. T.800 ' - + '| ISO/IEC 15444-1', - 6: 'Unrestricted JPEG 2000 Part 2 codestream', - 7: 'JPEG codestream as defined in ISO/IEC 10918-1', - 8: 'Deprecated', - 9: 'Non-premultiplied opacity channel', - 10: 'Premultiplied opacity channel', - 11: 'Chroma-key based opacity', - 12: 'Deprecated', - 13: 'Fragmented codestream where all fragments are in file and in order', - 14: 'Fragmented codestream where all fragments are in file ' - + 'but are out of order', - 15: 'Fragmented codestream where not all fragments are within the file ' - + 'but are all in locally accessible files', - 16: 'Fragmented codestream where some fragments may be accessible ' - + 'only through a URL specified network connection', - 17: 'Compositing required to produce rendered result from multiple ' - + 'compositing layers', - 18: 'Deprecated', - 19: 'Deprecated', - 20: 'Deprecated', - 21: 'At least one compositing layer consists of multiple codestreams', - 22: 'Deprecated', - 23: 'Colourspace transformations are required to combine compositing ' - + 'layers; not all compositing layers are in the same colourspace', - 24: 'Deprecated', - 25: 'Deprecated', - 26: 'First animation layer does not cover entire rendered result', - 27: 'Deprecated', - 28: 'Reuse of animation layers', - 29: 'Deprecated', - 30: 'Some animated frames are non-persistent', - 31: 'Deprecated', - 32: 'Rendered result involves scaling within a layer', - 33: 'Rendered result involves scaling between layers', - 34: 'ROI metadata', - 35: 'IPR metadata', - 36: 'Content metadata', - 37: 'History metadata', - 38: 'Creation metadata', - 39: 'JPX digital signatures', - 40: 'JPX checksums', - 41: 'Desires Graphics Arts Reproduction specified', - 42: 'Deprecated', - 43: '(Deprecated) compositing layer uses restricted ICC profile', - 44: 'Compositing layer uses Any ICC profile', - 45: 'Deprecated', - 46: 'Deprecated', - 47: 'BiLevel 1 enumerated colourspace', - 48: 'BiLevel 2 enumerated colourspace', - 49: 'YCbCr 1 enumerated colourspace', - 50: 'YCbCr 2 enumerated colourspace', - 51: 'YCbCr 3 enumerated colourspace', - 52: 'PhotoYCC enumerated colourspace', - 53: 'YCCK enumerated colourspace', - 54: 'CMY enumerated colourspace', - 55: 'CMYK enumerated colorspace', - 56: 'CIELab enumerated colourspace with default parameters', - 57: 'CIELab enumerated colourspace with non-default parameters', - 58: 'CIEJab enumerated colourspace with default parameters', - 59: 'CIEJab enumerated colourspace with non-default parameters', - 60: 'e-sRGB enumerated colorspace', - 61: 'ROMM_RGB enumerated colorspace', - 62: 'Non-square samples', - 63: 'Deprecated', - 64: 'Deprecated', - 65: 'Deprecated', - 66: 'Deprecated', - 67: 'GIS metadata XML box', - 68: 'JPSEC extensions in codestream as specified by ISO/IEC 15444-8', - 69: 'JP3D extensions in codestream as specified by ISO/IEC 15444-10', - 70: 'Deprecated', - 71: 'e-sYCC enumerated colourspace', - 72: 'JPEG 2000 Part 2 codestream as restricted by baseline conformance ' - + 'requirements in M.9.2.3', - 73: 'YPbPr(1125/60) enumerated colourspace', - 74: 'YPbPr(1250/50) enumerated colourspace'} diff --git a/glymur/jp2box.py b/glymur/jp2box.py index b12af8d..164da61 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -27,9 +27,8 @@ import xml.etree.cElementTree as ET import numpy as np from .codestream import Codestream -from .core import _colorspace_map_display -from .core import _color_type_map_display -from .core import _reader_requirements_display +from .core import _COLORSPACE_MAP_DISPLAY +from .core import _COLOR_TYPE_MAP_DISPLAY from .core import ENUMERATED_COLORSPACE, RESTRICTED_ICC_PROFILE from .core import ANY_ICC_PROFILE, VENDOR_COLOR_METHOD @@ -207,7 +206,7 @@ class ColourSpecificationBox(Jp2kBox): dispvalue = _approximation_display[self.approximation] msg += '\n Approximation: {0}'.format(dispvalue) if self.colorspace is not None: - dispvalue = _colorspace_map_display[self.colorspace] + dispvalue = _COLORSPACE_MAP_DISPLAY[self.colorspace] msg += '\n Colorspace: {0}'.format(dispvalue) else: # 2.7 has trouble pretty-printing ordered dicts so we just have @@ -234,10 +233,10 @@ class ColourSpecificationBox(Jp2kBox): fptr.write('colr'.encode()) read_buffer = struct.pack('>BBBI', - self.method, - self.precedence, - self.approximation, - self.colorspace) + self.method, + self.precedence, + self.approximation, + self.colorspace) fptr.write(read_buffer) @staticmethod @@ -259,7 +258,8 @@ class ColourSpecificationBox(Jp2kBox): """ # Read the brand, minor version. read_buffer = fptr.read(3) - (method, precedence, approximation) = struct.unpack('>BBB', read_buffer) + (method, precedence, approximation) = struct.unpack('>BBB', + read_buffer) if method == 1: # enumerated colour space @@ -445,7 +445,7 @@ class ChannelDefinitionBox(Jp2kBox): def __str__(self): msg = Jp2kBox.__str__(self) for j in range(len(self.association)): - color_type_string = _color_type_map_display[self.channel_type[j]] + color_type_string = _COLOR_TYPE_MAP_DISPLAY[self.channel_type[j]] if self.association[j] == 0: assn = 'whole image' else: @@ -463,9 +463,9 @@ class ChannelDefinitionBox(Jp2kBox): fptr.write(struct.pack('>H', num_components)) for j in range(num_components): fptr.write(struct.pack('>' + 'H' * 3, - self.index[j], - self.channel_type[j], - self.association[j])) + self.index[j], + self.channel_type[j], + self.association[j])) @staticmethod def _parse(fptr, offset, length): @@ -624,7 +624,8 @@ class ContiguousCodestreamBox(Jp2kBox): ContiguousCodestreamBox instance """ main_header = Codestream(fptr, header_only=True) - box = ContiguousCodestreamBox(main_header, length=length, offset=offset) + box = ContiguousCodestreamBox(main_header, length=length, + offset=offset) return box @@ -801,13 +802,13 @@ class ImageHeaderBox(Jp2kBox): bit_depth_signedness = 0x80 if self.signed else 0x00 bit_depth_signedness |= self.bits_per_component - 1 read_buffer = struct.pack('>IIHBBBB', - self.height, - self.width, - self.num_components, - bit_depth_signedness, - self.compression, - 1 if self.colorspace_unknown else 0, - 1 if self.ip_provided else 0) + self.height, + self.width, + self.num_components, + bit_depth_signedness, + self.compression, + 1 if self.colorspace_unknown else 0, + 1 if self.ip_provided else 0) fptr.write(read_buffer) @staticmethod @@ -1135,7 +1136,90 @@ class PaletteBox(Jp2kBox): offset=offset) return box - +# Map rreq codes to display text. +_READER_REQUIREMENTS_DISPLAY = { + 0: 'File not completely understood', + 1: 'Deprecated', + 2: 'Contains multiple composition layers', + 3: 'Deprecated', + 4: 'JPEG 2000 Part 1 Profile 1 codestream', + 5: 'Unrestricted JPEG 2000 Part 1 codestream, ITU-T Rec. T.800 ' + + '| ISO/IEC 15444-1', + 6: 'Unrestricted JPEG 2000 Part 2 codestream', + 7: 'JPEG codestream as defined in ISO/IEC 10918-1', + 8: 'Deprecated', + 9: 'Non-premultiplied opacity channel', + 10: 'Premultiplied opacity channel', + 11: 'Chroma-key based opacity', + 12: 'Deprecated', + 13: 'Fragmented codestream where all fragments are in file and in order', + 14: 'Fragmented codestream where all fragments are in file ' + + 'but are out of order', + 15: 'Fragmented codestream where not all fragments are within the file ' + + 'but are all in locally accessible files', + 16: 'Fragmented codestream where some fragments may be accessible ' + + 'only through a URL specified network connection', + 17: 'Compositing required to produce rendered result from multiple ' + + 'compositing layers', + 18: 'Deprecated', + 19: 'Deprecated', + 20: 'Deprecated', + 21: 'At least one compositing layer consists of multiple codestreams', + 22: 'Deprecated', + 23: 'Colourspace transformations are required to combine compositing ' + + 'layers; not all compositing layers are in the same colourspace', + 24: 'Deprecated', + 25: 'Deprecated', + 26: 'First animation layer does not cover entire rendered result', + 27: 'Deprecated', + 28: 'Reuse of animation layers', + 29: 'Deprecated', + 30: 'Some animated frames are non-persistent', + 31: 'Deprecated', + 32: 'Rendered result involves scaling within a layer', + 33: 'Rendered result involves scaling between layers', + 34: 'ROI metadata', + 35: 'IPR metadata', + 36: 'Content metadata', + 37: 'History metadata', + 38: 'Creation metadata', + 39: 'JPX digital signatures', + 40: 'JPX checksums', + 41: 'Desires Graphics Arts Reproduction specified', + 42: 'Deprecated', + 43: '(Deprecated) compositing layer uses restricted ICC profile', + 44: 'Compositing layer uses Any ICC profile', + 45: 'Deprecated', + 46: 'Deprecated', + 47: 'BiLevel 1 enumerated colourspace', + 48: 'BiLevel 2 enumerated colourspace', + 49: 'YCbCr 1 enumerated colourspace', + 50: 'YCbCr 2 enumerated colourspace', + 51: 'YCbCr 3 enumerated colourspace', + 52: 'PhotoYCC enumerated colourspace', + 53: 'YCCK enumerated colourspace', + 54: 'CMY enumerated colourspace', + 55: 'CMYK enumerated colorspace', + 56: 'CIELab enumerated colourspace with default parameters', + 57: 'CIELab enumerated colourspace with non-default parameters', + 58: 'CIEJab enumerated colourspace with default parameters', + 59: 'CIEJab enumerated colourspace with non-default parameters', + 60: 'e-sRGB enumerated colorspace', + 61: 'ROMM_RGB enumerated colorspace', + 62: 'Non-square samples', + 63: 'Deprecated', + 64: 'Deprecated', + 65: 'Deprecated', + 66: 'Deprecated', + 67: 'GIS metadata XML box', + 68: 'JPSEC extensions in codestream as specified by ISO/IEC 15444-8', + 69: 'JP3D extensions in codestream as specified by ISO/IEC 15444-10', + 70: 'Deprecated', + 71: 'e-sYCC enumerated colourspace', + 72: 'JPEG 2000 Part 2 codestream as restricted by baseline conformance ' + + 'requirements in M.9.2.3', + 73: 'YPbPr(1125/60) enumerated colourspace', + 74: 'YPbPr(1250/50) enumerated colourspace'} class ReaderRequirementsBox(Jp2kBox): """Container for reader requirements box information. @@ -1182,7 +1266,7 @@ class ReaderRequirementsBox(Jp2kBox): msg += '\n Standard Features:' for j in range(len(self.standard_flag)): sfl = self.standard_flag[j] - rrdisp = _reader_requirements_display[self.standard_flag[j]] + rrdisp = _READER_REQUIREMENTS_DISPLAY[self.standard_flag[j]] msg += '\n Feature {0:03d}: {1}'.format(sfl, rrdisp) msg += '\n Vendor Features:' @@ -1803,7 +1887,7 @@ class UUIDBox(Jp2kBox): ---------- the_uuid : uuid.UUID Identifies the type of UUID box. - raw_data : + raw_data : byte array This is the "payload" of data for the specified UUID. length : int length of the box in bytes. diff --git a/glymur/jp2k.py b/glymur/jp2k.py index abc54e2..e1d27cb 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -146,8 +146,8 @@ class Jp2k(Jp2kBox): box_length = values[0] box_id = values[1] signature = values[2:] - if ((box_length != 12) or (box_id != b'jP ') or - (signature != (13, 10, 135, 10))): + if (((box_length != 12) or (box_id != b'jP ') or + (signature != (13, 10, 135, 10)))): msg = '{0} is not a JPEG 2000 file.'.format(self.filename) raise IOError(msg) @@ -378,7 +378,7 @@ class Jp2k(Jp2kBox): else: raise RuntimeError("unhandled datatype") - comptparms = (_opj2.image_comptparm_t * num_comps)() + comptparms = (_opj2.ImageComptParmType * num_comps)() for j in range(num_comps): comptparms[j].dx = cparams.subsampling_dx comptparms[j].dy = cparams.subsampling_dy @@ -551,7 +551,8 @@ class Jp2k(Jp2kBox): else: # OK, I'm a jp2 file. Need to find out where the # raw codestream actually starts. - jp2c = [box for box in self.box if box.box_id == 'jp2c'] + jp2c = [box for box in self.box + if box.box_id == 'jp2c'] jp2c = jp2c[0] ofile.write(struct.pack('>I', jp2c.length + 8)) ofile.write('jp2c'.encode()) @@ -647,10 +648,9 @@ class Jp2k(Jp2kBox): msg += "using OPENJP2 instead." raise RuntimeError(msg) - with ExitStack() as stack: # Set decoding parameters. - dparameters = _opj.dparameters_t() + dparameters = _opj.DecompressionParametersType() _opj.set_default_decoder_parameters(ctypes.byref(dparameters)) dparameters.cp_reduce = rlevel dparameters.decod_format = self._codec_format @@ -662,13 +662,13 @@ class Jp2k(Jp2kBox): dinfo = _opj.create_decompress(dparameters.decod_format) - event_mgr = _opj.event_mgr_t() + event_mgr = _opj.EventMgrType() info_handler = ctypes.cast(_INFO_CALLBACK, ctypes.c_void_p) event_mgr.info_handler = info_handler if verbose else None event_mgr.warning_handler = ctypes.cast(_WARNING_CALLBACK, - ctypes.c_void_p) + ctypes.c_void_p) event_mgr.error_handler = ctypes.cast(_ERROR_CALLBACK, - ctypes.c_void_p) + ctypes.c_void_p) _opj.set_event_mgr(dinfo, ctypes.byref(event_mgr)) _opj.setup_decoder(dinfo, dparameters) @@ -722,7 +722,7 @@ class Jp2k(Jp2kBox): warnings.simplefilter("ignore") nelts = nrows * ncols band = np.ctypeslib.as_array( - (ctypes.c_int32 * nelts).from_address(addr)) + (ctypes.c_int32 * nelts).from_address(addr)) data[:, :, k] = np.reshape(band.astype(dtype), (nrows, ncols)) @@ -909,7 +909,7 @@ class Jp2k(Jp2kBox): with warnings.catch_warnings(): warnings.simplefilter("ignore") band = np.ctypeslib.as_array( - (ctypes.c_int32 * nrows * ncols).from_address(addr)) + (ctypes.c_int32 * nrows * ncols).from_address(addr)) if as_bands: data.append(np.reshape(band.astype(dtype), (nrows, ncols))) else: diff --git a/glymur/lib/config.py b/glymur/lib/config.py index fa9f587..da1c031 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -5,6 +5,7 @@ import ctypes from ctypes.util import find_library import os import platform +import warnings import sys if sys.hexversion <= 0x03000000: @@ -39,8 +40,10 @@ def glymurrc_fname(): def get_openjpeg_config(): + """ Try to find openjpeg library on the system path first. + """ libopenjpeg_path = find_library('openjpeg') - + # If we could not find it, then look in some likely locations. if libopenjpeg_path is None: if platform.system() == 'Darwin': @@ -56,23 +59,27 @@ def get_openjpeg_config(): try: if os.name == "nt": openjpeg_lib = ctypes.windll.LoadLibrary(libopenjpeg_path) - else: + else: openjpeg_lib = ctypes.CDLL(libopenjpeg_path) except OSError: openjpeg_lib = None - + if openjpeg_lib is not None: # Must be at least 1.5.0 openjpeg_lib.opj_version.restype = ctypes.c_char_p - v = openjpeg_lib.opj_version() - v = v.decode('utf-8') - major, minor, patch = v.split('.') + version = openjpeg_lib.opj_version().decode('utf-8') + _, minor, _ = version.split('.') if minor != '5': openjpeg_lib = None return openjpeg_lib def get_openjp2_config(): + """ + We expect to not find openjp2 on the system path since the only version + that we currently care about is still in the svn trunk at openjpeg.org. + We must use a configuration file that the user must write. + """ filename = glymurrc_fname() if filename is not None: # Read the configuration file for the library location. @@ -106,6 +113,7 @@ def glymur_config(): openjpeg_lib = get_openjpeg_config() return openjp2_lib, openjpeg_lib + def get_configdir(): """Return string representing the configuration directory. @@ -121,4 +129,5 @@ def get_configdir(): if 'USERPROFILE' in os.environ: # Windows? - return os.path.join(os.environ['USERPROFILE'], 'Application Data', 'glymur') + return os.path.join(os.environ['USERPROFILE'], 'Application Data', + 'glymur') diff --git a/glymur/lib/openjp2.py b/glymur/lib/openjp2.py index 0769cbc..be9981b 100644 --- a/glymur/lib/openjp2.py +++ b/glymur/lib/openjp2.py @@ -1,30 +1,23 @@ """ Wraps individual functions in openjp2 library. """ + +# pylint: disable=C0302,R0903 + import ctypes -from ctypes.util import find_library -import warnings from .config import glymur_config OPENJP2, OPENJPEG = glymur_config() -# Progression order -LRCP = 0 -RLCP = 1 -RPCL = 2 -PCRL = 3 -CPRL = 4 - - ERROR_MSG_LST = [] # Map certain atomic OpenJPEG datatypes to the ctypes equivalents. -bool_t = ctypes.c_int32 -codec_t_p = ctypes.c_void_p -prog_order_t_p = ctypes.c_int32 -cinema_mode_t = ctypes.c_int32 -rsiz_capabilities_t = ctypes.c_int32 -stream_t_p = ctypes.c_void_p +BOOL_TYPE = ctypes.c_int32 +CODEC_TYPE = ctypes.c_void_p +PROG_ORDER_TYPE = ctypes.c_int32 +CINEMA_MODE_TYPE = ctypes.c_int32 +RSIZ_CAPABILITIES_TYPE = ctypes.c_int32 +STREAM_TYPE_P = ctypes.c_void_p PATH_LEN = 4096 J2K_MAXRLVLS = 33 @@ -41,18 +34,21 @@ CLRSPC_UNSPECIFIED = 0 CLRSPC_SRGB = 1 CLRSPC_GRAY = 2 CLRSPC_YCC = 3 -color_space_t = ctypes.c_int +COLOR_SPACE_TYPE = ctypes.c_int # supported codec -codec_format_t = ctypes.c_int +CODEC_FORMAT_TYPE = ctypes.c_int CODEC_UNKNOWN = -1 CODEC_J2K = 0 CODEC_JPT = 1 CODEC_JP2 = 2 -class poc_t(ctypes.Structure): - """Progression order changes.""" +class PocType(ctypes.Structure): + """Progression order changes. + + Corresponds to poc_t type in openjp2 headers. + """ # Resolution num start, Component num start, given by POC _fields_ = [ ("resno0", ctypes.c_uint32), @@ -69,8 +65,8 @@ class poc_t(ctypes.Structure): ("precno1", ctypes.c_uint32), # Progression order enum - ("prg1", prog_order_t_p), - ("prg", prog_order_t_p), + ("prg1", PROG_ORDER_TYPE), + ("prg", PROG_ORDER_TYPE), # Progression order string ("progorder", ctypes.c_char * 5), @@ -114,8 +110,11 @@ class poc_t(ctypes.Structure): ("ty0_t", ctypes.c_uint32)] -class dparameters_t(ctypes.Structure): - """Decompression parameters""" +class DecompressionParametersType(ctypes.Structure): + """Decompression parameters. + + Corresponds to dparameters_t type in openjp2 headers. + """ _fields_ = [ # Set the number of highest resolutio levels to be discarded. The # image resolution is effectively divided by 2 to the power of @@ -153,7 +152,7 @@ class dparameters_t(ctypes.Structure): ("DA_y1", ctypes.c_uint32), # verbose mode - ("m_verbose", bool_t), + ("m_verbose", BOOL_TYPE), # tile number of the decoded tile ("tile_index", ctypes.c_uint32), @@ -162,7 +161,7 @@ class dparameters_t(ctypes.Structure): ("nb_tile_to_decode", ctypes.c_uint32), # activates the JPWL correction capabilities - ("jpwl_correct", bool_t), + ("jpwl_correct", BOOL_TYPE), # activates the JPWL correction capabilities ("jpwl_exp_comps", ctypes.c_int32), @@ -174,13 +173,16 @@ class dparameters_t(ctypes.Structure): ("flags", ctypes.c_uint32)] -class cparameters_t(ctypes.Structure): - """Compression parameters""" +class CompressionParametersType(ctypes.Structure): + """Compression parameters. + + Corresponds to cparameters_t type in openjp2 headers. + """ _fields_ = [ # size of tile: # tile_size_on = false (not in argument) or # = true (in argument) - ("tile_size_on", bool_t), + ("tile_size_on", BOOL_TYPE), # XTOsiz, YTOsiz ("cp_tx0", ctypes.c_int), @@ -212,7 +214,7 @@ class cparameters_t(ctypes.Structure): ("prog_order", ctypes.c_int), # progression order changes - ("poc", poc_t * 32), + ("poc", PocType * 32), # number of progression order changes (POC), default to 0 ("numpocs", ctypes.c_uint), @@ -286,7 +288,7 @@ class cparameters_t(ctypes.Structure): # JPWL encoding parameters # enables writing of EPC in MH, thus activating JPWL - ("jpwl_epc_on", bool_t), + ("jpwl_epc_on", BOOL_TYPE), # error protection method for MH (0,1,16,32,37-128) ("jpwl_hprot_mh", ctypes.c_int), @@ -325,14 +327,14 @@ class cparameters_t(ctypes.Structure): ("jpwl_sens_tph", ctypes.c_int * JPWL_MAX_NO_TILESPECS), # Digital Cinema compliance 0-not compliant, 1-compliant - ("cp_cinema", cinema_mode_t), + ("cp_cinema", CINEMA_MODE_TYPE), # Maximum rate for each component. # If == 0, component size limitation is not considered ("max_comp_size", ctypes.c_int), # Profile name - ("cp_rsiz", rsiz_capabilities_t), + ("cp_rsiz", RSIZ_CAPABILITIES_TYPE), # Tile part generation ("tp_on", ctypes.c_uint8), @@ -344,15 +346,18 @@ class cparameters_t(ctypes.Structure): ("tcp_mct", ctypes.c_uint8), # Enable JPIP indexing - ("jpip_on", bool_t), + ("jpip_on", BOOL_TYPE), # Naive implementation of MCT restricted to a single reversible array # based encoding without offset concerning all the components. ("mct_data", ctypes.c_void_p)] -class image_comp_t(ctypes.Structure): - """defines a single image component""" +class ImageCompType(ctypes.Structure): + """Defines a single image component. + + Corresponds to image_comp_t type in openjp2 headers. + """ _fields_ = [ # XRsiz, YRsiz: horizontal, vertical separation of ith component with # respect to the reference grid @@ -387,8 +392,11 @@ class image_comp_t(ctypes.Structure): ("data", ctypes.POINTER(ctypes.c_int32))] -class image_t(ctypes.Structure): - """defines image data and characteristics""" +class ImageType(ctypes.Structure): + """Defines image data and characteristics. + + Corresponds to image_t type in openjp2 headers. + """ _fields_ = [ # XOsiz, YOsiz: horizontal and vertical offset from the origin of the # reference grid to the left side of the image area @@ -403,10 +411,10 @@ class image_t(ctypes.Structure): ("numcomps", ctypes.c_uint32), # color space: should be sRGB, greyscale, or YUV - ("color_space", color_space_t), + ("color_space", COLOR_SPACE_TYPE), # image components - ("comps", ctypes.POINTER(image_comp_t)), + ("comps", ctypes.POINTER(ImageCompType)), # restricted ICC profile buffer ("icc_profile_buf", ctypes.POINTER(ctypes.c_uint8)), @@ -415,8 +423,11 @@ class image_t(ctypes.Structure): ("icc_profile_len", ctypes.c_uint32)] -class image_comptparm_t(ctypes.Structure): - """component parameters structure used by image_create function""" +class ImageComptParmType(ctypes.Structure): + """Component parameters structure used by image_create function. + + Corresponds to image_comptparm_t type in openjp2 headers. + """ _fields_ = [ # XRsiz, YRsiz: horizontal, vertical separation of a sample of ith # component with respect to the reference grid @@ -441,8 +452,11 @@ class image_comptparm_t(ctypes.Structure): ("sgnd", ctypes.c_uint32)] -class tccp_info_t(ctypes.Structure): - """tile-component coding parameters information""" +class TccpInfo(ctypes.Structure): + """Tile-component coding parameters information. + + Corresponds to tccp_info_t type in openjp2 header file. + """ _fields_ = [ # component index ("compno", ctypes.c_uint32), @@ -485,8 +499,11 @@ class tccp_info_t(ctypes.Structure): ("prch", ctypes.c_uint32 * J2K_MAXRLVLS)] -class tile_info_v2_t(ctypes.Structure): - """tile coding parameters information""" +class TileInfoV2(ctypes.Structure): + """Tile coding parameters information + + Corresponds to tile_info_v2_t type in openjp2 headers. + """ _fields_ = [ # number (index) of tile ("tileno", ctypes.c_int32), @@ -495,7 +512,7 @@ class tile_info_v2_t(ctypes.Structure): ("csty", ctypes.c_uint32), # progression order - ("prg", prog_order_t_p), + ("prg", PROG_ORDER_TYPE), # number of layers ("numlayers", ctypes.c_uint32), @@ -504,11 +521,14 @@ class tile_info_v2_t(ctypes.Structure): ("mct", ctypes.c_uint32), # information concerning tile component parameters - ("tccp_info", ctypes.POINTER(tccp_info_t))] + ("tccp_info", ctypes.POINTER(TccpInfo))] -class codestream_info_v2_t(ctypes.Structure): - """information about the codestream""" +class CodestreamInfoV2(ctypes.Structure): + """information about the codestream. + + Corresponds to codestream_info_v2_t type in openjp2 header files. + """ _fields_ = [ # tile info # tile origin in x, y (XTOsiz, YTOsiz) @@ -527,65 +547,65 @@ class codestream_info_v2_t(ctypes.Structure): ("nbcomps", ctypes.c_uint32), # default information regarding tiles inside of image - ("m_default_tile_info", tile_info_v2_t), + ("m_default_tile_info", TileInfoV2), # information regarding tiles inside of image - ("tile_info", ctypes.POINTER(tile_info_v2_t))] + ("tile_info", ctypes.POINTER(TileInfoV2))] # Restrict the input and output argument types for each function used in the # API. if OPENJP2 is not None: - OPENJP2.opj_create_compress.restype = codec_t_p - OPENJP2.opj_create_compress.argtypes = [codec_format_t] + OPENJP2.opj_create_compress.restype = CODEC_TYPE + OPENJP2.opj_create_compress.argtypes = [CODEC_FORMAT_TYPE] - OPENJP2.opj_create_decompress.argtypes = [codec_format_t] - OPENJP2.opj_create_decompress.restype = codec_t_p + OPENJP2.opj_create_decompress.argtypes = [CODEC_FORMAT_TYPE] + OPENJP2.opj_create_decompress.restype = CODEC_TYPE - ARGTYPES = [codec_t_p, stream_t_p, ctypes.POINTER(image_t)] + ARGTYPES = [CODEC_TYPE, STREAM_TYPE_P, ctypes.POINTER(ImageType)] OPENJP2.opj_decode.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, ctypes.c_uint32, + ARGTYPES = [CODEC_TYPE, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint32, - stream_t_p] + STREAM_TYPE_P] OPENJP2.opj_decode_tile_data.argtypes = ARGTYPES - ARGTYPES = [ctypes.POINTER(ctypes.POINTER(codestream_info_v2_t))] + ARGTYPES = [ctypes.POINTER(ctypes.POINTER(CodestreamInfoV2))] OPENJP2.opj_destroy_cstr_info.argtypes = ARGTYPES OPENJP2.opj_destroy_cstr_info.restype = ctypes.c_void_p - ARGTYPES = [codec_t_p, stream_t_p] + ARGTYPES = [CODEC_TYPE, STREAM_TYPE_P] OPENJP2.opj_encode.argtypes = ARGTYPES - OPENJP2.opj_get_cstr_info.argtypes = [codec_t_p] - OPENJP2.opj_get_cstr_info.restype = ctypes.POINTER(codestream_info_v2_t) + OPENJP2.opj_get_cstr_info.argtypes = [CODEC_TYPE] + OPENJP2.opj_get_cstr_info.restype = ctypes.POINTER(CodestreamInfoV2) - ARGTYPES = [codec_t_p, - stream_t_p, - ctypes.POINTER(image_t), + ARGTYPES = [CODEC_TYPE, + STREAM_TYPE_P, + ctypes.POINTER(ImageType), ctypes.c_uint32] OPENJP2.opj_get_decoded_tile.argtypes = ARGTYPES ARGTYPES = [ctypes.c_uint32, - ctypes.POINTER(image_comptparm_t), - color_space_t] + ctypes.POINTER(ImageComptParmType), + COLOR_SPACE_TYPE] OPENJP2.opj_image_create.argtypes = ARGTYPES - OPENJP2.opj_image_create.restype = ctypes.POINTER(image_t) + OPENJP2.opj_image_create.restype = ctypes.POINTER(ImageType) ARGTYPES = [ctypes.c_uint32, - ctypes.POINTER(image_comptparm_t), - color_space_t] + ctypes.POINTER(ImageComptParmType), + COLOR_SPACE_TYPE] OPENJP2.opj_image_tile_create.argtypes = ARGTYPES - OPENJP2.opj_image_tile_create.restype = ctypes.POINTER(image_t) + OPENJP2.opj_image_tile_create.restype = ctypes.POINTER(ImageType) - OPENJP2.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] + OPENJP2.opj_image_destroy.argtypes = [ctypes.POINTER(ImageType)] - ARGTYPES = [stream_t_p, codec_t_p, - ctypes.POINTER(ctypes.POINTER(image_t))] + ARGTYPES = [STREAM_TYPE_P, CODEC_TYPE, + ctypes.POINTER(ctypes.POINTER(ImageType))] OPENJP2.opj_read_header.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, - stream_t_p, + ARGTYPES = [CODEC_TYPE, + STREAM_TYPE_P, ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_uint32), ctypes.POINTER(ctypes.c_int32), @@ -593,56 +613,56 @@ if OPENJP2 is not None: ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.c_uint32), - ctypes.POINTER(bool_t)] + ctypes.POINTER(BOOL_TYPE)] OPENJP2.opj_read_tile_header.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, ctypes.POINTER(image_t), ctypes.c_int32, + ARGTYPES = [CODEC_TYPE, ctypes.POINTER(ImageType), ctypes.c_int32, ctypes.c_int32, ctypes.c_int32, ctypes.c_int32] OPENJP2.opj_set_decode_area.argtypes = ARGTYPES - ARGTYPES = [ctypes.POINTER(cparameters_t)] + ARGTYPES = [ctypes.POINTER(CompressionParametersType)] OPENJP2.opj_set_default_encoder_parameters.argtypes = ARGTYPES - ARGTYPES = [ctypes.POINTER(dparameters_t)] + ARGTYPES = [ctypes.POINTER(DecompressionParametersType)] OPENJP2.opj_set_default_decoder_parameters.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, ctypes.c_void_p, ctypes.c_void_p] + ARGTYPES = [CODEC_TYPE, ctypes.c_void_p, ctypes.c_void_p] OPENJP2.opj_set_error_handler.argtypes = ARGTYPES OPENJP2.opj_set_info_handler.argtypes = ARGTYPES OPENJP2.opj_set_warning_handler.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, ctypes.POINTER(dparameters_t)] + ARGTYPES = [CODEC_TYPE, ctypes.POINTER(DecompressionParametersType)] OPENJP2.opj_setup_decoder.argtypes = ARGTYPES - ARGTYPES = [codec_t_p, - ctypes.POINTER(cparameters_t), - ctypes.POINTER(image_t)] + ARGTYPES = [CODEC_TYPE, + ctypes.POINTER(CompressionParametersType), + ctypes.POINTER(ImageType)] OPENJP2.opj_setup_encoder.argtypes = ARGTYPES ARGTYPES = [ctypes.c_char_p, ctypes.c_int32] OPENJP2.opj_stream_create_default_file_stream_v3.argtypes = ARGTYPES - OPENJP2.opj_stream_create_default_file_stream_v3.restype = stream_t_p + OPENJP2.opj_stream_create_default_file_stream_v3.restype = STREAM_TYPE_P - ARGTYPES = [codec_t_p, ctypes.POINTER(image_t), stream_t_p] + ARGTYPES = [CODEC_TYPE, ctypes.POINTER(ImageType), STREAM_TYPE_P] OPENJP2.opj_start_compress.argtypes = ARGTYPES - OPENJP2.opj_end_compress.argtypes = [codec_t_p, stream_t_p] - OPENJP2.opj_end_decompress.argtypes = [codec_t_p, stream_t_p] + OPENJP2.opj_end_compress.argtypes = [CODEC_TYPE, STREAM_TYPE_P] + OPENJP2.opj_end_decompress.argtypes = [CODEC_TYPE, STREAM_TYPE_P] - OPENJP2.opj_stream_destroy_v3.argtypes = [stream_t_p] - OPENJP2.opj_destroy_codec.argtypes = [codec_t_p] + OPENJP2.opj_stream_destroy_v3.argtypes = [STREAM_TYPE_P] + OPENJP2.opj_destroy_codec.argtypes = [CODEC_TYPE] - ARGTYPES = [codec_t_p, + ARGTYPES = [CODEC_TYPE, ctypes.c_uint32, ctypes.POINTER(ctypes.c_uint8), ctypes.c_uint32, - stream_t_p] + STREAM_TYPE_P] OPENJP2.opj_write_tile.argtypes = ARGTYPES def check_error(status): """Set a generic function as the restype attribute of all OpenJPEG - functions that return a bool_t value. This way we do not have to check + functions that return a BOOL_TYPE value. This way we do not have to check for error status in each wrapping function and an exception will always be appropriately raised. """ @@ -683,7 +703,7 @@ def create_compress(codec_format): Returns ------- - codec : Reference to codec_t_p instance. + codec : Reference to CODEC_TYPE instance. """ codec = OPENJP2.opj_create_compress(codec_format) return codec @@ -696,11 +716,11 @@ def decode(codec, stream, image): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The JPEG2000 codec - stream : stream_t_p + stream : STREAM_TYPE_P The stream to decode. - image : image_t + image : ImageType Output image structure. Raises @@ -718,7 +738,7 @@ def decode_tile_data(codec, tidx, data, data_size, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The JPEG2000 codec tile_index : int The index of the tile being decoded @@ -726,7 +746,7 @@ def decode_tile_data(codec, tidx, data, data_size, stream): Holds a memory block into which data will be decoded. data_size : int The size of data in bytes - stream : stream_t_p + stream : STREAM_TYPE_P The stream to decode. Raises @@ -755,7 +775,7 @@ def create_decompress(codec_format): Returns ------- - codec : Reference to codec_t_p instance. + codec : Reference to CODEC_TYPE instance. """ codec = OPENJP2.opj_create_decompress(codec_format) return codec @@ -768,7 +788,7 @@ def destroy_codec(codec): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Decompressor handle to destroy. """ OPENJP2.opj_destroy_codec(codec) @@ -781,9 +801,9 @@ def encode(codec, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The jpeg2000 codec. - stream : stream_t_p + stream : STREAM_TYPE_P The stream to which data is written. Raises @@ -801,12 +821,12 @@ def get_cstr_info(codec): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The jpeg2000 codec. Returns ------- - cstr_info_p : codestream_info_v2_t + cstr_info_p : CodestreamInfoV2 Reference to codestream information. """ cstr_info_p = OPENJP2.opj_get_cstr_info(codec) @@ -820,11 +840,11 @@ def get_decoded_tile(codec, stream, imagep, tile_index): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The jpeg2000 codec. - stream : stream_t_p + stream : STREAM_TYPE_P The input stream. - image : image_t + image : ImageType Output image structure. tiler_index : int Index of the tile which will be decoded. @@ -844,7 +864,7 @@ def destroy_cstr_info(cstr_info_p): Parameters ---------- - cstr_info_p : codestream_info_v2_t pointer + cstr_info_p : CodestreamInfoV2 pointer Pointer to codestream info structure. """ OPENJP2.opj_destroy_cstr_info(ctypes.byref(cstr_info_p)) @@ -857,9 +877,9 @@ def end_compress(codec, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Compressor handle. - stream : stream_t_p + stream : STREAM_TYPE_P Output stream buffer. Raises @@ -877,9 +897,9 @@ def end_decompress(codec, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Compressor handle. - stream : stream_t_p + stream : STREAM_TYPE_P Output stream buffer. Raises @@ -897,7 +917,7 @@ def image_destroy(image): Parameters ---------- - image : image_t pointer + image : ImageType pointer Image resource to be disposed. """ OPENJP2.opj_image_destroy(image) @@ -917,12 +937,12 @@ def image_create(comptparms, clrspc): Returns ------- - image : image_t - Reference to image_t instance. + image : ImageType + Reference to ImageType instance. """ image = OPENJP2.opj_image_create(len(comptparms), - comptparms, - clrspc) + comptparms, + clrspc) return image @@ -940,12 +960,12 @@ def image_tile_create(comptparms, clrspc): Returns ------- - image : image_t - Reference to image_t instance. + image : ImageType + Reference to ImageType instance. """ image = OPENJP2.opj_image_tile_create(len(comptparms), - comptparms, - clrspc) + comptparms, + clrspc) return image @@ -956,14 +976,14 @@ def read_header(stream, codec): Parameters ---------- - stream: stream_t_p + stream: STREAM_TYPE_P The JPEG2000 stream. codec: codec_t The JPEG2000 codec to read. Returns ------- - imagep : reference to image_t instance + imagep : reference to ImageType instance The image structure initialized with image characteristics. Raises @@ -971,7 +991,7 @@ def read_header(stream, codec): RuntimeError If the OpenJPEG library routine opj_read_header fails. """ - imagep = ctypes.POINTER(image_t)() + imagep = ctypes.POINTER(ImageType)() OPENJP2.opj_read_header(stream, codec, ctypes.byref(imagep)) return imagep @@ -985,7 +1005,7 @@ def read_tile_header(codec, stream): ---------- codec : codec_t The JPEG2000 codec to read. - stream : stream_t_p + stream : STREAM_TYPE_P The JPEG2000 stream. Returns @@ -1015,17 +1035,17 @@ def read_tile_header(codec, stream): col1 = ctypes.c_int32() row1 = ctypes.c_int32() ncomps = ctypes.c_uint32() - go_on = bool_t() + go_on = BOOL_TYPE() OPENJP2.opj_read_tile_header(codec, - stream, - ctypes.byref(tile_index), - ctypes.byref(data_size), - ctypes.byref(col0), - ctypes.byref(row0), - ctypes.byref(col1), - ctypes.byref(row1), - ctypes.byref(ncomps), - ctypes.byref(go_on)) + stream, + ctypes.byref(tile_index), + ctypes.byref(data_size), + ctypes.byref(col0), + ctypes.byref(row0), + ctypes.byref(col1), + ctypes.byref(row1), + ctypes.byref(ncomps), + ctypes.byref(go_on)) go_on = bool(go_on.value) return (tile_index.value, data_size.value, @@ -1045,9 +1065,9 @@ def set_decode_area(codec, image, start_x=0, start_y=0, end_x=0, end_y=0): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Codec initialized by create_decompress function. - image : image_t pointer + image : ImageType pointer The decoded image previously set by read_header. start_x, start_y : optional, int The left and upper position of the rectangle to decode. @@ -1073,10 +1093,10 @@ def set_default_decoder_parameters(): Returns ------- - dparam : dparameters_t + dparam : DecompressionParametersType Decompression parameters. """ - dparams = dparameters_t() + dparams = DecompressionParametersType() OPENJP2.opj_set_default_decoder_parameters(ctypes.byref(dparams)) return dparams @@ -1108,10 +1128,10 @@ def set_default_encoder_parameters(): Returns ------- - cparameters : cparameters_t + cparameters : CompressionParametersType Compression parameters. """ - cparams = cparameters_t() + cparams = CompressionParametersType() OPENJP2.opj_set_default_encoder_parameters(ctypes.byref(cparams)) return cparams @@ -1123,7 +1143,7 @@ def set_error_handler(codec, handler, data=None): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1145,7 +1165,7 @@ def set_info_handler(codec, handler, data=None): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1167,7 +1187,7 @@ def set_warning_handler(codec, handler, data=None): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Codec initialized by create_compress function. handler : python function The callback function to be used. @@ -1189,9 +1209,9 @@ def setup_decoder(codec, dparams): Parameters ---------- - codec: codec_t_p + codec: CODEC_TYPE Codec initialized by create_compress function. - dparams: dparameters_t + dparams: DecompressionParametersType Decompression parameters. Raises @@ -1210,11 +1230,11 @@ def setup_encoder(codec, cparams, image): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE codec initialized by create_compress function - cparams : cparameters_t + cparams : CompressionParametersType compression parameters - image : image_t + image : ImageType input-filled image Raises @@ -1232,11 +1252,11 @@ def start_compress(codec, image, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE Compressor handle. - image : pointer to image_t + image : pointer to ImageType Input filled image. - stream : stream_t_p + stream : STREAM_TYPE_P Input stream. Raises @@ -1278,7 +1298,7 @@ def stream_destroy_v3(stream): Parameters ---------- - stream : stream_t_p + stream : STREAM_TYPE_P The file stream. """ OPENJP2.opj_stream_destroy_v3(stream) @@ -1291,7 +1311,7 @@ def write_tile(codec, tile_index, data, data_size, stream): Parameters ---------- - codec : codec_t_p + codec : CODEC_TYPE The jpeg2000 codec tile_index : int The index of the tile to write, zero-indexing assumed @@ -1299,7 +1319,7 @@ def write_tile(codec, tile_index, data, data_size, stream): Image data arranged in usual C-order data_size : int Size of a tile in bytes - stream : stream_t_p + stream : STREAM_TYPE_P The stream to write data to Raises @@ -1309,10 +1329,10 @@ def write_tile(codec, tile_index, data, data_size, stream): """ datap = data.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)) OPENJP2.opj_write_tile(codec, - ctypes.c_uint32(int(tile_index)), - datap, - ctypes.c_uint32(int(data_size)), - stream) + ctypes.c_uint32(int(tile_index)), + datap, + ctypes.c_uint32(int(data_size)), + stream) def set_error_message(msg): diff --git a/glymur/lib/openjpeg.py b/glymur/lib/openjpeg.py index 9b93a54..ef16c0a 100644 --- a/glymur/lib/openjpeg.py +++ b/glymur/lib/openjpeg.py @@ -1,27 +1,30 @@ """Wraps library calls to openjpeg. """ +# pylint: disable=R0903 + import ctypes -from ctypes.util import find_library -import platform -import os from .config import glymur_config _, OPENJPEG = glymur_config() PATH_LEN = 4096 # maximum allowed size for filenames -class event_mgr_t(ctypes.Structure): + +class EventMgrType(ctypes.Structure): """Message handler object. + + Corresponds to event_mgr_t type in openjpeg headers. """ _fields_ = [("error_handler", ctypes.c_void_p), ("warning_handler", ctypes.c_void_p), ("info_handler", ctypes.c_void_p)] -class common_struct_t(ctypes.Structure): + +class CommonStructType(ctypes.Structure): """Common fields between JPEG 2000 compression and decompression contextx. """ - _fields_ = [("event_mgr", ctypes.POINTER(event_mgr_t)), + _fields_ = [("event_mgr", ctypes.POINTER(EventMgrType)), ("client_data", ctypes.c_void_p), ("is_decompressor", ctypes.c_bool), ("codec_format", ctypes.c_int), @@ -30,16 +33,20 @@ class common_struct_t(ctypes.Structure): ("mj2_handle", ctypes.c_void_p)] -class dinfo_t(ctypes.Structure): - """Common fields between JPEG 2000 compression and decompression contextx. - This is for decompression contexts. +class DecompressionInfoType(ctypes.Structure): + """This is for decompression contexts. + + Corresponds to dinfo_t type in openjpeg headers. """ pass -class cio_t(ctypes.Structure): - _fields_ = [# codec context - ("cinfo", ctypes.POINTER(common_struct_t)), +class CioType(ctypes.Structure): + """Byte input-output stream (CIO) + + Corresponds to cio_t in openjpeg headers. + """ + _fields_ = [("cinfo", ctypes.POINTER(CommonStructType)), # codec context # STREAM_READ or STREAM_WRITE ("openmode", ctypes.c_int), # pointer to start of buffer @@ -54,7 +61,11 @@ class cio_t(ctypes.Structure): ("bp", ctypes.c_char_p)] -class dparameters_t(ctypes.Structure): +class DecompressionParametersType(ctypes.Structure): + """Decompression parameters. + + Corresponds to dparameters_t type in openjpeg headers. + """ # cp_reduce: the number of highest resolution levels to be discarded _fields_ = [("cp_reduce", ctypes.c_int), # cp_layer: the maximum number of quality layers to decode @@ -79,8 +90,11 @@ class dparameters_t(ctypes.Structure): ("flags", ctypes.c_uint)] -class image_comp_t(ctypes.Structure): - """Defines a single image component. """ +class ImageCompType(ctypes.Structure): + """Defines a single image component. + + Corresponds to image_comp_t type in openjpeg. + """ _fields_ = [("dx", ctypes.c_int), ("dy", ctypes.c_int), ("w", ctypes.c_int), @@ -95,65 +109,79 @@ class image_comp_t(ctypes.Structure): ("data", ctypes.POINTER(ctypes.c_int))] -class image_t(ctypes.Structure): - """Defines image data and characteristics.""" +class ImageType(ctypes.Structure): + """Defines image data and characteristics. + + Corresponds to image_t type in openjpeg headers. + """ _fields_ = [("x0", ctypes.c_int), ("y0", ctypes.c_int), ("x1", ctypes.c_int), ("y1", ctypes.c_int), ("numcomps", ctypes.c_int), ("color_space", ctypes.c_int), - ("comps", ctypes.POINTER(image_comp_t)), + ("comps", ctypes.POINTER(ImageCompType)), ("icc_profile_buf", ctypes.c_char_p), ("icc_profile_len", ctypes.c_int)] + def cio_open(cinfo, src): """Wrapper for openjpeg library function opj_cio_open.""" - argtypes = [ctypes.POINTER(common_struct_t), ctypes.c_char_p, ctypes.c_int] + argtypes = [ctypes.POINTER(CommonStructType), ctypes.c_char_p, + ctypes.c_int] OPENJPEG.opj_cio_open.argtypes = argtypes - OPENJPEG.opj_cio_open.restype = ctypes.POINTER(cio_t) + OPENJPEG.opj_cio_open.restype = ctypes.POINTER(CioType) - cio = OPENJPEG.opj_cio_open(ctypes.cast(cinfo, ctypes.POINTER(common_struct_t)), + cio = OPENJPEG.opj_cio_open(ctypes.cast(cinfo, + ctypes.POINTER(CommonStructType)), src, len(src)) return cio + def cio_close(cio): """Wraps openjpeg library function cio_close. """ - OPENJPEG.opj_cio_close.argtypes = [ctypes.POINTER(cio_t)] + OPENJPEG.opj_cio_close.argtypes = [ctypes.POINTER(CioType)] OPENJPEG.opj_cio_close(cio) + def create_decompress(fmt): """Wraps openjpeg library function opj_create_decompress. """ OPENJPEG.opj_create_decompress.argtypes = [ctypes.c_int] - OPENJPEG.opj_create_decompress.restype = ctypes.POINTER(dinfo_t) + restype = ctypes.POINTER(DecompressionInfoType) + OPENJPEG.opj_create_decompress.restype = restype dinfo = OPENJPEG.opj_create_decompress(fmt) return dinfo + def decode(dinfo, cio): """Wrapper for opj_decode. """ - argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(cio_t)] + argtypes = [ctypes.POINTER(DecompressionInfoType), ctypes.POINTER(CioType)] OPENJPEG.opj_decode.argtypes = argtypes - OPENJPEG.opj_decode.restype = ctypes.POINTER(image_t) + OPENJPEG.opj_decode.restype = ctypes.POINTER(ImageType) image = OPENJPEG.opj_decode(dinfo, cio) return image + def destroy_decompress(dinfo): """Wraps openjpeg library function opj_destroy_decompress.""" - OPENJPEG.opj_destroy_decompress.argtypes = [ctypes.POINTER(dinfo_t)] + argtypes = [ctypes.POINTER(DecompressionInfoType)] + OPENJPEG.opj_destroy_decompress.argtypes = argtypes OPENJPEG.opj_destroy_decompress(dinfo) + def image_destroy(image): """Wraps openjpeg library function opj_image_destroy.""" - OPENJPEG.opj_image_destroy.argtypes = [ctypes.POINTER(image_t)] + OPENJPEG.opj_image_destroy.argtypes = [ctypes.POINTER(ImageType)] OPENJPEG.opj_image_destroy(image) + def set_default_decoder_parameters(dparams_p): """Wrapper for opj_set_default_decoder_parameters. """ - argtypes = [ctypes.POINTER(dparameters_t)] + argtypes = [ctypes.POINTER(DecompressionParametersType)] OPENJPEG.opj_set_default_decoder_parameters.argtypes = argtypes OPENJPEG.opj_set_default_decoder_parameters(dparams_p) @@ -161,21 +189,25 @@ def set_default_decoder_parameters(dparams_p): def set_event_mgr(dinfo, event_mgr, context=None): """Wrapper for openjpeg library function opj_set_event_mgr. """ - argtypes = [ctypes.POINTER(common_struct_t), - ctypes.POINTER(event_mgr_t), + argtypes = [ctypes.POINTER(CommonStructType), + ctypes.POINTER(EventMgrType), ctypes.c_void_p] + OPENJPEG.opj_set_event_mgr.argtypes = argtypes OPENJPEG.opj_set_event_mgr(ctypes.cast(dinfo, - ctypes.POINTER(common_struct_t)), + ctypes.POINTER(CommonStructType)), event_mgr, context) + def setup_decoder(dinfo, dparams): """Wrapper for openjpeg library function opj_setup_decoder.""" - argtypes = [ctypes.POINTER(dinfo_t), ctypes.POINTER(dparameters_t)] + argtypes = [ctypes.POINTER(DecompressionInfoType), + ctypes.POINTER(DecompressionParametersType)] OPENJPEG.opj_setup_decoder.argtypes = argtypes OPENJPEG.opj_setup_decoder(dinfo, dparams) + def version(): """Wrapper for opj_version library routine.""" OPENJPEG.opj_version.restype = ctypes.c_char_p - v = OPENJPEG.opj_version() - return v.decode('utf-8') + library_version = OPENJPEG.opj_version() + return library_version.decode('utf-8') diff --git a/glymur/lib/test/test_openjp2.py b/glymur/lib/test/test_openjp2.py index 6c4c2cd..61212ab 100644 --- a/glymur/lib/test/test_openjp2.py +++ b/glymur/lib/test/test_openjp2.py @@ -32,7 +32,7 @@ class TestOpenJP2(unittest.TestCase): self.assertEqual(cparams.subsampling_dx, 1) self.assertEqual(cparams.subsampling_dy, 1) self.assertEqual(cparams.mode, 0) - self.assertEqual(cparams.prog_order, glymur.lib._openjp2.LRCP) + self.assertEqual(cparams.prog_order, glymur.core.LRCP) self.assertEqual(cparams.roi_shift, 0) self.assertEqual(cparams.cp_tx0, 0) self.assertEqual(cparams.cp_ty0, 0) @@ -164,9 +164,9 @@ class TestOpenJP2(unittest.TestCase): l_param.numresolution = 6 - l_param.prog_order = glymur.lib._openjp2.LRCP + l_param.prog_order = glymur.core.LRCP - l_params = (glymur.lib._openjp2.image_comptparm_t * num_comps)() + l_params = (glymur.lib._openjp2.ImageComptParmType * num_comps)() for j in range(num_comps): l_params[j].dx = 1 l_params[j].dy = 1 diff --git a/glymur/lib/test/test_openjpeg.py b/glymur/lib/test/test_openjpeg.py index 2bdc5db..65dfeba 100644 --- a/glymur/lib/test/test_openjpeg.py +++ b/glymur/lib/test/test_openjpeg.py @@ -21,7 +21,7 @@ class TestOpenJPEG(unittest.TestCase): def test_set_default_decoder_parameters(self): # Verify that we properly set the default decode parameters. - dp = glymur.lib._openjpeg.dparameters_t() + dp = glymur.lib._openjpeg.DecompressionParametersType() glymur.lib._openjpeg.set_default_decoder_parameters(ctypes.byref(dp)) self.assertEqual(dp.cp_reduce, 0) diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 763b6e9..4ba12c6 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -1569,7 +1569,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcod[7] & 0x0020) self.assertEqual(c.segment[3].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # SOT: start of tile part self.assertEqual(c.segment[4].isot, 0) @@ -1623,7 +1623,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) # COC: Coding style component self.assertEqual(c.segment[3].ccoc, 0) @@ -1643,7 +1643,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -1729,7 +1729,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -1846,7 +1846,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128), (128, 128), (128, 128), (128, 128), (128, 128), (128, 128), (128, 128)]) @@ -1955,7 +1955,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component @@ -1976,7 +1976,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) # COC: Coding style component self.assertEqual(c.segment[4].ccoc, 3) @@ -1996,7 +1996,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[4].spcoc[3] & 0x0020) self.assertEqual(c.segment[4].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -2098,7 +2098,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -2167,7 +2167,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[7].spcoc[3] & 0x0020) self.assertEqual(c.segment[7].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # RGN: region of interest self.assertEqual(c.segment[8].crgn, 0) # component @@ -2235,7 +2235,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -2320,7 +2320,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component @@ -2341,7 +2341,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # COC: Coding style component self.assertEqual(c.segment[4].ccoc, 1) @@ -2361,7 +2361,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[4].spcoc[3] & 0x0020) self.assertEqual(c.segment[4].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # COC: Coding style component self.assertEqual(c.segment[5].ccoc, 2) @@ -2381,7 +2381,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[5].spcoc[3] & 0x0020) self.assertEqual(c.segment[5].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -2473,7 +2473,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -2553,7 +2553,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -2694,7 +2694,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 2)]) # QCD: Quantization default @@ -2775,7 +2775,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -2856,7 +2856,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component @@ -2876,7 +2876,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -2982,7 +2982,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -3058,7 +3058,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -3212,7 +3212,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -3280,7 +3280,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component @@ -3300,7 +3300,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -3381,7 +3381,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128), (256, 256), (512, 512), (1024, 1024), (2048, 2048), (4096, 4096), (8192, 8192)]) @@ -3495,7 +3495,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # COC: Coding style component @@ -3515,7 +3515,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) # COC: Coding style component self.assertEqual(c.segment[4].ccoc, 3) @@ -3534,7 +3534,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[4].spcoc[3] & 0x0020) self.assertEqual(c.segment[4].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) # QCD: Quantization default # quantization type @@ -3641,7 +3641,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -3768,7 +3768,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16)] * 8) self.assertEqual(c.segment[3].sqcd & 0x1f, 2) # expounded @@ -3856,7 +3856,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertTrue(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -3949,7 +3949,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(1, 1), (2, 2)]) # COC: Coding style component @@ -3969,7 +3969,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcoc[3] & 0x0020) self.assertEqual(c.segment[3].spcoc[4], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[3]._precinct_size, [(2, 2), (4, 4)]) # QCD: Quantization default @@ -4489,7 +4489,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size[0], (128, 128)) self.assertEqual(c.segment[2]._precinct_size[1:], [(256, 256)] * 5) @@ -4521,7 +4521,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[4].spcoc[3] & 0x0020) self.assertEqual(c.segment[4].spcoc[4], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) # QCC: Quantization component # associated component @@ -4553,7 +4553,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[6].spcoc[3] & 0x0020) self.assertEqual(c.segment[6].spcoc[4], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) # QCC: Quantization component # associated component @@ -4641,7 +4641,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16), (32, 32), (64, 64), (128, 128), (128, 128), (128, 128)]) @@ -4698,7 +4698,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) ids = [x.marker_id for x in c.segment] @@ -4751,7 +4751,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) ids = [x.marker_id for x in c.segment] @@ -4813,7 +4813,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -4875,7 +4875,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -4946,7 +4946,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5023,7 +5023,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5083,7 +5083,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5149,7 +5149,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5234,7 +5234,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5294,7 +5294,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5352,7 +5352,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5410,7 +5410,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5471,7 +5471,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5532,7 +5532,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5592,7 +5592,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5662,7 +5662,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5732,7 +5732,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5794,7 +5794,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -5857,7 +5857,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(128, 128)] + [(256, 256)] * 5) @@ -5973,7 +5973,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcod[7] & 0x0020) self.assertEqual(c.segment[3].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[3].spcod), 9) # QCD: Quantization default @@ -6107,7 +6107,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[3].spcod[7] & 0x0020) self.assertEqual(c.segment[3].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[3].spcod), 9) # QCD: Quantization default @@ -6229,7 +6229,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6383,7 +6383,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6484,7 +6484,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6583,7 +6583,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6687,7 +6687,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_9x7_IRREVERSIBLE) + glymur.core.WAVELET_XFORM_9X7_IRREVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6815,7 +6815,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -6930,7 +6930,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -7025,7 +7025,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -7133,7 +7133,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -7233,7 +7233,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default @@ -7342,7 +7342,7 @@ class TestSuiteDump(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # QCD: Quantization default diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index edbd893..ccdc651 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -125,7 +125,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne1_ppm_2_encode(self): @@ -183,7 +183,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne1_ppm_3_encode(self): @@ -242,7 +242,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(2, 2), (4, 4), (8, 8), (16, 16), (32, 32), (64, 64)]) @@ -305,7 +305,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(c.segment[2]._precinct_size, [(16, 16), (32, 32), (64, 64)] + [(128, 128)] * 3) @@ -363,7 +363,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Bretagne2_ppm_6_encode(self): @@ -420,7 +420,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # 18 SOP segments. @@ -480,7 +480,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertTrue(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) # 18 EPH segments. @@ -541,7 +541,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Cevennes1_bmp_9_encode(self): @@ -597,7 +597,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Cevennes2_ppm_10_encode(self): @@ -653,7 +653,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) def test_NR_ENC_Rome_bmp_11_encode(self): @@ -744,7 +744,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) @unittest.skip("Known failure in openjpeg test suite.") @@ -804,7 +804,7 @@ class TestSuiteWrite(unittest.TestCase): # Segmentation symbols, SEGMARK(SEGSYSM) self.assertFalse(c.segment[2].spcod[7] & 0x0020) self.assertEqual(c.segment[2].spcod[8], - glymur.core.WAVELET_TRANSFORM_5x3_REVERSIBLE) + glymur.core.WAVELET_XFORM_5X3_REVERSIBLE) self.assertEqual(len(c.segment[2].spcod), 9) if __name__ == "__main__": From e6032a8b80d9150a0c3a77646dfb40eebca9bcef Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 05:32:38 -0400 Subject: [PATCH 40/54] cleaned up config determination a bit. --- glymur/lib/config.py | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/glymur/lib/config.py b/glymur/lib/config.py index da1c031..7d1ebe7 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -10,8 +10,10 @@ import warnings import sys if sys.hexversion <= 0x03000000: from ConfigParser import SafeConfigParser as ConfigParser + from ConfigParser import NoOptionError else: from configparser import ConfigParser + from configparser import NoOptionError def glymurrc_fname(): @@ -28,7 +30,6 @@ def glymurrc_fname(): if os.path.exists(fname): return fname - # Either GLYMURCONFIGDIR/glymurrc or $HOME/.glymur/glymurrc confdir = get_configdir() if confdir is not None: fname = os.path.join(confdir, 'glymurrc') @@ -39,10 +40,12 @@ def glymurrc_fname(): return None -def get_openjpeg_config(): - """ Try to find openjpeg library on the system path first. +def load_openjpeg(libopenjpeg_path): + """Load the openjpeg library, falling back on defaults if necessary. """ - libopenjpeg_path = find_library('openjpeg') + if libopenjpeg_path is None: + # Let ctypes try to find it. + libopenjpeg_path = find_library('openjpeg') # If we could not find it, then look in some likely locations. if libopenjpeg_path is None: @@ -74,25 +77,37 @@ def get_openjpeg_config(): return openjpeg_lib -def get_openjp2_config(): +def read_config_file(): """ We expect to not find openjp2 on the system path since the only version that we currently care about is still in the svn trunk at openjpeg.org. We must use a configuration file that the user must write. """ + lib = {} filename = glymurrc_fname() if filename is not None: # Read the configuration file for the library location. parser = ConfigParser() parser.read(filename) - libopenjp2_path = parser.get('library', 'openjp2') - else: + try: + lib['openjp2'] = parser.get('library', 'openjp2') + except NoOptionError: + lib['openjp2'] = None + try: + lib['openjpeg'] = parser.get('library', 'openjpeg') + except NoOptionError: + lib['openjpeg'] = None + + return lib + + +def load_openjp2(libopenjp2_path): + """Load the openjp2 library, falling back on defaults if necessary. + """ + if libopenjp2_path is None: # No help from the config file, try to find it ourselves. libopenjp2_path = find_library('openjp2') - if libopenjp2_path is None: - return None - try: if os.name == "nt": openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) @@ -103,15 +118,16 @@ def get_openjp2_config(): msg = msg.format(libopenjp2_path) warnings.warn(msg, UserWarning) openjp2_lib = None - return openjp2_lib + return openjp2_lib def glymur_config(): """Try to ascertain locations of openjp2, openjpeg libraries. """ - openjp2_lib = get_openjp2_config() - openjpeg_lib = get_openjpeg_config() - return openjp2_lib, openjpeg_lib + libs = read_config_file() + libopenjp2_handle = load_openjp2(libs['openjp2']) + libopenjpeg_handle = load_openjpeg(libs['openjpeg']) + return libopenjp2_handle, libopenjpeg_handle def get_configdir(): From 1a1477344770d4871b88922fd09636cae58dba28 Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 06:50:28 -0400 Subject: [PATCH 41/54] skipping tests requiring NamedTemporaryFile on windows. Windows platform does not allow us to reopen the tempfile using its filesystem name, which really is necessary for use. Some pylint work --- glymur/data/__init__.py | 8 ++--- glymur/lib/test/test_openjp2.py | 2 ++ glymur/lib/test/test_openjpeg.py | 1 + glymur/test/fixtures.py | 55 ++++++++++++++--------------- glymur/test/test_callbacks.py | 2 ++ glymur/test/test_codestream.py | 3 ++ glymur/test/test_config.py | 1 + glymur/test/test_icc.py | 1 + glymur/test/test_jp2box.py | 14 ++++++++ glymur/test/test_jp2k.py | 53 +++++++++++++++------------ glymur/test/test_opj_suite.py | 1 + glymur/test/test_opj_suite_neg.py | 6 ++++ glymur/test/test_opj_suite_write.py | 2 ++ glymur/test/test_printing.py | 5 +-- 14 files changed, 97 insertions(+), 57 deletions(-) diff --git a/glymur/data/__init__.py b/glymur/data/__init__.py index bebfb08..c95b144 100644 --- a/glymur/data/__init__.py +++ b/glymur/data/__init__.py @@ -17,8 +17,8 @@ def nemo(): file : str Platform-independent path to nemo.jp2. """ - file = pkg_resources.resource_filename(__name__, "nemo.jp2") - return file + filename = pkg_resources.resource_filename(__name__, "nemo.jp2") + return filename def goodstuff(): @@ -29,5 +29,5 @@ def goodstuff(): file : str Platform-independent path to goodstuff.j2k. """ - file = pkg_resources.resource_filename(__name__, "goodstuff.j2k") - return file + filename = pkg_resources.resource_filename(__name__, "goodstuff.j2k") + return filename diff --git a/glymur/lib/test/test_openjp2.py b/glymur/lib/test/test_openjp2.py index 61212ab..10b0084 100644 --- a/glymur/lib/test/test_openjp2.py +++ b/glymur/lib/test/test_openjp2.py @@ -1,3 +1,4 @@ +#pylint: disable-all import doctest import os import pkg_resources @@ -12,6 +13,7 @@ import numpy as np import glymur +@unittest.skipIf(os.name == "nt", "Temporary file issue on window.") @unittest.skipIf(glymur.lib._openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestOpenJP2(unittest.TestCase): diff --git a/glymur/lib/test/test_openjpeg.py b/glymur/lib/test/test_openjpeg.py index 65dfeba..b61e18a 100644 --- a/glymur/lib/test/test_openjpeg.py +++ b/glymur/lib/test/test_openjpeg.py @@ -1,3 +1,4 @@ +#pylint: disable-all import ctypes import unittest diff --git a/glymur/test/fixtures.py b/glymur/test/fixtures.py index ce52fae..2a0968e 100644 --- a/glymur/test/fixtures.py +++ b/glymur/test/fixtures.py @@ -3,19 +3,18 @@ import sys import numpy as np -def mse(A, B): +def mse(amat, bmat): """Mean Square Error""" - diff = A.astype(np.double) - B.astype(np.double) - #e = np.sqrt(np.mean(diff**2)) - e = np.mean(diff**2) - return e + diff = amat.astype(np.double) - bmat.astype(np.double) + err = np.mean(diff**2) + return err -def peak_tolerance(A, B): +def peak_tolerance(amat, bmat): """Peak Tolerance""" - diff = np.abs(A.astype(np.double) - B.astype(np.double)) - p = diff.max() - return p + diff = np.abs(amat.astype(np.double) - bmat.astype(np.double)) + ptol = diff.max() + return ptol def read_pgx(pgx_file): @@ -28,42 +27,42 @@ def read_pgx(pgx_file): PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d" """ header = '' - with open(pgx_file, 'rb') as fp: + with open(pgx_file, 'rb') as fptr: while True: - x = fp.read(1) - if x[0] == 10 or x == '\n': - pos = fp.tell() + char = fptr.read(1) + if char[0] == 10 or char == '\n': + pos = fptr.tell() break else: if sys.hexversion < 0x03000000: - header += x + header += char else: - header += chr(x[0]) + header += chr(char[0]) header = header.rstrip() - n = re.split('\s', header) + tokens = re.split('\s', header) - if (n[1][0] == 'M') and (sys.byteorder == 'little'): + if (tokens[1][0] == 'M') and (sys.byteorder == 'little'): swapbytes = True - elif (n[1][0] == 'L') and (sys.byteorder == 'big'): + elif (tokens[1][0] == 'L') and (sys.byteorder == 'big'): swapbytes = True else: swapbytes = False - if (len(n) == 6): - bitdepth = int(n[3]) + if (len(tokens) == 6): + bitdepth = int(tokens[3]) signed = bitdepth < 0 if signed: bitdepth = -1 * bitdepth - nrows = int(n[5]) - ncols = int(n[4]) + nrows = int(tokens[5]) + ncols = int(tokens[4]) else: - bitdepth = int(n[2]) + bitdepth = int(tokens[2]) signed = bitdepth < 0 if signed: bitdepth = -1 * bitdepth - nrows = int(n[4]) - ncols = int(n[3]) + nrows = int(tokens[4]) + ncols = int(tokens[3]) if signed: if bitdepth <= 8: @@ -84,9 +83,9 @@ def read_pgx(pgx_file): # Reopen the file in binary mode and seek to the start of the binary # data - with open(pgx_file, 'rb') as fp: - fp.seek(pos) - data = np.fromfile(file=fp, dtype=dtype).reshape(shape) + with open(pgx_file, 'rb') as fptr: + fptr.seek(pos) + data = np.fromfile(file=fptr, dtype=dtype).reshape(shape) return(data.byteswap(swapbytes)) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 5b2dc6b..285cca2 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -1,3 +1,4 @@ +#pylint: disable-all import os import pkg_resources import re @@ -29,6 +30,7 @@ class TestCallbacks(unittest.TestCase): # Restore stdout. sys.stdout = self.stdout + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_info_callback_on_write(self): # Verify the messages printed when writing an image in verbose mode. j = glymur.Jp2k(self.jp2file) diff --git a/glymur/test/test_codestream.py b/glymur/test/test_codestream.py index b19a042..d2e3b11 100644 --- a/glymur/test/test_codestream.py +++ b/glymur/test/test_codestream.py @@ -1,3 +1,4 @@ +#pylint: disable-all import os import struct import sys @@ -29,6 +30,7 @@ class TestCodestream(unittest.TestCase): def tearDown(self): pass + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_reserved_marker_segment(self): # Some marker segments were reserved in FCD15444-1. Since that # standard is old, some of them may have come into use. @@ -58,6 +60,7 @@ class TestCodestream(unittest.TestCase): self.assertEqual(c.segment[2].length, 3) self.assertEqual(c.segment[2]._data, b'\x00') + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") @unittest.skipIf(sys.hexversion < 0x03020000, "Uses features introduced in 3.2.") def test_unknown_marker_segment(self): diff --git a/glymur/test/test_config.py b/glymur/test/test_config.py index 206da05..035352b 100644 --- a/glymur/test/test_config.py +++ b/glymur/test/test_config.py @@ -1,6 +1,7 @@ """These tests are for edge cases where OPENJPEG does not exist, but OPENJP2 may be present in some form or other. """ +#pylint: disable-all import imp import os diff --git a/glymur/test/test_icc.py b/glymur/test/test_icc.py index b989bbe..30b4dc0 100644 --- a/glymur/test/test_icc.py +++ b/glymur/test/test_icc.py @@ -1,3 +1,4 @@ +#pylint: disable-all import datetime import os import struct diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 3a38002..534a2a5 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -1,3 +1,4 @@ +#pylint: disable-all import doctest import os import tempfile @@ -14,10 +15,14 @@ from glymur.jp2box import * # Doc tests should be run as well. def load_tests(loader, tests, ignore): + if os.name == "nt": + # Can't do it on windows, temporary file issue. + return tests tests.addTests(doctest.DocTestSuite('glymur.jp2box')) return tests +@unittest.skipIf(os.name == "nt", "Temporary file issue on window.") @unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestChannelDefinition(unittest.TestCase): @@ -232,6 +237,7 @@ class TestChannelDefinition(unittest.TestCase): association=[1, 2, 3]) +@unittest.skipIf(os.name == "nt", "Temporary file issue on window.") class TestXML(unittest.TestCase): def setUp(self): @@ -370,6 +376,7 @@ class TestColourSpecificationBox(unittest.TestCase): with self.assertRaises(NotImplementedError): j2k.wrap(tfile.name, boxes=boxes) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_missing_colr_box(self): j2k = Jp2k(self.j2kfile) boxes = [self.jP, self.ftyp, self.jp2h, self.jp2c] @@ -501,12 +508,14 @@ class TestJp2Boxes(unittest.TestCase): self.assertEqual(jp2.box[2].box[1].colorspace, glymur.core.SRGB) self.assertIsNone(jp2.box[2].box[1].icc_profile) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_wrap(self): j2k = Jp2k(self.j2kfile) with tempfile.NamedTemporaryFile(suffix=".jp2") as tfile: j2k.wrap(tfile.name) self.verify_wrapped_raw(tfile.name) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_wrap_jp2(self): j2k = Jp2k(self.j2kfile) with tempfile.NamedTemporaryFile(suffix=".jp2") as tfile: @@ -514,6 +523,7 @@ class TestJp2Boxes(unittest.TestCase): boxes = [box.box_id for box in jp2.box] self.assertEqual(boxes, ['jP ', 'ftyp', 'jp2h', 'jp2c']) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_default_layout_but_with_specified_boxes(self): j2k = Jp2k(self.j2kfile) boxes = [JPEG2000SignatureBox(), @@ -532,6 +542,7 @@ class TestJp2Boxes(unittest.TestCase): j2k.wrap(tfile.name, boxes=boxes) self.verify_wrapped_raw(tfile.name) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_image_header_box_not_first_in_jp2_header(self): # The specification says that ihdr must be the first box in jp2h. j2k = Jp2k(self.j2kfile) @@ -551,6 +562,7 @@ class TestJp2Boxes(unittest.TestCase): with self.assertRaises(IOError): j2k.wrap(tfile.name, boxes=boxes) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_first_2_boxes_not_jP_and_ftyp(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() @@ -571,6 +583,7 @@ class TestJp2Boxes(unittest.TestCase): with self.assertRaises(IOError): j2k.wrap(tfile.name, boxes=boxes) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_jp2h_not_preceeding_jp2c(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() @@ -591,6 +604,7 @@ class TestJp2Boxes(unittest.TestCase): with self.assertRaises(IOError): j2k.wrap(tfile.name, boxes=boxes) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_missing_codestream(self): j2k = Jp2k(self.j2kfile) c = j2k.get_codestream() diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 5f04283..2528dac 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -1,7 +1,5 @@ -import contextlib -import ctypes +# pylint: disable-all import doctest -import imp import os import re import shutil @@ -33,6 +31,9 @@ except: # Doc tests should be run as well. def load_tests(loader, tests, ignore): + if os.name == "nt": + # Can't do it on windows, temporary file issue. + return tests if glymur.lib.openjp2.OPENJP2 is not None: tests.addTests(doctest.DocTestSuite('glymur.jp2k')) return tests @@ -671,42 +672,48 @@ class TestJp2k15(unittest.TestCase): pass def test_bands(self): - # Reading individual bands is an advanced maneuver. + """Reading individual bands is an advanced maneuver. + """ jp2k = Jp2k(self.j2kfile) - with self.assertRaises(NotImplementedError) as ce: - jpdata = jp2k.read_bands() + with self.assertRaises(NotImplementedError): + jp2k.read_bands() def test_area(self): - # Area option not allowed for 1.5.1. + """Area option not allowed for 1.5.1. + """ j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(area=(0, 0, 100, 100)) + with self.assertRaises(TypeError): + j2k.read(area=(0, 0, 100, 100)) def test_tile(self): - # tile option not allowed for 1.5.1. + """tile option not allowed for 1.5.1. + """ j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(tile=0) + with self.assertRaises(TypeError): + j2k.read(tile=0) def test_layer(self): - # layer option not allowed for 1.5.1. + """layer option not allowed for 1.5.1. + """ j2k = Jp2k(self.j2kfile) - with self.assertRaises(TypeError) as ce: - d = j2k.read(layer=1) + with self.assertRaises(TypeError): + j2k.read(layer=1) def test_basic_jp2(self): - # This test is only useful when openjp2 is not available - # and OPJ_DATA_ROOT is not set. We need at least one - # working JP2 test. + """This test is only useful when openjp2 is not available + and OPJ_DATA_ROOT is not set. We need at least one + working JP2 test. + """ j2k = Jp2k(self.jp2file) - d = j2k.read(rlevel=1) + j2k.read(rlevel=1) def test_basic_j2k(self): - # This test is only useful when openjp2 is not available - # and OPJ_DATA_ROOT is not set. We need at least one - # working J2K test. + """This test is only useful when openjp2 is not available + and OPJ_DATA_ROOT is not set. We need at least one + working J2K test. + """ j2k = Jp2k(self.j2kfile) - d = j2k.read() + j2k.read() if __name__ == "__main__": diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 4ba12c6..9ba2d49 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -2,6 +2,7 @@ The tests defined here roughly correspond to what is in the OpenJPEG test suite. """ +#pylint: disable-all from contextlib import contextmanager import os diff --git a/glymur/test/test_opj_suite_neg.py b/glymur/test/test_opj_suite_neg.py index 8220f24..8a89d09 100644 --- a/glymur/test/test_opj_suite_neg.py +++ b/glymur/test/test_opj_suite_neg.py @@ -2,6 +2,7 @@ The tests here do not correspond directly to the OpenJPEG test suite, but seem like logical negative tests to add. """ +#pylint: disable-all import os import sys import tempfile @@ -71,6 +72,7 @@ class TestSuiteNegative(unittest.TestCase): def tearDown(self): pass + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_negative_psnr_with_cratios(self): # Using psnr with cratios options is not allowed. # Not an OpenJPEG test, but close. @@ -126,6 +128,7 @@ class TestSuiteNegative(unittest.TestCase): # the end of SOT. self.assertEqual(c.segment[-1].marker_id, 'SOD') + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_code_block_dimensions(self): # opj_compress doesn't allow the dimensions of a codeblock # to be too small or too big, so neither will we. @@ -154,6 +157,7 @@ class TestSuiteNegative(unittest.TestCase): with self.assertWarns(UserWarning) as cw: j = Jp2k(infile) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_precinct_size_not_multiple_of_two(self): # Seems like precinct sizes should be powers of two. ifile = Jp2k(self.j2kfile) @@ -163,6 +167,7 @@ class TestSuiteNegative(unittest.TestCase): with self.assertRaises(IOError) as ce: ofile.write(data, psizes=[(13, 13)]) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_codeblock_size_not_multiple_of_two(self): # Seems like code block sizes should be powers of two. ifile = Jp2k(self.j2kfile) @@ -172,6 +177,7 @@ class TestSuiteNegative(unittest.TestCase): with self.assertRaises(IOError) as ce: ofile.write(data, cbsize=(13, 12)) + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_codeblock_size_with_precinct_size(self): # Seems like code block sizes should never exceed half that of # precinct size. diff --git a/glymur/test/test_opj_suite_write.py b/glymur/test/test_opj_suite_write.py index ccdc651..4023239 100644 --- a/glymur/test/test_opj_suite_write.py +++ b/glymur/test/test_opj_suite_write.py @@ -2,6 +2,7 @@ The tests defined here roughly correspond to what is in the OpenJPEG test suite. """ +#pylint: disable-all import os import platform import sys @@ -57,6 +58,7 @@ def read_image(infile): return data +@unittest.skipIf(os.name == "nt", "no write support on windows, period") @unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") @unittest.skipIf(no_read_backend, no_read_backend_msg) diff --git a/glymur/test/test_printing.py b/glymur/test/test_printing.py index 4ced196..3b920cc 100644 --- a/glymur/test/test_printing.py +++ b/glymur/test/test_printing.py @@ -1,3 +1,4 @@ +#pylint: disable-all import os import pkg_resources import struct @@ -21,6 +22,7 @@ except: raise +@unittest.skipIf(os.name == "nt", "Temporary file issue on window.") @unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestPrintingNeedsLib(unittest.TestCase): @@ -782,8 +784,7 @@ class TestPrinting(unittest.TestCase): expected = '\n'.join(lines) self.assertEqual(actual, expected) - @unittest.skipIf(os.name == "nt", - "Problems using NamedTemporaryFile on windows.") + @unittest.skipIf(os.name == "nt", "Temporary file issue on window.") def test_less_common_boxes(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: with open(self.jp2file, 'rb') as ifile: From 22fbb97d5637c29c4e528ce6dd4ba45ae18a91ce Mon Sep 17 00:00:00 2001 From: "U-john-PC\\john" Date: Wed, 10 Jul 2013 08:02:44 -0400 Subject: [PATCH 42/54] TypeError being thrown on vista instead of OSError. --- glymur/lib/config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glymur/lib/config.py b/glymur/lib/config.py index 7d1ebe7..a64ff37 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -83,7 +83,7 @@ def read_config_file(): that we currently care about is still in the svn trunk at openjpeg.org. We must use a configuration file that the user must write. """ - lib = {} + lib = {'openjp2': None, 'openjpeg': None} filename = glymurrc_fname() if filename is not None: # Read the configuration file for the library location. @@ -92,11 +92,11 @@ def read_config_file(): try: lib['openjp2'] = parser.get('library', 'openjp2') except NoOptionError: - lib['openjp2'] = None + pass try: lib['openjpeg'] = parser.get('library', 'openjpeg') except NoOptionError: - lib['openjpeg'] = None + pass return lib @@ -113,7 +113,7 @@ def load_openjp2(libopenjp2_path): openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) else: openjp2_lib = ctypes.CDLL(libopenjp2_path) - except OSError: + except (TypeError, OSError): msg = '"Library {0}" could not be loaded. Operating in degraded mode.' msg = msg.format(libopenjp2_path) warnings.warn(msg, UserWarning) From d480a26af424bf588190e10dbee878c74553b2d6 Mon Sep 17 00:00:00 2001 From: "U-john-PC\\john" Date: Wed, 10 Jul 2013 08:02:44 -0400 Subject: [PATCH 43/54] TypeError being thrown on vista instead of OSError. #71 --- glymur/lib/config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glymur/lib/config.py b/glymur/lib/config.py index 7d1ebe7..a64ff37 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -83,7 +83,7 @@ def read_config_file(): that we currently care about is still in the svn trunk at openjpeg.org. We must use a configuration file that the user must write. """ - lib = {} + lib = {'openjp2': None, 'openjpeg': None} filename = glymurrc_fname() if filename is not None: # Read the configuration file for the library location. @@ -92,11 +92,11 @@ def read_config_file(): try: lib['openjp2'] = parser.get('library', 'openjp2') except NoOptionError: - lib['openjp2'] = None + pass try: lib['openjpeg'] = parser.get('library', 'openjpeg') except NoOptionError: - lib['openjpeg'] = None + pass return lib @@ -113,7 +113,7 @@ def load_openjp2(libopenjp2_path): openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) else: openjp2_lib = ctypes.CDLL(libopenjp2_path) - except OSError: + except (TypeError, OSError): msg = '"Library {0}" could not be loaded. Operating in degraded mode.' msg = msg.format(libopenjp2_path) warnings.warn(msg, UserWarning) From d1f43187fd2a1c3360d6fbfcff066184ec298ffa Mon Sep 17 00:00:00 2001 From: John G Evans Date: Wed, 10 Jul 2013 12:04:38 -0400 Subject: [PATCH 44/54] Working run test run on windows with only openjpeg. --- glymur/test/test_jp2k.py | 53 +++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 2528dac..12517fc 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -39,9 +39,10 @@ def load_tests(loader, tests, ignore): return tests +@unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") @unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") -class TestJp2k(unittest.TestCase): +class TestJp2kBadXmlFile(unittest.TestCase): @classmethod def setUpClass(cls): @@ -89,14 +90,6 @@ class TestJp2k(unittest.TestCase): with self.assertWarns(UserWarning) as cw: jp2k = Jp2k(self._bad_xml_file) - def test_rlevel_max(self): - # Verify that rlevel=-1 gets us the lowest resolution image - j = Jp2k(self.j2kfile) - thumbnail1 = j.read(rlevel=-1) - thumbnail2 = j.read(rlevel=5) - np.testing.assert_array_equal(thumbnail1, thumbnail2) - self.assertEqual(thumbnail1.shape, (25, 15, 3)) - def test_invalid_xml_box(self): # Should be able to recover from xml box with bad xml. with warnings.catch_warnings(): @@ -108,6 +101,27 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[3].length, 28) self.assertIsNone(jp2k.box[3].xml) + + +@unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, + "Missing openjp2 library.") +class TestJp2k(unittest.TestCase): + + def setUp(self): + self.jp2file = glymur.data.nemo() + self.j2kfile = glymur.data.goodstuff() + + def tearDown(self): + pass + + def test_rlevel_max(self): + # Verify that rlevel=-1 gets us the lowest resolution image + j = Jp2k(self.j2kfile) + thumbnail1 = j.read(rlevel=-1) + thumbnail2 = j.read(rlevel=5) + np.testing.assert_array_equal(thumbnail1, thumbnail2) + self.assertEqual(thumbnail1.shape, (25, 15, 3)) + def test_bad_area_parameter(self): # Verify that we error out appropriately if given a bad area parameter. j = Jp2k(self.jp2file) @@ -144,6 +158,7 @@ class TestJp2k(unittest.TestCase): filename = 'this file does not actually exist on the file system.' jp2k = Jp2k(filename) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_write_srgb_without_mct(self): j2k = Jp2k(self.j2kfile) expdata = j2k.read() @@ -156,6 +171,7 @@ class TestJp2k(unittest.TestCase): c = ofile.get_codestream() self.assertEqual(c.segment[2].spcod[3], 0) # no mct + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_write_grayscale_with_mct(self): # MCT usage makes no sense for grayscale images. j2k = Jp2k(self.j2kfile) @@ -165,6 +181,7 @@ class TestJp2k(unittest.TestCase): with self.assertRaises(IOError): ofile.write(expdata[:, :, 0], mct=True) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_write_cprl(self): # Issue 17 j = Jp2k(self.jp2file) @@ -245,6 +262,7 @@ class TestJp2k(unittest.TestCase): jp2k = Jp2k(filename) self.assertEqual(len(jp2k.box), 0) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_64bit_XL_field(self): # Verify that boxes with the XL field are properly read. # Don't have such a file on hand, so we create one. Copy our example @@ -277,6 +295,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[5].offset, 3127) self.assertEqual(jp2k.box[5].length, 1133427 + 8) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_L_is_zero(self): # Verify that boxes with the L field as zero are correctly read. # This should only happen in the last box of a JPEG 2000 file. @@ -332,6 +351,7 @@ class TestJp2k(unittest.TestCase): j = Jp2k(filename) self.assertEqual(j.box, []) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_code_block_height_different_than_width(self): # Verify that we can set a code block size where height does not equal # width. @@ -347,6 +367,7 @@ class TestJp2k(unittest.TestCase): # Code block size is reported as XY in the codestream. self.assertEqual(tuple(c.segment[2].spcod[5:7]), (3, 2)) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_negative_too_many_dimensions(self): # OpenJP2 only allows 2D or 3D images. with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile: @@ -355,6 +376,7 @@ class TestJp2k(unittest.TestCase): data = np.zeros((128, 128, 2, 2), dtype=np.uint8) j.write(data) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_unrecognized_jp2_colorspace(self): # We only allow RGB and GRAYSCALE. with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: @@ -363,6 +385,7 @@ class TestJp2k(unittest.TestCase): data = np.zeros((128, 128, 3), dtype=np.uint8) j.write(data, colorspace='cmyk') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_2D_rgb(self): # RGB must have at least 3 components. with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: @@ -371,6 +394,7 @@ class TestJp2k(unittest.TestCase): data = np.zeros((128, 128, 2), dtype=np.uint8) j.write(data, colorspace='rgb') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_colorspace_with_j2k(self): # Specifying a colorspace with J2K does not make sense. with tempfile.NamedTemporaryFile(suffix='.j2k') as tfile: @@ -379,6 +403,7 @@ class TestJp2k(unittest.TestCase): data = np.zeros((128, 128, 3), dtype=np.uint8) j.write(data, colorspace='rgb') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_specify_rgb(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -386,6 +411,7 @@ class TestJp2k(unittest.TestCase): j.write(data, colorspace='rgb') self.assertEqual(j.box[2].box[1].colorspace, glymur.core.SRGB) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_specify_gray(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -394,6 +420,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(j.box[2].box[1].colorspace, glymur.core.GREYSCALE) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_specify_grey(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -402,6 +429,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(j.box[2].box[1].colorspace, glymur.core.GREYSCALE) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_grey_with_extra_component(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -413,6 +441,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(j.box[2].box[1].colorspace, glymur.core.GREYSCALE) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_grey_with_two_extra_components(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -424,6 +453,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(j.box[2].box[1].colorspace, glymur.core.GREYSCALE) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_rgb_with_extra_component(self): with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: j = Jp2k(tfile.name, 'wb') @@ -442,6 +472,7 @@ class TestJp2k(unittest.TestCase): data = np.zeros((128, 128, 3), dtype=np.uint8) j.write(data, colorspace='ycc') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_uinf_ulst_url_boxes(self): # Verify that we can read UINF, ULST, and URL boxes. I don't have # easy access to such a file, and there's no such file in the @@ -498,6 +529,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[3].box[1].flag, (0, 0, 0)) self.assertEqual(jp2k.box[3].box[1].url, 'abcd') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_xml_box_with_trailing_nulls(self): # ElementTree does not like trailing null chars after valid XML # text. @@ -527,6 +559,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jp2k.box[3].offset, 77) self.assertEqual(jp2k.box[3].length, 36) + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_asoc_label_box(self): # Construct a fake file with an asoc and a label box, as # OpenJPEG doesn't have such a file. @@ -573,6 +606,7 @@ class TestJp2k(unittest.TestCase): self.assertEqual(jasoc.box[3].box[0].label, 'label') self.assertEqual(jasoc.box[3].box[1].box_id, 'xml ') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_openjpeg_library_message(self): # Verify the error message produced by the openjpeg library. # This will confirm that the error callback mechanism is working. @@ -617,6 +651,7 @@ class TestJp2k(unittest.TestCase): attr_value = elt.attrib['{0}CreatorTool'.format(ns1)] self.assertEqual(attr_value, 'glymur') + @unittest.skipIf(os.name == "nt", "NamedTemporaryFile issue on windows") def test_unrecognized_exif_tag(self): # An unrecognized exif tag should be handled gracefully. with tempfile.NamedTemporaryFile(suffix='.jp2') as tfile: From 3cb640b1f52ddaef9ee8eaa5b4b54ba63078db2e Mon Sep 17 00:00:00 2001 From: John G Evans Date: Wed, 10 Jul 2013 15:50:35 -0400 Subject: [PATCH 45/54] Updated with windows stats. --- release.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/release.txt b/release.txt index c553960..5dbdd44 100644 --- a/release.txt +++ b/release.txt @@ -1,7 +1,11 @@ | OS | Python 2.7 | Python 3.3 | Notes | +------------+------------+------------+----------------------------------+ | Windows | X | | Python(xy) with OpenJPEG 1.5.1. | -| | | | At least 25 tests should pass | +| | | | At least 155 of 444 tests should | ++------------+------------+------------+----------------------------------+ +| Windows | X | | Python(xy) with OpenJPEG 1.5.1 | +| | | | and OpenJPEG svn. At least 282 | +| | | | of 444 tests should pass. | +------------+------------+------------+----------------------------------+ | Mac | X | | MacPorts with both OpenJPEG 1.5.1| | | | | and OpenJPEG svn. Maximum number| From ed79e61a353946eb937707db1a036e186e894aad Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 18:39:22 -0400 Subject: [PATCH 46/54] Bumping for 0.2.0 release, added to mac instructions. --- CHANGES.txt | 2 + docs/source/conf.py | 2 +- docs/source/detailed_installation.rst | 4 ++ docs/source/introduction.rst | 8 ++-- glymur/jp2box.py | 65 +++++++++++++++------------ glymur/jp2k.py | 6 +-- release.txt | 47 ++++++++++--------- setup.py | 3 +- 8 files changed, 78 insertions(+), 59 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index efc70fc..d4b0eba 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,5 @@ +Jul 11, 2013 - v0.2.0 Support for Python 2.7 on windows, OpenJPEG 1.5.1. + Jun 27, 2013 - v0.1.10 Can wrap codestreams in custom JP2 jackets. Exposing parameter to specify multi component transform. Added a raw codestream file. diff --git a/docs/source/conf.py b/docs/source/conf.py index 6ddfcfb..47985ed 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -78,7 +78,7 @@ copyright = u'2013, John Evans' # The short X.Y version. version = '0.1' # The full version, including alpha/beta/rc tags. -release = '0.1.10' +release = '0.2.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 1e6fe4b..9b3cfe0 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -65,6 +65,10 @@ additionally be installed: * py33-scikit-image and either py33-Pillow or freeimage * py33-matplotlib and py33-Pillow +MacPorts supplies both OpenJPEG 1.5.0 and OpenJPEG 2.0.0. As previously +mentioned, the 2.0.0 official release is not supported (although the 2.0+ +development version via SVN *is* supported). + Linux ----- diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index 5818c1b..3fbbb84 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -27,8 +27,8 @@ about OpenJPEG, please consult http://www.openjpeg.org. If you use MacPorts on the mac or if you have a sufficiently recent version of Linux, your package manager should already provide you with at least version 1.5.1 of OpenJPEG, which means that glymur can be installed ready to read JPEG -2000 images. If you use windows, I suggest using the 1.5.1 windows installer provided -to you by the OpenJPEG folks at +2000 images. If you use windows, I suggest using the 1.5.1 windows installer +provided to you by the OpenJPEG folks at https://code.google.com/p/openjpeg/downloads/list . Glymur Installation @@ -56,5 +56,5 @@ You can run the tests from within python as follows:: >>> glymur.runtests() Many tests are currently skipped; in fact most of them are skipped if you -are relying on OpenJPEG 1.5.1. But the important thing is whether or not any -tests fail. +are relying on OpenJPEG 1.5.1. But the important thing, though, is whether or +not any tests fail. diff --git a/glymur/jp2box.py b/glymur/jp2box.py index 164da61..7e5014c 100644 --- a/glymur/jp2box.py +++ b/glymur/jp2box.py @@ -38,11 +38,13 @@ _METHOD_DISPLAY = { ANY_ICC_PROFILE: 'any ICC profile', VENDOR_COLOR_METHOD: 'vendor color method'} -_ = {1: 'accurately represents correct colorspace definition', - 2: 'approximates correct colorspace definition, exceptional quality', - 3: 'approximates correct colorspace definition, reasonable quality', - 4: 'approximates correct colorspace definition, poor quality'} -_approximation_display = _ +_APPROX_DISPLAY = {1: 'accurately represents correct colorspace definition', + 2: 'approximates correct colorspace definition, ' + + 'exceptional quality', + 3: 'approximates correct colorspace definition, ' + + 'reasonable quality', + 4: 'approximates correct colorspace definition, ' + + 'poor quality'} class Jp2kBox(object): @@ -66,12 +68,15 @@ class Jp2kBox(object): self.offset = offset self.longname = longname + # should never be used except for last box in file. + self._file_size = -1 + def __str__(self): msg = "{0} Box ({1})".format(self.longname, self.box_id) msg += " @ ({0}, {1})".format(self.offset, self.length) return msg - def write(self, fptr): + def write(self, _): """Must be implemented in a subclass. """ msg = "Not supported for {0} box.".format(self.longname) @@ -120,7 +125,7 @@ class Jp2kBox(object): # Call the proper parser for the given box with ID "T". try: - box = _BOX_WITH_ID[box_id]._parse(fptr, start, num_bytes) + box = _BOX_WITH_ID[box_id].parse(fptr, start, num_bytes) except KeyError: msg = 'Unrecognized box ({0}) encountered.'.format(box_id) warnings.warn(msg) @@ -177,6 +182,7 @@ class ColourSpecificationBox(Jp2kBox): ICC profile header according to ICC profile specification. If colorspace is not None, then icc_profile must be empty. """ + def __init__(self, method=ENUMERATED_COLORSPACE, precedence=0, approximation=0, colorspace=None, icc_profile=None, length=0, offset=-1): @@ -203,8 +209,9 @@ class ColourSpecificationBox(Jp2kBox): msg += '\n Precedence: {0}'.format(self.precedence) if self.approximation is not 0: - dispvalue = _approximation_display[self.approximation] + dispvalue = _APPROX_DISPLAY[self.approximation] msg += '\n Approximation: {0}'.format(dispvalue) + if self.colorspace is not None: dispvalue = _COLORSPACE_MAP_DISPLAY[self.colorspace] msg += '\n Colorspace: {0}'.format(dispvalue) @@ -240,7 +247,7 @@ class ColourSpecificationBox(Jp2kBox): fptr.write(read_buffer) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse JPEG 2000 color specification box. Parameters @@ -468,7 +475,7 @@ class ChannelDefinitionBox(Jp2kBox): self.association[j])) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse component definition box. Parameters @@ -542,7 +549,7 @@ class ComponentMappingBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse component mapping box. Parameters @@ -607,7 +614,7 @@ class ContiguousCodestreamBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset=0, length=0): + def parse(fptr, offset=0, length=0): """Parse a codestream box. Parameters @@ -685,7 +692,7 @@ class FileTypeBox(Jp2kBox): fptr.write(item.encode()) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse JPEG 2000 file type box. Parameters @@ -812,7 +819,7 @@ class ImageHeaderBox(Jp2kBox): fptr.write(read_buffer) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse JPEG 2000 image header box. Parameters @@ -883,7 +890,7 @@ class AssociationBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse association box. Parameters @@ -956,7 +963,7 @@ class JP2HeaderBox(Jp2kBox): fptr.seek(end_pos) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse JPEG 2000 header box. Parameters @@ -1017,7 +1024,7 @@ class JPEG2000SignatureBox(Jp2kBox): fptr.write(struct.pack('>BBBB', *self.signature)) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse JPEG 2000 signature box. Parameters @@ -1073,7 +1080,7 @@ class PaletteBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse palette box. Parameters @@ -1220,6 +1227,8 @@ _READER_REQUIREMENTS_DISPLAY = { + 'requirements in M.9.2.3', 73: 'YPbPr(1125/60) enumerated colourspace', 74: 'YPbPr(1250/50) enumerated colourspace'} + + class ReaderRequirementsBox(Jp2kBox): """Container for reader requirements box information. @@ -1276,7 +1285,7 @@ class ReaderRequirementsBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse reader requirements box. Parameters @@ -1380,7 +1389,7 @@ class ResolutionBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse Resolution box. Parameters @@ -1436,7 +1445,7 @@ class CaptureResolutionBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse Resolution box. Parameters @@ -1493,7 +1502,7 @@ class DisplayResolutionBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse Resolution box. Parameters @@ -1548,7 +1557,7 @@ class LabelBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse Label box. Parameters @@ -1633,7 +1642,7 @@ class XMLBox(Jp2kBox): fptr.write(read_buffer) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse XML box. Parameters @@ -1697,7 +1706,7 @@ class UUIDListBox(Jp2kBox): return(msg) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse UUIDList box. Parameters @@ -1760,7 +1769,7 @@ class UUIDInfoBox(Jp2kBox): return(msg) @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse UUIDInfo super box. Parameters @@ -1828,7 +1837,7 @@ class DataEntryURLBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse Data Entry URL box. Parameters @@ -1949,7 +1958,7 @@ class UUIDBox(Jp2kBox): return msg @staticmethod - def _parse(fptr, offset, length): + def parse(fptr, offset, length): """Parse UUID box. Parameters diff --git a/glymur/jp2k.py b/glymur/jp2k.py index e1d27cb..50801f4 100644 --- a/glymur/jp2k.py +++ b/glymur/jp2k.py @@ -98,7 +98,7 @@ class Jp2k(Jp2kBox): # Parse the file for JP2/JPX contents only if we are reading it. if mode == 'rb': - self._parse() + self.parse() def __str__(self): metadata = ['File: ' + os.path.basename(self.filename)] @@ -110,7 +110,7 @@ class Jp2k(Jp2kBox): metadata.append(str(codestream)) return '\n'.join(metadata) - def _parse(self): + def parse(self): """Parses the JPEG 2000 file. Raises @@ -425,7 +425,7 @@ class Jp2k(Jp2kBox): _opj2.destroy_codec(codec) _opj2.image_destroy(image) - self._parse() + self.parse() def wrap(self, filename, boxes=None): """Write the codestream back out to file, wrapped in new JP2 jacket. diff --git a/release.txt b/release.txt index c553960..b3641dd 100644 --- a/release.txt +++ b/release.txt @@ -1,22 +1,25 @@ -| OS | Python 2.7 | Python 3.3 | Notes | -+------------+------------+------------+----------------------------------+ -| Windows | X | | Python(xy) with OpenJPEG 1.5.1. | -| | | | At least 25 tests should pass | -+------------+------------+------------+----------------------------------+ -| Mac | X | | MacPorts with both OpenJPEG 1.5.1| -| | | | and OpenJPEG svn. Maximum number| -| | | | of tests should pass. | -+------------+------------+------------+----------------------------------+ -| Mac | | X | MacPorts with both OpenJPEG 1.5.1| -| | | | and OpenJPEG svn. Maximum number| -| | | | of tests should pass. | -+------------+------------+------------+----------------------------------+ -| Raspberry | X | | Ships with only 1.3. Should | -| | | | error out gracefully. | -+------------+------------+------------+----------------------------------+ -| Fedora 17 | X | | Ships with 1.4. Should error out| -| | | | gracefully. | -+------------+------------+------------+----------------------------------+ -| Fedora 18 | | X | Ships with 1.5.1. Some tests | -| | | | should pass. | -+------------+------------+------------+----------------------------------+ +| OS | Python 2.7 | Python 3.3 | Notes | ++------------+------------+------------+--------------------------------------+ +| Windows | X | | Python(xy) with OpenJPEG 1.5.1. | +| | | | At least 25 tests should pass | ++------------+------------+------------+--------------------------------------+ +| Mac | X | | MacPorts with both OpenJPEG 1.5.1 | +| | | | and OpenJPEG svn. 370 of 450 tests | +| | | | should pass. | ++------------+------------+------------+--------------------------------------+ +| Mac | | X | MacPorts with both OpenJPEG 1.5.1 | +| | | | and OpenJPEG svn. 390 of 450 | +| | | | tests should pass. | ++------------+------------+------------+--------------------------------------+ +| Raspberry | X | | Ships with only 1.3. Should | +| | | | error out gracefully. | ++------------+------------+------------+--------------------------------------+ +| Fedora 17 | X | | Ships with 1.4. Should error out | +| | | | gracefully. | ++------------+------------+------------+--------------------------------------+ +| Fedora 18 | | X | Ships with 1.5.1. Some tests | +| | | | should pass. | ++------------+------------+------------+--------------------------------------+ + +Pylint on entire package should be at least 0.95. +pep8 should be pass cleanly. diff --git a/setup.py b/setup.py index 0e213a3..f8e3fb8 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages import sys kwargs = {'name': 'Glymur', - 'version': '0.1.10', + 'version': '0.2.0', 'description': 'Tools for accessing JPEG2000 files', 'long_description': open('README.md').read(), 'author': 'John Evans', @@ -29,6 +29,7 @@ clssfrs = ["Programming Language :: Python", "Development Status :: 3 - Alpha", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows :: Windows XP", "Intended Audience :: Science/Research", "Intended Audience :: Information Technology", "Topic :: Software Development :: Libraries :: Python Modules"] From fd227baf67410cb3aaa361dd6a7dc21642c73021 Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 19:00:16 -0400 Subject: [PATCH 47/54] Have to gracefully handle missing openjp2. --- glymur/lib/config.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/glymur/lib/config.py b/glymur/lib/config.py index a64ff37..a67b632 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -108,6 +108,9 @@ def load_openjp2(libopenjp2_path): # No help from the config file, try to find it ourselves. libopenjp2_path = find_library('openjp2') + if libopenjp2_path is None: + return None + try: if os.name == "nt": openjp2_lib = ctypes.windll.LoadLibrary(libopenjp2_path) From 3b6aba7e1e7704c3df54922f0a6324661e011893 Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 19:00:36 -0400 Subject: [PATCH 48/54] It's possible for openjpeg timing message to have a minus sign preceding dwt. --- glymur/test/test_callbacks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 285cca2..91aa9aa 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -99,7 +99,7 @@ class TestCallbacks15(unittest.TestCase): regex = re.compile(r"""\[INFO\]\stile\s1\sof\s1\s+ \[INFO\]\s-\stiers-1\stook\s[0-9]+\.[0-9]+\ss\s+ - \[INFO\]\s-\sdwt\stook\s[0-9]+\.[0-9]+\ss\s+ + \[INFO\]\s-\sdwt\stook\s(-){0,1}[0-9]+\.[0-9]+\ss\s+ \[INFO\]\s-\stile\sdecoded\sin\s[0-9]+\.[0-9]+\ss""", re.VERBOSE) if sys.hexversion <= 0x03020000: From 29f1dcdc437aa057967f441b9acfec279062445a Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 19:02:23 -0400 Subject: [PATCH 49/54] Added Fedora 18 notes. --- release.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release.txt b/release.txt index 0778991..8e1f343 100644 --- a/release.txt +++ b/release.txt @@ -21,8 +21,8 @@ | Fedora 17 | X | | Ships with 1.4. Should error out | | | | | gracefully. | +------------+------------+------------+--------------------------------------+ -| Fedora 18 | | X | Ships with 1.5.1. Some tests | -| | | | should pass. | +| Fedora 18 | | X | Ships with 1.5.1. 167 of 445 tests | +| | | | should pass (no OPJ_DATA_ROOT). | +------------+------------+------------+--------------------------------------+ Pylint on entire package should be at least 0.95. From 3f8495a3bbfbea4cb2a7ce76b2bfc3f5471e6513 Mon Sep 17 00:00:00 2001 From: John Evans Date: Wed, 10 Jul 2013 19:34:33 -0400 Subject: [PATCH 50/54] pep8 work. --- glymur/lib/config.py | 7 ++++--- glymur/lib/test/test_openjpeg.py | 2 +- glymur/test/fixtures.py | 3 +-- glymur/test/test_callbacks.py | 10 ++++++---- glymur/test/test_config.py | 2 +- glymur/test/test_jp2box.py | 6 +++--- glymur/test/test_jp2k.py | 5 ++--- glymur/test/test_opj_suite.py | 12 ++++++++---- release.txt | 3 ++- 9 files changed, 28 insertions(+), 22 deletions(-) diff --git a/glymur/lib/config.py b/glymur/lib/config.py index a67b632..fc0e4cb 100644 --- a/glymur/lib/config.py +++ b/glymur/lib/config.py @@ -92,11 +92,11 @@ def read_config_file(): try: lib['openjp2'] = parser.get('library', 'openjp2') except NoOptionError: - pass + pass try: lib['openjpeg'] = parser.get('library', 'openjpeg') except NoOptionError: - pass + pass return lib @@ -109,7 +109,7 @@ def load_openjp2(libopenjp2_path): libopenjp2_path = find_library('openjp2') if libopenjp2_path is None: - return None + return None try: if os.name == "nt": @@ -124,6 +124,7 @@ def load_openjp2(libopenjp2_path): return openjp2_lib + def glymur_config(): """Try to ascertain locations of openjp2, openjpeg libraries. """ diff --git a/glymur/lib/test/test_openjpeg.py b/glymur/lib/test/test_openjpeg.py index b61e18a..4f2d099 100644 --- a/glymur/lib/test/test_openjpeg.py +++ b/glymur/lib/test/test_openjpeg.py @@ -4,6 +4,7 @@ import unittest import glymur + @unittest.skipIf(glymur.lib._openjpeg.OPENJPEG is None, "Missing openjpeg library.") class TestOpenJPEG(unittest.TestCase): @@ -36,4 +37,3 @@ class TestOpenJPEG(unittest.TestCase): self.assertEqual(dp.jpwl_max_tiles, 0) self.assertEqual(dp.cp_limit_decoding, 0) self.assertEqual(dp.flags, 0) - diff --git a/glymur/test/fixtures.py b/glymur/test/fixtures.py index 2a0968e..3babc8a 100644 --- a/glymur/test/fixtures.py +++ b/glymur/test/fixtures.py @@ -3,6 +3,7 @@ import sys import numpy as np + def mse(amat, bmat): """Mean Square Error""" diff = amat.astype(np.double) - bmat.astype(np.double) @@ -88,5 +89,3 @@ def read_pgx(pgx_file): data = np.fromfile(file=fptr, dtype=dtype).reshape(shape) return(data.byteswap(swapbytes)) - - diff --git a/glymur/test/test_callbacks.py b/glymur/test/test_callbacks.py index 91aa9aa..bb6ea07 100644 --- a/glymur/test/test_callbacks.py +++ b/glymur/test/test_callbacks.py @@ -98,9 +98,12 @@ class TestCallbacks15(unittest.TestCase): actual = sys.stdout.getvalue().strip() regex = re.compile(r"""\[INFO\]\stile\s1\sof\s1\s+ - \[INFO\]\s-\stiers-1\stook\s[0-9]+\.[0-9]+\ss\s+ - \[INFO\]\s-\sdwt\stook\s(-){0,1}[0-9]+\.[0-9]+\ss\s+ - \[INFO\]\s-\stile\sdecoded\sin\s[0-9]+\.[0-9]+\ss""", + \[INFO\]\s-\stiers-1\stook\s + [0-9]+\.[0-9]+\ss\s+ + \[INFO\]\s-\sdwt\stook\s + (-){0,1}[0-9]+\.[0-9]+\ss\s+ + \[INFO\]\s-\stile\sdecoded\sin\s + [0-9]+\.[0-9]+\ss""", re.VERBOSE) if sys.hexversion <= 0x03020000: self.assertRegexpMatches(actual, regex) @@ -108,6 +111,5 @@ class TestCallbacks15(unittest.TestCase): self.assertRegex(actual, regex) - if __name__ == "__main__": unittest.main() diff --git a/glymur/test/test_config.py b/glymur/test/test_config.py index 035352b..bcc2327 100644 --- a/glymur/test/test_config.py +++ b/glymur/test/test_config.py @@ -1,4 +1,4 @@ -"""These tests are for edge cases where OPENJPEG does not exist, but +"""These tests are for edge cases where OPENJPEG does not exist, but OPENJP2 may be present in some form or other. """ #pylint: disable-all diff --git a/glymur/test/test_jp2box.py b/glymur/test/test_jp2box.py index 534a2a5..72bb476 100644 --- a/glymur/test/test_jp2box.py +++ b/glymur/test/test_jp2box.py @@ -297,7 +297,7 @@ class TestXML(unittest.TestCase): with self.assertRaises((IOError, OSError)) as ce: xmlb = glymur.jp2box.XMLBox(filename=self.xmlfile, xml=xml_object) - @unittest.skipIf(os.name == "nt", + @unittest.skipIf(os.name == "nt", "Problems using NamedTemporaryFile on windows.") def test_basic_xml(self): # Should be able to write an XMLBox. @@ -319,7 +319,7 @@ class TestXML(unittest.TestCase): self.assertEqual(ET.tostring(jp2.box[3].xml), b'0') - @unittest.skipIf(os.name == "nt", + @unittest.skipIf(os.name == "nt", "Problems using NamedTemporaryFile on windows.") def test_xml_from_file(self): j2k = Jp2k(self.j2kfile) @@ -365,7 +365,7 @@ class TestColourSpecificationBox(unittest.TestCase): def tearDown(self): pass - @unittest.skipIf(os.name == "nt", + @unittest.skipIf(os.name == "nt", "Problems using NamedTemporaryFile on windows.") def test_color_specification_box_with_out_enumerated_colorspace(self): j2k = Jp2k(self.j2kfile) diff --git a/glymur/test/test_jp2k.py b/glymur/test/test_jp2k.py index 12517fc..3c1197d 100644 --- a/glymur/test/test_jp2k.py +++ b/glymur/test/test_jp2k.py @@ -102,7 +102,6 @@ class TestJp2kBadXmlFile(unittest.TestCase): self.assertIsNone(jp2k.box[3].xml) - @unittest.skipIf(glymur.lib.openjp2.OPENJP2 is None, "Missing openjp2 library.") class TestJp2k(unittest.TestCase): @@ -634,10 +633,10 @@ class TestJp2k(unittest.TestCase): Invalid\svalues\sfor\scomp\s=\s0\s+ :\sdx=1\sdy=0''', re.VERBOSE) if sys.hexversion < 0x03020000: - with self.assertRaisesRegexp((IOError, OSError), regexp) as ce: + with self.assertRaisesRegexp((IOError, OSError), regexp): d = j.read(rlevel=1) else: - with self.assertRaisesRegex((IOError, OSError), regexp) as ce: + with self.assertRaisesRegex((IOError, OSError), regexp): d = j.read(rlevel=1) def test_xmp_attribute(self): diff --git a/glymur/test/test_opj_suite.py b/glymur/test/test_opj_suite.py index 9ba2d49..41d4f8b 100644 --- a/glymur/test/test_opj_suite.py +++ b/glymur/test/test_opj_suite.py @@ -4216,7 +4216,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 546) @@ -4313,7 +4314,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[3].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) + self.assertEqual(jp2.box[3].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[3].box[1].precedence, 0) self.assertEqual(jp2.box[3].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[3].box[1].icc_profile['Size'], 13332) @@ -4363,7 +4365,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # enumerated + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) # enumerated self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 1) # JPX exact self.assertEqual(jp2.box[2].box[1].icc_profile['Size'], 414) @@ -7080,7 +7083,8 @@ class TestSuiteDump(unittest.TestCase): # Jp2 Header # Colour specification - self.assertEqual(jp2.box[2].box[1].method, glymur.core.RESTRICTED_ICC_PROFILE) # res icc + self.assertEqual(jp2.box[2].box[1].method, + glymur.core.RESTRICTED_ICC_PROFILE) self.assertEqual(jp2.box[2].box[1].precedence, 0) self.assertEqual(jp2.box[2].box[1].approximation, 0) # JP2 self.assertIsNone(jp2.box[2].box[1].icc_profile) diff --git a/release.txt b/release.txt index 8e1f343..9998e88 100644 --- a/release.txt +++ b/release.txt @@ -22,8 +22,9 @@ | | | | gracefully. | +------------+------------+------------+--------------------------------------+ | Fedora 18 | | X | Ships with 1.5.1. 167 of 445 tests | -| | | | should pass (no OPJ_DATA_ROOT). | +| | | | should pass. | +------------+------------+------------+--------------------------------------+ Pylint on entire package should be at least 0.95. pep8 should be pass cleanly. +Coverage should exceed 95%. From 6e67910211dfcea99c178f9b0d7e7acd46620e2e Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 11 Jul 2013 08:12:20 -0400 Subject: [PATCH 51/54] Platform-specific notes. --- docs/source/detailed_installation.rst | 36 +++++++-------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 9b3cfe0..0ea58b9 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -32,13 +32,16 @@ the openjp2 library. You may create the configuration file as follows:: > openjp2: /opt/openjp2-svn/lib/libopenjp2.so > EOF -That assumes, of course, that you've installed OpenJPEG into +This assumes, of course, that you've installed OpenJPEG into /opt/openjp2-svn on a linux system. You may also substitute **$XDG_CONFIG_HOME** for **$HOME/.config**. -Again, though, the configuration file is not required if you only wish to -read JPEG 2000 files using OpenJPEG version 1.5.1. +You may also include a line for the version 1.5.1 library if you have it installed +in a non-standard place, i.e. :: + [library] + openjp2: /opt/openjp2-svn/lib/libopenjp2.so + openjpeg: /not/the/usual/location/lib/libopenjpeg.so ''''''''''''''''''''''''''''''''''''''''''' Package Management Suggestions for Testing @@ -98,28 +101,6 @@ repositories:: $ pip-python3 install Pillow --user $ export PYTHONPATH=$HOME/.local/lib/python3.3/site-packages:$PYTHONPATH -Raspbian -'''''''' -Yeah, this was the first thing I tried after getting my new Raspberry -Pi hooked up (couldn't help myself :-) Raspbian ships with Python -3.2 and 2.7, so these steps detail working with 2.7. - -Additional required OS packages include:: - - * python-pip - * python-pkg-resources - * python-mock - -You must install contextlib2 via pip, and then you can run at least -a minimal number of tests. To attempt to run more of the tests, -install the following debs:: - - * python-dev - * python-matplotlib - -and then install Pillow via pip. The tests take about 30 minutes to run, with -one unexpected failure as of the time of writing. - Fedora 17 ''''''''' Fedora 17 ships with Python 3.2 and 2.7, but OpenJPEG is only at version 1.4, @@ -156,8 +137,9 @@ Windows ------- The only configuration I've tested is Python(xy), which uses Python 2.7. Python(xy) already comes with numpy, but you will have to install pip and then -contextlib2 as well. This configuration assumes you've installed OpenJPEG -1.5.1. +contextlib2 and mock as well. Both 1.5.1 and the svn development versions of +openjpeg work. + ''''''' Testing From 509f4efdf101ce38273efd10a3e8caa0646b3e32 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 11 Jul 2013 16:20:46 -0400 Subject: [PATCH 52/54] Added Fedora 19 notes. --- docs/source/detailed_installation.rst | 34 ++++++++++++++++++--------- release.txt | 10 ++++---- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 0ea58b9..7666fae 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -7,15 +7,15 @@ Glymur Configuration '''''''''''''''''''''' The default glymur installation process relies upon OpenJPEG version -1.5.1 being properly installed on your system. This will, however, -only give you you basic read capabilities, so if you wish to take -advantage of more of glymur's features, you should compile OpenJPEG as -a shared library from the developmental source that you can retrieve -via subversion. As of this time of writing, svn revision 2345 works. -You should also download the test data for the purpose of configuring -and running OpenJPEG's test suite, check their instructions for all this. -You should set the **OPJ_DATA_ROOT** environment variable for the purpose -of running Glymur's test suite. :: +1.5.1 being properly installed on your system. This will, however, only +give you you basic read capabilities, so if you wish to take advantage +of more of glymur's features, you should compile OpenJPEG as a shared +library (named *openjp2* instead of *openjpeg*) from the developmental +source that you can retrieve via subversion. As of this time of writing, +svn revision 2345 works. You should also download the test data for +the purpose of configuring and running OpenJPEG's test suite, check +their instructions for all this. You should set the **OPJ_DATA_ROOT** +environment variable for the purpose of running Glymur's test suite. :: $ svn co http://openjpeg.googlecode.com/svn/data $ export OPJ_DATA_ROOT=`pwd`/data @@ -75,10 +75,22 @@ development version via SVN *is* supported). Linux ----- +Fedora 19 +''''''''' +Fedora 18 ships with Python 3.3 and all the necessary RPMs are available to +run the maximum number of tests. + + * python3 + * python3-numpy + * python3-setuptools + * python3-matplotlib (for running tests) + * python3-matplotlib-tk (or whichever matplotlib backend you prefer) + * python3-pillow (for running tests) + Fedora 18 ''''''''' -Fedora 18 ships with Python 3.3, so all the necessary RPMs are available to -meet the minimal set of requirements. +Fedora 18 ships with Python 3.3 and the following RPMs are available to +meet the minimal set of requirements for running glymur. * python3 * python3-numpy diff --git a/release.txt b/release.txt index 9998e88..4f2b068 100644 --- a/release.txt +++ b/release.txt @@ -15,15 +15,15 @@ | | | | and OpenJPEG svn. 390 of 450 | | | | | tests should pass. | +------------+------------+------------+--------------------------------------+ -| Raspberry | X | | Ships with only 1.3. Should | -| | | | error out gracefully. | -+------------+------------+------------+--------------------------------------+ -| Fedora 17 | X | | Ships with 1.4. Should error out | -| | | | gracefully. | +| Fedora 19 | | X | Ships with 1.5.1. 390 of 450 tests | +| | | | should pass. | +------------+------------+------------+--------------------------------------+ | Fedora 18 | | X | Ships with 1.5.1. 167 of 445 tests | | | | | should pass. | +------------+------------+------------+--------------------------------------+ +| Fedora 17 | X | | Ships with 1.4. Should error out | +| | | | gracefully. | ++------------+------------+------------+--------------------------------------+ Pylint on entire package should be at least 0.95. pep8 should be pass cleanly. From 621df8e601672b989f74bcbd0c16d80d1511eeaa Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 11 Jul 2013 16:30:15 -0400 Subject: [PATCH 53/54] Last doc update. --- docs/source/detailed_installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/detailed_installation.rst b/docs/source/detailed_installation.rst index 7666fae..d05dae4 100644 --- a/docs/source/detailed_installation.rst +++ b/docs/source/detailed_installation.rst @@ -157,13 +157,13 @@ openjpeg work. Testing ''''''' -If you wish to run the tests (strongly suggested :-), you can either run them +If you wish to run the tests (strongly recommended :-), you can either run them from within python as follows ... :: >>> import glymur >>> glymur.runtests() -or from the unix command line. :: +or from the command line. :: $ cd /to/where/you/unpacked/glymur $ python -m unittest discover From 4efbaaf95af53096428286d0d66de648d399e0e8 Mon Sep 17 00:00:00 2001 From: John Evans Date: Thu, 11 Jul 2013 16:35:47 -0400 Subject: [PATCH 54/54] No longer considered alpha status. --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f8e3fb8..c9ed916 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ clssfrs = ["Programming Language :: Python", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: CPython", "License :: OSI Approved :: MIT License", - "Development Status :: 3 - Alpha", + "Development Status :: 5 - Production/Stable", "Operating System :: MacOS", "Operating System :: POSIX :: Linux", "Operating System :: Microsoft :: Windows :: Windows XP",

@dS)SPbCRSR|gVEQVrEp{tdY>~x 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 z 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