From 6e3996610a01d678a5b1ea27f993e350e1451bb6 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 5 Feb 2024 21:35:38 +0100 Subject: [PATCH 1/4] WIP: Upgrade libE57Format --- libE57Format | 2 +- setup.py | 2 +- src/pye57/libe57_wrapper.cpp | 27 ++++----------------------- tests/test_main.py | 8 ++++---- 4 files changed, 10 insertions(+), 29 deletions(-) diff --git a/libE57Format b/libE57Format index dd7d7d7..f9cc0d2 160000 --- a/libE57Format +++ b/libE57Format @@ -1 +1 @@ -Subproject commit dd7d7d711fa8f6de7017c3f2b2d0b714f1db4908 +Subproject commit f9cc0d2e5f46b0f887e3628c668ae00762e9ccd6 diff --git a/setup.py b/setup.py index bb7fc3b..f05c8c4 100644 --- a/setup.py +++ b/setup.py @@ -107,7 +107,7 @@ def build_extensions(self): ext_modules=ext_modules, packages=["pye57"], package_dir={"": "src"}, - include_package_data=True, +# include_package_data=True, package_data={"pye57": package_data}, extras_require={"test": "pytest"}, license="MIT", diff --git a/src/pye57/libe57_wrapper.cpp b/src/pye57/libe57_wrapper.cpp index beee197..3ea920c 100644 --- a/src/pye57/libe57_wrapper.cpp +++ b/src/pye57/libe57_wrapper.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace py = pybind11; using namespace pybind11::literals; @@ -54,26 +55,6 @@ PYBIND11_MODULE(libe57, m) { m.attr("CHECKSUM_POLICY_SPARSE") = CHECKSUM_POLICY_SPARSE; m.attr("CHECKSUM_POLICY_HALF") = CHECKSUM_POLICY_HALF; m.attr("CHECKSUM_POLICY_ALL") = CHECKSUM_POLICY_ALL; - m.attr("E57_INT8_MIN") = E57_INT8_MIN; - m.attr("E57_INT8_MAX") = E57_INT8_MAX; - m.attr("E57_INT16_MIN") = E57_INT16_MIN; - m.attr("E57_INT16_MAX") = E57_INT16_MAX; - m.attr("E57_INT32_MIN") = E57_INT32_MIN; - m.attr("E57_INT32_MAX") = E57_INT32_MAX; - m.attr("E57_INT64_MIN") = E57_INT64_MIN; - m.attr("E57_INT64_MAX") = E57_INT64_MAX; - m.attr("E57_UINT8_MIN") = E57_UINT8_MIN; - m.attr("E57_UINT8_MAX") = E57_UINT8_MAX; - m.attr("E57_UINT16_MIN") = E57_UINT16_MIN; - m.attr("E57_UINT16_MAX") = E57_UINT16_MAX; - m.attr("E57_UINT32_MIN") = E57_UINT32_MIN; - m.attr("E57_UINT32_MAX") = E57_UINT32_MAX; - m.attr("E57_UINT64_MIN") = E57_UINT64_MIN; - m.attr("E57_UINT64_MAX") = E57_UINT64_MAX; - m.attr("E57_FLOAT_MIN") = E57_FLOAT_MIN; - m.attr("E57_FLOAT_MAX") = E57_FLOAT_MAX; - m.attr("E57_DOUBLE_MIN") = E57_DOUBLE_MIN; - m.attr("E57_DOUBLE_MAX") = E57_DOUBLE_MAX; py::enum_(m, "NodeType") .value("E57_STRUCTURE", NodeType::E57_STRUCTURE) .value("E57_VECTOR", NodeType::E57_VECTOR) @@ -357,7 +338,7 @@ PYBIND11_MODULE(libe57, m) { }); py::class_ cls_IntegerNode(m, "IntegerNode"); - cls_IntegerNode.def(py::init(), "destImageFile"_a, "value"_a=0, "minimum"_a=E57_INT64_MIN, "maximum"_a=E57_INT64_MAX); + cls_IntegerNode.def(py::init(), "destImageFile"_a, "value"_a=0, "minimum"_a=INT64_MIN, "maximum"_a=INT64_MAX); cls_IntegerNode.def("value", &IntegerNode::value); cls_IntegerNode.def("minimum", &IntegerNode::minimum); cls_IntegerNode.def("maximum", &IntegerNode::maximum); @@ -399,7 +380,7 @@ PYBIND11_MODULE(libe57, m) { }); py::class_ cls_FloatNode(m, "FloatNode"); - cls_FloatNode.def(py::init(), "destImageFile"_a, "value"_a=0.0, "precision"_a=E57_DOUBLE, "minimum"_a=E57_DOUBLE_MIN, "maximum"_a=E57_DOUBLE_MAX); + cls_FloatNode.def(py::init(), "destImageFile"_a, "value"_a=0.0, "precision"_a=E57_DOUBLE, "minimum"_a=DBL_MIN, "maximum"_a=DBL_MAX); cls_FloatNode.def("value", &FloatNode::value); cls_FloatNode.def("precision", &FloatNode::precision); cls_FloatNode.def("minimum", &FloatNode::minimum); @@ -497,7 +478,7 @@ PYBIND11_MODULE(libe57, m) { cls_ImageFile.def("writerCount", &ImageFile::writerCount); cls_ImageFile.def("readerCount", &ImageFile::readerCount); cls_ImageFile.def("extensionsAdd", &ImageFile::extensionsAdd, "prefix"_a, "uri"_a); - cls_ImageFile.def("extensionsLookupPrefix", &ImageFile::extensionsLookupPrefix, "prefix"_a, "uri"_a); +// cls_ImageFile.def("extensionsLookupPrefix", &ImageFile::extensionsLookupPrefix, "prefix"_a, "uri"_a); cls_ImageFile.def("extensionsLookupUri", &ImageFile::extensionsLookupUri, "uri"_a, "prefix"_a); cls_ImageFile.def("extensionsCount", &ImageFile::extensionsCount); cls_ImageFile.def("extensionsPrefix", &ImageFile::extensionsPrefix, "index"_a); diff --git a/tests/test_main.py b/tests/test_main.py index 9a1c1b9..1f5a9b1 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -19,7 +19,7 @@ def test_hi(): assert libe57.__doc__ -def test_data(*args): +def sample_data(*args): here = os.path.split(__file__)[0] return os.path.join(here, "test_data", *args) @@ -36,15 +36,15 @@ def delete_retry(path): @pytest.fixture def e57_path(): - return test_data("test.e57") + return sample_data("test.e57") @pytest.fixture def e57_spherical_path(): - return test_data("testSpherical.e57") + return sample_data("testSpherical.e57") @pytest.fixture def temp_e57_write(request): - path = test_data("test_write.e57") + path = sample_data("test_write.e57") request.addfinalizer(lambda: delete_retry(path)) return path From 407b6ddb4fde204d8825989cac4ad1ca03d47547 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Tue, 6 Feb 2024 22:05:54 +0100 Subject: [PATCH 2/4] WIP: Upgrade libE57Format --- src/pye57/e57.py | 2 +- src/pye57/libe57_wrapper.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pye57/e57.py b/src/pye57/e57.py index 4c7205a..67427a7 100644 --- a/src/pye57/e57.py +++ b/src/pye57/e57.py @@ -103,7 +103,7 @@ def write_default_header(self): self.root.set("e57LibraryVersion", libe57.StringNode(imf, libe57.E57_LIBRARY_ID)) self.root.set("coordinateMetadata", libe57.StringNode(imf, "")) creation_date_time = libe57.StructureNode(imf) - creation_date_time.set("dateTimeValue", libe57.FloatNode(imf, 0.0)) + creation_date_time.set("dateTimeValue", libe57.FloatNode(imf, 10.0)) creation_date_time.set("isAtomicClockReferenced", libe57.IntegerNode(imf, 0)) self.root.set("creationDateTime", creation_date_time) self.root.set("data3D", libe57.VectorNode(imf, True)) diff --git a/src/pye57/libe57_wrapper.cpp b/src/pye57/libe57_wrapper.cpp index 3ea920c..f15b5f8 100644 --- a/src/pye57/libe57_wrapper.cpp +++ b/src/pye57/libe57_wrapper.cpp @@ -380,7 +380,7 @@ PYBIND11_MODULE(libe57, m) { }); py::class_ cls_FloatNode(m, "FloatNode"); - cls_FloatNode.def(py::init(), "destImageFile"_a, "value"_a=0.0, "precision"_a=E57_DOUBLE, "minimum"_a=DBL_MIN, "maximum"_a=DBL_MAX); + cls_FloatNode.def(py::init(), "destImageFile"_a, "value"_a=0.0, "precision"_a=E57_DOUBLE, "minimum"_a=-DBL_MAX, "maximum"_a=DBL_MAX); cls_FloatNode.def("value", &FloatNode::value); cls_FloatNode.def("precision", &FloatNode::precision); cls_FloatNode.def("minimum", &FloatNode::minimum); From c7711d4b6f89067ddad60ab750be7400d460d0d9 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Tue, 6 Feb 2024 22:30:06 +0100 Subject: [PATCH 3/4] WIP: Upgrade libE57Format to v 3.1.1 --- libE57Format | 2 +- src/pye57/e57.py | 2 +- tests/test_main.py | 17 ----------------- 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/libE57Format b/libE57Format index f9cc0d2..1914b8e 160000 --- a/libE57Format +++ b/libE57Format @@ -1 +1 @@ -Subproject commit f9cc0d2e5f46b0f887e3628c668ae00762e9ccd6 +Subproject commit 1914b8ea972251d3bb49a33828497dde683205d9 diff --git a/src/pye57/e57.py b/src/pye57/e57.py index 67427a7..4c7205a 100644 --- a/src/pye57/e57.py +++ b/src/pye57/e57.py @@ -103,7 +103,7 @@ def write_default_header(self): self.root.set("e57LibraryVersion", libe57.StringNode(imf, libe57.E57_LIBRARY_ID)) self.root.set("coordinateMetadata", libe57.StringNode(imf, "")) creation_date_time = libe57.StructureNode(imf) - creation_date_time.set("dateTimeValue", libe57.FloatNode(imf, 10.0)) + creation_date_time.set("dateTimeValue", libe57.FloatNode(imf, 0.0)) creation_date_time.set("isAtomicClockReferenced", libe57.IntegerNode(imf, 0)) self.root.set("creationDateTime", creation_date_time) self.root.set("data3D", libe57.VectorNode(imf, True)) diff --git a/tests/test_main.py b/tests/test_main.py index 1f5a9b1..a2804a8 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -6,7 +6,6 @@ import pye57 from pye57 import libe57 -from pye57.utils import get_fields try: from exceptions import WindowsError @@ -62,22 +61,6 @@ def test_constants(): assert libe57.CHECKSUM_POLICY_SPARSE == 25 assert libe57.CHECKSUM_POLICY_HALF == 50 assert libe57.CHECKSUM_POLICY_ALL == 100 - assert libe57.E57_INT8_MIN == -128 - assert libe57.E57_INT8_MAX == 127 - assert libe57.E57_INT16_MIN == -32768 - assert libe57.E57_INT16_MAX == 32767 - assert libe57.E57_INT32_MIN == -2147483647 - 1 - assert libe57.E57_INT32_MAX == 2147483647 - assert libe57.E57_INT64_MIN == -9223372036854775807 - 1 - assert libe57.E57_INT64_MAX == 9223372036854775807 - assert libe57.E57_UINT8_MIN == 0 - assert libe57.E57_UINT8_MAX == 255 - assert libe57.E57_UINT16_MIN == 0 - assert libe57.E57_UINT16_MAX == 65535 - assert libe57.E57_UINT32_MIN == 0 - assert libe57.E57_UINT32_MAX == 4294967295 - assert libe57.E57_UINT64_MIN == 0 - assert libe57.E57_UINT64_MAX == 18446744073709551615 def test_open_imagefile(e57_path): From ec0a82d2e19db2fa9b3ee5ce362a03fe68be35e6 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Tue, 12 Mar 2024 21:29:28 +0100 Subject: [PATCH 4/4] build: Upgrade libE57Format to v 3.1.1 --- pyproject.toml | 1 - src/pye57/__version__.py | 2 +- src/pye57/libe57_wrapper.cpp | 64 +++++++++++++++++++++++++----------- tests/test_main.py | 16 +++++++++ 4 files changed, 61 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4160815..1014a4a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,5 +15,4 @@ build-backend = "setuptools.build_meta" # before-all = "powershell scripts/install_xerces_c.ps1" test-requires = "pytest" build = "cp*-manylinux_x86_64 cp*-win_amd64*" -skip = "cp36*" test-command = "python -m pytest {project}/tests" diff --git a/src/pye57/__version__.py b/src/pye57/__version__.py index f6b7e26..cd1ee63 100644 --- a/src/pye57/__version__.py +++ b/src/pye57/__version__.py @@ -1 +1 @@ -__version__ = "0.4.3" +__version__ = "0.4.4" diff --git a/src/pye57/libe57_wrapper.cpp b/src/pye57/libe57_wrapper.cpp index f15b5f8..3672311 100644 --- a/src/pye57/libe57_wrapper.cpp +++ b/src/pye57/libe57_wrapper.cpp @@ -55,6 +55,27 @@ PYBIND11_MODULE(libe57, m) { m.attr("CHECKSUM_POLICY_SPARSE") = CHECKSUM_POLICY_SPARSE; m.attr("CHECKSUM_POLICY_HALF") = CHECKSUM_POLICY_HALF; m.attr("CHECKSUM_POLICY_ALL") = CHECKSUM_POLICY_ALL; + m.attr("E57_INT8_MIN") = INT8_MIN; + // for some reason INT8_MAX casts to a string not to an int ! + m.attr("E57_INT8_MAX") = 127; + m.attr("E57_INT16_MIN") = INT16_MIN; + m.attr("E57_INT16_MAX") = INT16_MAX; + m.attr("E57_INT32_MIN") = INT32_MIN; + m.attr("E57_INT32_MAX") = INT32_MAX; + m.attr("E57_INT64_MIN") = INT64_MIN; + m.attr("E57_INT64_MAX") = INT64_MAX; + m.attr("E57_UINT8_MIN") = UINT8_MIN; + m.attr("E57_UINT8_MAX") = UINT8_MAX; + m.attr("E57_UINT16_MIN") = UINT16_MIN; + m.attr("E57_UINT16_MAX") = UINT16_MAX; + m.attr("E57_UINT32_MIN") = UINT32_MIN; + m.attr("E57_UINT32_MAX") = UINT32_MAX; + m.attr("E57_UINT64_MIN") = UINT64_MIN; + m.attr("E57_UINT64_MAX") = UINT64_MAX; + m.attr("E57_FLOAT_MIN") = FLOAT_MIN; + m.attr("E57_FLOAT_MAX") = FLOAT_MAX; + m.attr("E57_DOUBLE_MIN") = DOUBLE_MIN; + m.attr("E57_DOUBLE_MAX") = DOUBLE_MAX; py::enum_(m, "NodeType") .value("E57_STRUCTURE", NodeType::E57_STRUCTURE) .value("E57_VECTOR", NodeType::E57_VECTOR) @@ -467,26 +488,29 @@ PYBIND11_MODULE(libe57, m) { return arr; }); - py::class_ cls_ImageFile(m, "ImageFile"); - cls_ImageFile.def(py::init(), "fname"_a, "mode"_a, "checksumPolicy"_a=CHECKSUM_POLICY_ALL); - cls_ImageFile.def("root", &ImageFile::root); - cls_ImageFile.def("close", &ImageFile::close); - cls_ImageFile.def("cancel", &ImageFile::cancel); - cls_ImageFile.def("isOpen", &ImageFile::isOpen); - cls_ImageFile.def("isWritable", &ImageFile::isWritable); - cls_ImageFile.def("fileName", &ImageFile::fileName); - cls_ImageFile.def("writerCount", &ImageFile::writerCount); - cls_ImageFile.def("readerCount", &ImageFile::readerCount); - cls_ImageFile.def("extensionsAdd", &ImageFile::extensionsAdd, "prefix"_a, "uri"_a); -// cls_ImageFile.def("extensionsLookupPrefix", &ImageFile::extensionsLookupPrefix, "prefix"_a, "uri"_a); - cls_ImageFile.def("extensionsLookupUri", &ImageFile::extensionsLookupUri, "uri"_a, "prefix"_a); - cls_ImageFile.def("extensionsCount", &ImageFile::extensionsCount); - cls_ImageFile.def("extensionsPrefix", &ImageFile::extensionsPrefix, "index"_a); - cls_ImageFile.def("extensionsUri", &ImageFile::extensionsUri, "index"_a); - cls_ImageFile.def("isElementNameExtended", &ImageFile::isElementNameExtended, "elementName"_a); - cls_ImageFile.def("elementNameParse", &ImageFile::elementNameParse, "elementName"_a, "prefix"_a, "localPart"_a); - cls_ImageFile.def("checkInvariant", &ImageFile::checkInvariant, "doRecurse"_a=true); - cls_ImageFile.def("__repr__", [](const ImageFile &im) { + py::class_ (m, "ImageFile") + .def(py::init(), "fname"_a, "mode"_a, "checksumPolicy"_a=CHECKSUM_POLICY_ALL) + .def("root", &ImageFile::root) + .def("close", &ImageFile::close) + .def("cancel", &ImageFile::cancel) + .def("isOpen", &ImageFile::isOpen) + .def("isWritable", &ImageFile::isWritable) + .def("fileName", &ImageFile::fileName) + .def("writerCount", &ImageFile::writerCount) + .def("readerCount", &ImageFile::readerCount) + .def("extensionsAdd", &ImageFile::extensionsAdd, "prefix"_a, "uri"_a) +// I couldn't wrap the overloaded function so I call it directly + .def("extensionsLookupPrefix", [](const ImageFile &im, std::string &prefix, std::string &uri) { + return im.extensionsLookupPrefix(prefix, uri); + }, "prefix"_a, "uri"_a) + .def("extensionsLookupUri", &ImageFile::extensionsLookupUri, "uri"_a, "prefix"_a) + .def("extensionsCount", &ImageFile::extensionsCount) + .def("extensionsPrefix", &ImageFile::extensionsPrefix, "index"_a) + .def("extensionsUri", &ImageFile::extensionsUri, "index"_a) + .def("isElementNameExtended", &ImageFile::isElementNameExtended, "elementName"_a) + .def("elementNameParse", &ImageFile::elementNameParse, "elementName"_a, "prefix"_a, "localPart"_a) + .def("checkInvariant", &ImageFile::checkInvariant, "doRecurse"_a=true) + .def("__repr__", [](const ImageFile &im) { return ""; }); diff --git a/tests/test_main.py b/tests/test_main.py index a2804a8..c7d5366 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -61,6 +61,22 @@ def test_constants(): assert libe57.CHECKSUM_POLICY_SPARSE == 25 assert libe57.CHECKSUM_POLICY_HALF == 50 assert libe57.CHECKSUM_POLICY_ALL == 100 + assert libe57.E57_INT8_MIN == -128 + assert libe57.E57_INT8_MAX == 127 + assert libe57.E57_INT16_MIN == -32768 + assert libe57.E57_INT16_MAX == 32767 + assert libe57.E57_INT32_MIN == -2147483647 - 1 + assert libe57.E57_INT32_MAX == 2147483647 + assert libe57.E57_INT64_MIN == -9223372036854775807 - 1 + assert libe57.E57_INT64_MAX == 9223372036854775807 + assert libe57.E57_UINT8_MIN == 0 + assert libe57.E57_UINT8_MAX == 255 + assert libe57.E57_UINT16_MIN == 0 + assert libe57.E57_UINT16_MAX == 65535 + assert libe57.E57_UINT32_MIN == 0 + assert libe57.E57_UINT32_MAX == 4294967295 + assert libe57.E57_UINT64_MIN == 0 + assert libe57.E57_UINT64_MAX == 18446744073709551615 def test_open_imagefile(e57_path):