From b9675696ac757badedead6f54a5c91a469f2d5ab Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 07:18:50 +0100 Subject: [PATCH 01/13] Add additional asserts for readCoordinate tests --- test/unit/tablestest/test_hdfstorage.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index 9ffa71916..7b9c874c8 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -129,20 +129,39 @@ def testModifyRow(self): self.append(hdf, {"a": 1, "b": 2, "c": 3}) self.append(hdf, {"a": 5, "b": 6, "c": 7}) data = hdf.readCoordinates(hdf._stamp, [0, 1], self.current) + assert 1 == data.columns[0].values[0] + assert 5 == data.columns[0].values[1] + assert 2 == data.columns[1].values[0] + assert 6 == data.columns[1].values[1] + assert 3 == data.columns[2].values[0] + assert 7 == data.columns[2].values[1] + data.columns[0].values[0] = 100 data.columns[0].values[1] = 200 data.columns[1].values[0] = 300 data.columns[1].values[1] = 400 hdf.update(hdf._stamp, data) hdf.readCoordinates(hdf._stamp, [0, 1], self.current) + assert 100 == data.columns[0].values[0] + assert 200 == data.columns[0].values[1] + assert 300 == data.columns[1].values[0] + assert 400 == data.columns[1].values[1] + assert 3 == data.columns[2].values[0] + assert 7 == data.columns[2].values[1] hdf.cleanup() def testReadTicket1951(self): hdf = HdfStorage(self.hdfpath(), self.lock) self.init(hdf, True) self.append(hdf, {"a": 1, "b": 2, "c": 3}) - hdf.readCoordinates(hdf._stamp, [0], self.current) - hdf.read(hdf._stamp, [0, 1, 2], 0, 1, self.current) + data = hdf.readCoordinates(hdf._stamp, [0], self.current) + assert 1 == data.columns[0].values[0] + assert 2 == data.columns[1].values[0] + assert 3 == data.columns[2].values[0] + data = hdf.read(hdf._stamp, [0, 1, 2], 0, 1, self.current) + assert 1 == data.columns[0].values[0] + assert 2 == data.columns[1].values[0] + assert 3 == data.columns[2].values[0] hdf.cleanup() def testSorting(self): # Probably shouldn't work From 6ed7978bbac7635c0433d8acd5904da4f3e1e356 Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 07:19:20 +0100 Subject: [PATCH 02/13] Do not mark testMaskColumn as broken --- test/unit/tablestest/test_hdfstorage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index 7b9c874c8..ebad9c125 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -326,7 +326,6 @@ def testStringColWhereUnicode(self): # # ROIs # - @pytest.mark.broken def testMaskColumn(self): hdf = HdfStorage(self.hdfpath(), self.lock) mask = omero.columns.MaskColumnI('mask', 'desc', None) From 9b25c6918f993772f11fabefe3ba80fcf1f8929f Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 07:22:09 +0100 Subject: [PATCH 03/13] Call table.read on MaskColumn --- test/unit/tablestest/test_hdfstorage.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index ebad9c125..b097c558e 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -358,6 +358,8 @@ def testMaskColumn(self): assert 6 == test.w[1] assert 7 == test.h[1] assert [0 == 1, 2, 3, 4], test.bytes[1] + + data = hdf.read(hdf._stamp, [0], 0, 1, self.current) hdf.cleanup() From fe8b863a1a168c79e16336f328dc569fb37e58e2 Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 08:46:18 +0100 Subject: [PATCH 04/13] table.read(): use getsize() API rather than values --- src/omero/hdfstorageV2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omero/hdfstorageV2.py b/src/omero/hdfstorageV2.py index b5c0a13ac..1cd705d90 100644 --- a/src/omero/hdfstorageV2.py +++ b/src/omero/hdfstorageV2.py @@ -593,7 +593,7 @@ def _rowstocols(self, rows, colNumbers, cols): col.fromrows(rows) rv.append(col) if not l: - l = len(col.values) + l = col.getsize() return rv, l @stamped From 179e736d896a2ed694d4736ce1968ae3c7eef379 Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 08:55:45 +0100 Subject: [PATCH 05/13] Fix bytes assert --- test/unit/tablestest/test_hdfstorage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index b097c558e..fb808464a 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -357,7 +357,7 @@ def testMaskColumn(self): assert 5 == test.y[1] assert 6 == test.w[1] assert 7 == test.h[1] - assert [0 == 1, 2, 3, 4], test.bytes[1] + assert [0, 1, 2, 3, 4] == test.bytes[1] data = hdf.read(hdf._stamp, [0], 0, 1, self.current) hdf.cleanup() From 938086ef416fd3f5d7e860d47efcea0672e9b193 Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 09:48:29 +0100 Subject: [PATCH 06/13] Add tests for table.read() output --- test/unit/tablestest/test_hdfstorage.py | 58 +++++++++++++++++-------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index fb808464a..a461d000d 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -129,6 +129,7 @@ def testModifyRow(self): self.append(hdf, {"a": 1, "b": 2, "c": 3}) self.append(hdf, {"a": 5, "b": 6, "c": 7}) data = hdf.readCoordinates(hdf._stamp, [0, 1], self.current) + assert len(data.columns) == 3 assert 1 == data.columns[0].values[0] assert 5 == data.columns[0].values[1] assert 2 == data.columns[1].values[0] @@ -142,6 +143,7 @@ def testModifyRow(self): data.columns[1].values[1] = 400 hdf.update(hdf._stamp, data) hdf.readCoordinates(hdf._stamp, [0, 1], self.current) + assert len(data.columns) == 3 assert 100 == data.columns[0].values[0] assert 200 == data.columns[0].values[1] assert 300 == data.columns[1].values[0] @@ -276,9 +278,18 @@ def testStringCol(self): # Unicode conditions don't work on Python 3 # Fetching should still work though r1 = hdf.readCoordinates(time.time(), [1], self.current) + assert len(r1.columns) == 1 + assert len(r1.columns[0].values) == 1 assert r1.columns[0].size == bytesize assert r1.columns[0].values[0] == "მიკროსკოპის პონი" + r2 = hdf.read(time.time(), [0], 0, 2, self.current) + assert len(r2.columns) == 1 + assert len(r2.columns[0].values) == 2 + assert r2.columns[0].size == bytesize + assert r2.columns[0].values[0] == "foo" + assert r2.columns[0].values[1] == "მიკროსკოპის პონი" + # Doesn't work yet. hdf.cleanup() @@ -340,26 +351,37 @@ def testMaskColumn(self): mask.bytes = [[0], [0, 1, 2, 3, 4]] hdf.append([mask]) data = hdf.readCoordinates(hdf._stamp, [0, 1], self.current) - test = data.columns[0] - assert 1 == test.imageId[0] - assert 2 == test.theZ[0] - assert 3 == test.theT[0] - assert 4 == test.x[0] - assert 5 == test.y[0] - assert 6 == test.w[0] - assert 7 == test.h[0] - assert [0] == test.bytes[0] - - assert 2 == test.imageId[1] - assert 2 == test.theZ[1] - assert 3 == test.theT[1] - assert 4 == test.x[1] - assert 5 == test.y[1] - assert 6 == test.w[1] - assert 7 == test.h[1] - assert [0, 1, 2, 3, 4] == test.bytes[1] + assert len(data.columns) == 1 + assert len(data.columns[0].imageId) == 2 + assert 1 == data.columns[0].imageId[0] + assert 2 == data.columns[0].theZ[0] + assert 3 == data.columns[0].theT[0] + assert 4 == data.columns[0].x[0] + assert 5 == data.columns[0].y[0] + assert 6 == data.columns[0].w[0] + assert 7 == data.columns[0].h[0] + assert [0] == data.columns[0].bytes[0] + + assert 2 == data.columns[0].imageId[1] + assert 2 == data.columns[0].theZ[1] + assert 3 == data.columns[0].theT[1] + assert 4 == data.columns[0].x[1] + assert 5 == data.columns[0].y[1] + assert 6 == data.columns[0].w[1] + assert 7 == data.columns[0].h[1] + assert [0, 1, 2, 3, 4] == data.columns[0].bytes[1] data = hdf.read(hdf._stamp, [0], 0, 1, self.current) + assert len(data.columns) == 1 + assert len(data.columns[0].imageId) == 1 + assert 1 == data.columns[0].imageId[0] + assert 2 == data.columns[0].theZ[0] + assert 3 == data.columns[0].theT[0] + assert 4 == data.columns[0].x[0] + assert 5 == data.columns[0].y[0] + assert 6 == data.columns[0].w[0] + assert 7 == data.columns[0].h[0] + assert [0] == data.columns[0].bytes[0] hdf.cleanup() From 6c27eae0c859c2b6087264a4d5e76408ac0a813e Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 10:55:07 +0100 Subject: [PATCH 07/13] Update hdfv2storage.read to use column.read() API --- src/omero/hdfstorageV2.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/omero/hdfstorageV2.py b/src/omero/hdfstorageV2.py index 1cd705d90..36ddaa7cd 100644 --- a/src/omero/hdfstorageV2.py +++ b/src/omero/hdfstorageV2.py @@ -576,11 +576,12 @@ def readCoordinates(self, stamp, rowNumbers, current): def read(self, stamp, colNumbers, start, stop, current): self.__initcheck() self.__sizecheck(colNumbers, None) - cols = self.cols(None, current) + all_cols = self.cols(None, current) + cols = [all_cols[i] for i in colNumbers] - rows = self._getrows(start, stop) - rv, l = self._rowstocols(rows, colNumbers, cols) - return self._as_data(rv, list(range(start, start + l))) + for col in cols: + col.read(self.__mea, start, stop) + return self._as_data(cols, range(stop - start + 1)) def _getrows(self, start, stop): return self.__mea.read(start, stop) From 146d65d34a889c6af9d6ae97b3d5b8306c86656b Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Thu, 27 May 2021 12:58:17 +0100 Subject: [PATCH 08/13] Add unit test covering different read arguments --- test/unit/tablestest/test_hdfstorage.py | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index a461d000d..7aadf8155 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -334,6 +334,52 @@ def testStringColWhereUnicode(self): # Doesn't work yet. hdf.cleanup() + def testRead(self): + hdf = HdfStorage(self.hdfpath(), self.lock) + cols = [ + omero.columns.LongColumnI('a'), + omero.columns.LongColumnI('b'), + omero.columns.LongColumnI('c')] + hdf.initialize(cols) + cols[0].values = [1, 2, 3] + cols[1].values = [4, 5, 6] + cols[2].values = [7, 8, 9] + hdf.append(cols) + + data = hdf.read(time.time(), [0, 1, 2], 0, 2, self.current) + assert len(data.columns) == 3 + assert len(data.columns[0].values) == 2 + assert data.columns[0].name == 'a' + assert data.columns[0].values[0] == 1 + assert data.columns[0].values[1] == 2 + assert data.columns[1].name == 'b' + assert data.columns[1].values[0] == 4 + assert data.columns[1].values[1] == 5 + assert data.columns[2].name == 'c' + assert data.columns[2].values[0] == 7 + assert data.columns[2].values[1] == 8 + + data = hdf.read(time.time(), [0, 2], 1, 3, self.current) + assert len(data.columns) == 2 + assert len(data.columns[0].values) == 2 + assert data.columns[0].name == 'a' + assert data.columns[0].values[0] == 2 + assert data.columns[0].values[1] == 3 + assert data.columns[1].name == 'c' + assert data.columns[1].values[0] == 8 + assert data.columns[1].values[1] == 9 + + data = hdf.read(time.time(), [1], 1, 2, self.current) + assert len(data.columns) == 1 + assert len(data.columns[0].values) == 1 + assert data.columns[0].name == 'b' + assert data.columns[0].values[0] == 5 + + data = hdf.read(time.time(), [0, 1, 2], 1, 1, self.current) + assert len(data.columns) == 3 + assert len(data.columns[0].values) == 0 + hdf.cleanup() + # # ROIs # From b3199f97786fb855737e78cd058ff0f6aed07bff Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Fri, 28 May 2021 14:26:36 +0100 Subject: [PATCH 09/13] Expand unit test to covering table.read(start, stop) with None values --- test/unit/tablestest/test_hdfstorage.py | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index 7aadf8155..f33190a48 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -375,11 +375,41 @@ def testRead(self): assert data.columns[0].name == 'b' assert data.columns[0].values[0] == 5 + # (start=1, stop=1) should return no rows data = hdf.read(time.time(), [0, 1, 2], 1, 1, self.current) assert len(data.columns) == 3 assert len(data.columns[0].values) == 0 hdf.cleanup() + # (start=None, stop=None) should return all rows + data = hdf.read(time.time(), [0, 1, 2], None, None, self.current) + assert len(data.columns) == 3 + assert len(data.columns[0].values) == 3 + assert data.columns[0].name == 'a' + assert data.columns[0].values[0] == 1 + assert data.columns[0].values[1] == 2 + assert data.columns[0].values[2] == 3 + assert data.columns[1].name == 'b' + assert data.columns[1].values[0] == 4 + assert data.columns[1].values[1] == 5 + assert data.columns[1].values[2] == 6 + assert data.columns[2].name == 'c' + assert data.columns[2].values[0] == 7 + assert data.columns[2].values[1] == 8 + assert data.columns[2].values[2] == 9 + + # (start=0, stop=None) should return one rows + data = hdf.read(time.time(), [0, 1, 2], 1, None, self.current) + assert len(data.columns) == 3 + assert len(data.columns[0].values) == 1 + assert data.columns[0].name == 'a' + assert data.columns[0].values[0] == 2 + assert data.columns[1].name == 'b' + assert data.columns[1].values[0] == 5 + assert data.columns[2].name == 'c' + assert data.columns[2].values[0] == 8 + hdf.cleanup() + # # ROIs # From 25cb4964bd790a0331bd3654727a7bcca959523b Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Fri, 28 May 2021 14:30:09 +0100 Subject: [PATCH 10/13] Fix row numbers returned by HDFStorage.read() --- src/omero/hdfstorageV2.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/omero/hdfstorageV2.py b/src/omero/hdfstorageV2.py index 36ddaa7cd..a821036af 100644 --- a/src/omero/hdfstorageV2.py +++ b/src/omero/hdfstorageV2.py @@ -581,7 +581,14 @@ def read(self, stamp, colNumbers, start, stop, current): for col in cols: col.read(self.__mea, start, stop) - return self._as_data(cols, range(stop - start + 1)) + if start is not None and stop is not None: + rowNumbers = list(range(start, stop)) + elif start is not None and stop is None: + rowNumbers = list(range(start, start + 1)) + elif start is None and stop is None: + rowNumbers = list(range(self.__length())) + + return self._as_data(cols, rowNumbers) def _getrows(self, start, stop): return self.__mea.read(start, stop) From e37d12f2af445fd4f0954c9b9774fb26688b26da Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Fri, 28 May 2021 14:33:09 +0100 Subject: [PATCH 11/13] Also test rowNumbers output --- test/unit/tablestest/test_hdfstorage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index f33190a48..9140aaf49 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -358,6 +358,7 @@ def testRead(self): assert data.columns[2].name == 'c' assert data.columns[2].values[0] == 7 assert data.columns[2].values[1] == 8 + assert data.rowNumbers == [0, 1] data = hdf.read(time.time(), [0, 2], 1, 3, self.current) assert len(data.columns) == 2 @@ -368,18 +369,20 @@ def testRead(self): assert data.columns[1].name == 'c' assert data.columns[1].values[0] == 8 assert data.columns[1].values[1] == 9 + assert data.rowNumbers == [1, 2] data = hdf.read(time.time(), [1], 1, 2, self.current) assert len(data.columns) == 1 assert len(data.columns[0].values) == 1 assert data.columns[0].name == 'b' assert data.columns[0].values[0] == 5 + assert data.rowNumbers == [1] # (start=1, stop=1) should return no rows data = hdf.read(time.time(), [0, 1, 2], 1, 1, self.current) assert len(data.columns) == 3 assert len(data.columns[0].values) == 0 - hdf.cleanup() + assert data.rowNumbers == [] # (start=None, stop=None) should return all rows data = hdf.read(time.time(), [0, 1, 2], None, None, self.current) @@ -397,6 +400,7 @@ def testRead(self): assert data.columns[2].values[0] == 7 assert data.columns[2].values[1] == 8 assert data.columns[2].values[2] == 9 + assert data.rowNumbers == [1, 2, 3] # (start=0, stop=None) should return one rows data = hdf.read(time.time(), [0, 1, 2], 1, None, self.current) @@ -408,6 +412,7 @@ def testRead(self): assert data.columns[1].values[0] == 5 assert data.columns[2].name == 'c' assert data.columns[2].values[0] == 8 + assert data.rowNumbers == [1] hdf.cleanup() # From 2147ffc68b49019bd571fbe0792aaf4a6e95aa0d Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Fri, 28 May 2021 14:35:55 +0100 Subject: [PATCH 12/13] Fix rowNumbers when stop=None and update tests accordingly --- src/omero/hdfstorageV2.py | 2 +- test/unit/tablestest/test_hdfstorage.py | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/omero/hdfstorageV2.py b/src/omero/hdfstorageV2.py index a821036af..c45fbac58 100644 --- a/src/omero/hdfstorageV2.py +++ b/src/omero/hdfstorageV2.py @@ -584,7 +584,7 @@ def read(self, stamp, colNumbers, start, stop, current): if start is not None and stop is not None: rowNumbers = list(range(start, stop)) elif start is not None and stop is None: - rowNumbers = list(range(start, start + 1)) + rowNumbers = list(range(start, self.__length())) elif start is None and stop is None: rowNumbers = list(range(self.__length())) diff --git a/test/unit/tablestest/test_hdfstorage.py b/test/unit/tablestest/test_hdfstorage.py index 9140aaf49..d3ffaa5a8 100755 --- a/test/unit/tablestest/test_hdfstorage.py +++ b/test/unit/tablestest/test_hdfstorage.py @@ -371,6 +371,7 @@ def testRead(self): assert data.columns[1].values[1] == 9 assert data.rowNumbers == [1, 2] + # Reads row 1 data = hdf.read(time.time(), [1], 1, 2, self.current) assert len(data.columns) == 1 assert len(data.columns[0].values) == 1 @@ -378,13 +379,13 @@ def testRead(self): assert data.columns[0].values[0] == 5 assert data.rowNumbers == [1] - # (start=1, stop=1) should return no rows + # Reads no row data = hdf.read(time.time(), [0, 1, 2], 1, 1, self.current) assert len(data.columns) == 3 assert len(data.columns[0].values) == 0 assert data.rowNumbers == [] - # (start=None, stop=None) should return all rows + # Read all rows data = hdf.read(time.time(), [0, 1, 2], None, None, self.current) assert len(data.columns) == 3 assert len(data.columns[0].values) == 3 @@ -400,19 +401,19 @@ def testRead(self): assert data.columns[2].values[0] == 7 assert data.columns[2].values[1] == 8 assert data.columns[2].values[2] == 9 - assert data.rowNumbers == [1, 2, 3] + assert data.rowNumbers == [0, 1, 2] - # (start=0, stop=None) should return one rows - data = hdf.read(time.time(), [0, 1, 2], 1, None, self.current) - assert len(data.columns) == 3 - assert len(data.columns[0].values) == 1 + # Read from row 1 until the end of the table + data = hdf.read(time.time(), [0, 2], 1, None, self.current) + assert len(data.columns) == 2 + assert len(data.columns[0].values) == 2 assert data.columns[0].name == 'a' assert data.columns[0].values[0] == 2 - assert data.columns[1].name == 'b' - assert data.columns[1].values[0] == 5 - assert data.columns[2].name == 'c' - assert data.columns[2].values[0] == 8 - assert data.rowNumbers == [1] + assert data.columns[0].values[1] == 3 + assert data.columns[1].name == 'c' + assert data.columns[1].values[0] == 8 + assert data.columns[1].values[1] == 9 + assert data.rowNumbers == [1, 2] hdf.cleanup() # From 981113537f3841389b7056724bf9b2a67a21ee2b Mon Sep 17 00:00:00 2001 From: Sebastien Besson Date: Fri, 28 May 2021 20:41:57 +0100 Subject: [PATCH 13/13] Remove obsolete internal API --- src/omero/hdfstorageV2.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/omero/hdfstorageV2.py b/src/omero/hdfstorageV2.py index c45fbac58..58201b09b 100644 --- a/src/omero/hdfstorageV2.py +++ b/src/omero/hdfstorageV2.py @@ -590,20 +590,6 @@ def read(self, stamp, colNumbers, start, stop, current): return self._as_data(cols, rowNumbers) - def _getrows(self, start, stop): - return self.__mea.read(start, stop) - - def _rowstocols(self, rows, colNumbers, cols): - l = 0 - rv = [] - for i in colNumbers: - col = cols[i] - col.fromrows(rows) - rv.append(col) - if not l: - l = col.getsize() - return rv, l - @stamped def slice(self, stamp, colNumbers, rowNumbers, current): self.__initcheck()