pye57 0.4.15__tar.gz → 0.4.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pye57 might be problematic. Click here for more details.

Files changed (169) hide show
  1. {pye57-0.4.15/src/pye57.egg-info → pye57-0.4.17}/PKG-INFO +21 -8
  2. {pye57-0.4.15 → pye57-0.4.17}/README.md +4 -4
  3. {pye57-0.4.15 → pye57-0.4.17}/setup.py +3 -2
  4. pye57-0.4.17/src/pye57/__version__.py +1 -0
  5. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/e57.py +20 -4
  6. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/libe57_wrapper.cpp +10 -5
  7. {pye57-0.4.15 → pye57-0.4.17/src/pye57.egg-info}/PKG-INFO +21 -8
  8. {pye57-0.4.15 → pye57-0.4.17}/tests/test_main.py +32 -0
  9. pye57-0.4.15/src/pye57/__version__.py +0 -1
  10. {pye57-0.4.15 → pye57-0.4.17}/LICENSE +0 -0
  11. {pye57-0.4.15 → pye57-0.4.17}/MANIFEST.in +0 -0
  12. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/LICENSE-MIT.md +0 -0
  13. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/LICENSE.md +0 -0
  14. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/README.md +0 -0
  15. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/extern/CRCpp/LICENSE +0 -0
  16. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/extern/CRCpp/README.md +0 -0
  17. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/extern/CRCpp/inc/CRC.h +0 -0
  18. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57Exception.h +0 -0
  19. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57Format.h +0 -0
  20. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57SimpleData.h +0 -0
  21. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57SimpleReader.h +0 -0
  22. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57SimpleWriter.h +0 -0
  23. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/include/E57Version.h +0 -0
  24. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ASTMVersion.h +0 -0
  25. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/BlobNode.cpp +0 -0
  26. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/BlobNodeImpl.cpp +0 -0
  27. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/BlobNodeImpl.h +0 -0
  28. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CheckedFile.cpp +0 -0
  29. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CheckedFile.h +0 -0
  30. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Common.cpp +0 -0
  31. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Common.h +0 -0
  32. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorNode.cpp +0 -0
  33. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorNodeImpl.cpp +0 -0
  34. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorNodeImpl.h +0 -0
  35. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorReader.cpp +0 -0
  36. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorReaderImpl.cpp +0 -0
  37. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorReaderImpl.h +0 -0
  38. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorWriter.cpp +0 -0
  39. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorWriterImpl.cpp +0 -0
  40. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/CompressedVectorWriterImpl.h +0 -0
  41. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/DecodeChannel.cpp +0 -0
  42. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/DecodeChannel.h +0 -0
  43. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Decoder.cpp +0 -0
  44. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Decoder.h +0 -0
  45. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57Exception.cpp +0 -0
  46. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57SimpleData.cpp +0 -0
  47. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57SimpleReader.cpp +0 -0
  48. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57SimpleWriter.cpp +0 -0
  49. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57Version.cpp +0 -0
  50. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57XmlParser.cpp +0 -0
  51. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/E57XmlParser.h +0 -0
  52. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Encoder.cpp +0 -0
  53. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Encoder.h +0 -0
  54. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/FloatNode.cpp +0 -0
  55. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/FloatNodeImpl.cpp +0 -0
  56. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/FloatNodeImpl.h +0 -0
  57. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ImageFile.cpp +0 -0
  58. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ImageFileImpl.cpp +0 -0
  59. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ImageFileImpl.h +0 -0
  60. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/IntegerNode.cpp +0 -0
  61. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/IntegerNodeImpl.cpp +0 -0
  62. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/IntegerNodeImpl.h +0 -0
  63. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Node.cpp +0 -0
  64. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/NodeImpl.cpp +0 -0
  65. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/NodeImpl.h +0 -0
  66. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Packet.cpp +0 -0
  67. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/Packet.h +0 -0
  68. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ReaderImpl.cpp +0 -0
  69. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ReaderImpl.h +0 -0
  70. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ScaledIntegerNode.cpp +0 -0
  71. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ScaledIntegerNodeImpl.cpp +0 -0
  72. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/ScaledIntegerNodeImpl.h +0 -0
  73. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/SectionHeaders.cpp +0 -0
  74. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/SectionHeaders.h +0 -0
  75. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/SourceDestBuffer.cpp +0 -0
  76. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/SourceDestBufferImpl.cpp +0 -0
  77. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/SourceDestBufferImpl.h +0 -0
  78. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StringFunctions.cpp +0 -0
  79. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StringFunctions.h +0 -0
  80. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StringNode.cpp +0 -0
  81. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StringNodeImpl.cpp +0 -0
  82. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StringNodeImpl.h +0 -0
  83. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StructureNode.cpp +0 -0
  84. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StructureNodeImpl.cpp +0 -0
  85. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/StructureNodeImpl.h +0 -0
  86. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/VectorNode.cpp +0 -0
  87. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/VectorNodeImpl.cpp +0 -0
  88. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/VectorNodeImpl.h +0 -0
  89. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/WriterImpl.cpp +0 -0
  90. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/src/WriterImpl.h +0 -0
  91. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/README.md +0 -0
  92. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/LICENSE +0 -0
  93. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/README.md +0 -0
  94. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/README.md +0 -0
  95. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/docs/README.md +0 -0
  96. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-actions.h +0 -0
  97. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-cardinalities.h +0 -0
  98. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-function-mocker.h +0 -0
  99. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-matchers.h +0 -0
  100. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-more-actions.h +0 -0
  101. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-more-matchers.h +0 -0
  102. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-nice-strict.h +0 -0
  103. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock-spec-builders.h +0 -0
  104. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/gmock.h +0 -0
  105. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/custom/README.md +0 -0
  106. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h +0 -0
  107. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/custom/gmock-matchers.h +0 -0
  108. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/custom/gmock-port.h +0 -0
  109. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h +0 -0
  110. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/gmock-port.h +0 -0
  111. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/include/gmock/internal/gmock-pp.h +0 -0
  112. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/test/gmock-matchers_test.h +0 -0
  113. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googlemock/test/gmock_link_test.h +0 -0
  114. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/README.md +0 -0
  115. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/docs/README.md +0 -0
  116. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-assertion-result.h +0 -0
  117. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-death-test.h +0 -0
  118. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-matchers.h +0 -0
  119. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-message.h +0 -0
  120. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-param-test.h +0 -0
  121. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-printers.h +0 -0
  122. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-spi.h +0 -0
  123. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-test-part.h +0 -0
  124. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest-typed-test.h +0 -0
  125. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest.h +0 -0
  126. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest_pred_impl.h +0 -0
  127. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/gtest_prod.h +0 -0
  128. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/custom/README.md +0 -0
  129. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/custom/gtest-port.h +0 -0
  130. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/custom/gtest-printers.h +0 -0
  131. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/custom/gtest.h +0 -0
  132. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h +0 -0
  133. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-filepath.h +0 -0
  134. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-internal.h +0 -0
  135. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-param-util.h +0 -0
  136. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-port-arch.h +0 -0
  137. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-port.h +0 -0
  138. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-string.h +0 -0
  139. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/include/gtest/internal/gtest-type-util.h +0 -0
  140. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/samples/prime_tables.h +0 -0
  141. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/samples/sample1.h +0 -0
  142. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/samples/sample2.h +0 -0
  143. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/samples/sample3-inl.h +0 -0
  144. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/samples/sample4.h +0 -0
  145. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/src/gtest-internal-inl.h +0 -0
  146. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/test/googletest-param-test-test.h +0 -0
  147. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/test/gtest-typed-test_test.h +0 -0
  148. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/extern/googletest/googletest/test/production.h +0 -0
  149. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/include/Helpers.h +0 -0
  150. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/include/RandomNum.h +0 -0
  151. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/include/TestData.h +0 -0
  152. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/RandomNum.cpp +0 -0
  153. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/TestData.cpp +0 -0
  154. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/main.cpp +0 -0
  155. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/test_SimpleData.cpp +0 -0
  156. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/test_SimpleReader.cpp +0 -0
  157. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/test_SimpleWriter.cpp +0 -0
  158. {pye57-0.4.15 → pye57-0.4.17}/libE57Format/test/src/test_StringFunctions.cpp +0 -0
  159. {pye57-0.4.15 → pye57-0.4.17}/pyproject.toml +0 -0
  160. {pye57-0.4.15 → pye57-0.4.17}/setup.cfg +0 -0
  161. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/__init__.py +0 -0
  162. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/exception.py +0 -0
  163. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/scan_header.py +0 -0
  164. {pye57-0.4.15 → pye57-0.4.17}/src/pye57/utils.py +0 -0
  165. {pye57-0.4.15 → pye57-0.4.17}/src/pye57.egg-info/SOURCES.txt +0 -0
  166. {pye57-0.4.15 → pye57-0.4.17}/src/pye57.egg-info/dependency_links.txt +0 -0
  167. {pye57-0.4.15 → pye57-0.4.17}/src/pye57.egg-info/not-zip-safe +0 -0
  168. {pye57-0.4.15 → pye57-0.4.17}/src/pye57.egg-info/requires.txt +0 -0
  169. {pye57-0.4.15 → pye57-0.4.17}/src/pye57.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pye57
3
- Version: 0.4.15
3
+ Version: 0.4.17
4
4
  Summary: Python .e57 files reader/writer
5
5
  Home-page: https://www.github.com/davidcaron/pye57
6
6
  Author: David Caron
@@ -11,20 +11,33 @@ License: MIT
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Programming Language :: Python
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Programming Language :: Python :: 3.13
20
19
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
- Requires-Python: >=3.8
20
+ Requires-Python: >=3.9
22
21
  Description-Content-Type: text/markdown
23
22
  License-File: LICENSE
24
23
  Requires-Dist: numpy
25
24
  Requires-Dist: pyquaternion
26
25
  Provides-Extra: test
27
26
  Requires-Dist: pytest; extra == "test"
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license
34
+ Dynamic: license-file
35
+ Dynamic: maintainer
36
+ Dynamic: maintainer-email
37
+ Dynamic: provides-extra
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
28
41
 
29
42
 
30
43
  # pye57
@@ -68,10 +81,10 @@ assert isinstance(data["columnIndex"], np.ndarray)
68
81
  data_raw = e57.read_scan_raw(0)
69
82
 
70
83
  # writing is also possible, but only using raw data for now
71
- e57_write = pye57.E57("e57_file_write.e57", mode='w')
72
- e57_write.write_scan_raw(data_raw)
73
- # you can specify a header to copy information from
74
- e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
84
+ with pye57.E57("e57_file_write.e57", mode='w') as e57_write:
85
+ e57_write.write_scan_raw(data_raw)
86
+ # you can specify a header to copy information from
87
+ e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
75
88
 
76
89
  # the ScanHeader object wraps most of the scan information:
77
90
  header = e57.get_header(0)
@@ -39,10 +39,10 @@ assert isinstance(data["columnIndex"], np.ndarray)
39
39
  data_raw = e57.read_scan_raw(0)
40
40
 
41
41
  # writing is also possible, but only using raw data for now
42
- e57_write = pye57.E57("e57_file_write.e57", mode='w')
43
- e57_write.write_scan_raw(data_raw)
44
- # you can specify a header to copy information from
45
- e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
42
+ with pye57.E57("e57_file_write.e57", mode='w') as e57_write:
43
+ e57_write.write_scan_raw(data_raw)
44
+ # you can specify a header to copy information from
45
+ e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
46
46
 
47
47
  # the ScanHeader object wraps most of the scan information:
48
48
  header = e57.get_header(0)
@@ -90,12 +90,14 @@ class BuildExt(build_ext):
90
90
  opts.append("-DCRCPP_USE_CPP11")
91
91
  opts.append("-DCRCPP_BRANCHLESS")
92
92
  opts.append("-Wno-unused-variable")
93
+ opts.append("-DE57_ENABLE_DIAGNOSTIC_OUTPUT")
93
94
  elif ct == "msvc":
94
95
  opts.append(f'/DVERSION_INFO="{version}"')
95
96
  opts.append(rf'/DREVISION_ID="\"{revision_id}\""')
96
97
  opts.append("/DCRCPP_USE_CPP11")
97
98
  opts.append("/DCRCPP_BRANCHLESS")
98
99
  opts.append("/DWINDOWS")
100
+ opts.append("/DE57_ENABLE_DIAGNOSTIC_OUTPUT")
99
101
  for ext in self.extensions:
100
102
  ext.extra_compile_args = opts
101
103
 
@@ -132,7 +134,6 @@ setup(
132
134
  "License :: OSI Approved :: MIT License",
133
135
  "Programming Language :: Python",
134
136
  "Programming Language :: Python :: 3",
135
- "Programming Language :: Python :: 3.8",
136
137
  "Programming Language :: Python :: 3.9",
137
138
  "Programming Language :: Python :: 3.10",
138
139
  "Programming Language :: Python :: 3.11",
@@ -142,5 +143,5 @@ setup(
142
143
  ],
143
144
  cmdclass={"build_ext": BuildExt},
144
145
  zip_safe=False,
145
- python_requires=">=3.8",
146
+ python_requires=">=3.9",
146
147
  )
@@ -0,0 +1 @@
1
+ __version__ = "0.4.17"
@@ -110,6 +110,11 @@ class E57:
110
110
  self.root.set("images2D", libe57.VectorNode(imf, True))
111
111
 
112
112
  def make_buffer(self, field_name, capacity, do_conversion=True, do_scaling=True):
113
+ # now this exception should never get hit through read_scan or read_scan_raw
114
+ # for read_scan, the headers are constructed, so they should all be supported
115
+ # for read_scan_raw, it now filters out the unsupported headers
116
+ # however, if make_buffer or make_buffers gets called, an unsupported field name could be passed in directly
117
+ # if we don't want users calling them, maybe we could make them private, and this would be an assertion
113
118
  if field_name not in SUPPORTED_POINT_FIELDS:
114
119
  raise ValueError("Unsupported point field: %s" % field_name)
115
120
 
@@ -131,11 +136,22 @@ class E57:
131
136
  buffers.append(b)
132
137
  return data, buffers
133
138
 
134
- def read_scan_raw(self, index) -> Dict:
139
+ def read_scan_raw(self, index, ignore_unsupported_fields=False) -> Dict:
135
140
  header = self.get_header(index)
141
+ supported_point_fields = []
142
+ unsupported_point_fields = []
143
+ for field in header.point_fields:
144
+ if field in SUPPORTED_POINT_FIELDS:
145
+ supported_point_fields.append(field)
146
+ else:
147
+ unsupported_point_fields.append(field)
148
+ if unsupported_point_fields != [] and not ignore_unsupported_fields:
149
+ raise ValueError("Unsupported point fields: %s.\n"
150
+ "Consider using 'ignore_unsupported_fields' to skip them." % unsupported_point_fields)
151
+ # could it call make_buffers instead, it looks like the code's identical
136
152
  data = {}
137
153
  buffers = libe57.VectorSourceDestBuffer()
138
- for field in header.point_fields:
154
+ for field in supported_point_fields:
139
155
  np_array, buffer = self.make_buffer(field, header.point_count)
140
156
  data[field] = np_array
141
157
  buffers.append(buffer)
@@ -376,9 +392,9 @@ class E57:
376
392
  max_row = np.max(data["rowIndex"])
377
393
  min_col = np.min(data["columnIndex"])
378
394
  max_col = np.max(data["columnIndex"])
379
- points_prototype.set("rowIndex", libe57.IntegerNode(self.image_file, 0, min_row, max_row))
395
+ points_prototype.set("rowIndex", libe57.IntegerNode(self.image_file, min_row, min_row, max_row))
380
396
  field_names.append("rowIndex")
381
- points_prototype.set("columnIndex", libe57.IntegerNode(self.image_file, 0, min_col, max_col))
397
+ points_prototype.set("columnIndex", libe57.IntegerNode(self.image_file, min_col, min_col, max_col))
382
398
  field_names.append("columnIndex")
383
399
 
384
400
  if "cartesianInvalidState" in data:
@@ -7,6 +7,8 @@
7
7
  #include <E57Format.h>
8
8
  #include <E57Version.h>
9
9
  #include <ASTMVersion.h>
10
+ #include <sstream>
11
+ #include <string.h>
10
12
 
11
13
  namespace py = pybind11;
12
14
  using namespace pybind11::literals;
@@ -40,11 +42,14 @@ PYBIND11_MODULE(libe57, m) {
40
42
 
41
43
  static py::exception<E57Exception> exc(m, "E57Exception");
42
44
  py::register_exception_translator([](std::exception_ptr p) {
43
- try {
44
- if (p) std::rethrow_exception(p);
45
- } catch (const E57Exception &e) {
46
- exc(Utilities::errorCodeToString(e.errorCode()).c_str());
47
- }
45
+ try {
46
+ if (p) std::rethrow_exception(p);
47
+ } catch (const E57Exception &e) {
48
+ std::stringstream ss;
49
+ e.report(__FILE__, __LINE__, __FUNCTION__, ss);
50
+ std::string output = e.errorStr() + std::string("\n\n") + ss.str();
51
+ exc(output.c_str());
52
+ }
48
53
  });
49
54
 
50
55
  m.attr("E57_FORMAT_MAJOR") = E57_FORMAT_MAJOR;
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pye57
3
- Version: 0.4.15
3
+ Version: 0.4.17
4
4
  Summary: Python .e57 files reader/writer
5
5
  Home-page: https://www.github.com/davidcaron/pye57
6
6
  Author: David Caron
@@ -11,20 +11,33 @@ License: MIT
11
11
  Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Programming Language :: Python
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Programming Language :: Python :: 3.13
20
19
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
- Requires-Python: >=3.8
20
+ Requires-Python: >=3.9
22
21
  Description-Content-Type: text/markdown
23
22
  License-File: LICENSE
24
23
  Requires-Dist: numpy
25
24
  Requires-Dist: pyquaternion
26
25
  Provides-Extra: test
27
26
  Requires-Dist: pytest; extra == "test"
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: description-content-type
32
+ Dynamic: home-page
33
+ Dynamic: license
34
+ Dynamic: license-file
35
+ Dynamic: maintainer
36
+ Dynamic: maintainer-email
37
+ Dynamic: provides-extra
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
28
41
 
29
42
 
30
43
  # pye57
@@ -68,10 +81,10 @@ assert isinstance(data["columnIndex"], np.ndarray)
68
81
  data_raw = e57.read_scan_raw(0)
69
82
 
70
83
  # writing is also possible, but only using raw data for now
71
- e57_write = pye57.E57("e57_file_write.e57", mode='w')
72
- e57_write.write_scan_raw(data_raw)
73
- # you can specify a header to copy information from
74
- e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
84
+ with pye57.E57("e57_file_write.e57", mode='w') as e57_write:
85
+ e57_write.write_scan_raw(data_raw)
86
+ # you can specify a header to copy information from
87
+ e57_write.write_scan_raw(data_raw, scan_header=e57.get_header(0))
75
88
 
76
89
  # the ScanHeader object wraps most of the scan information:
77
90
  header = e57.get_header(0)
@@ -49,6 +49,10 @@ def e57_with_data_and_images_path():
49
49
  # From http://www.libe57.org/data.html
50
50
  return sample_data("pumpAVisualReferenceImage.e57")
51
51
 
52
+ @pytest.fixture
53
+ def e57_with_normals_path():
54
+ # created using Python's open3d and CloudCompare
55
+ return sample_data("testWithNormals.e57")
52
56
 
53
57
  @pytest.fixture
54
58
  def temp_e57_write(request):
@@ -160,6 +164,13 @@ def test_unsupported_point_field(temp_e57_write):
160
164
  f.write_scan_raw(data)
161
165
 
162
166
 
167
+ def test_ignore_unsupported_fields(e57_with_normals_path):
168
+ e57 = pye57.E57(e57_with_normals_path)
169
+ with pytest.raises(ValueError):
170
+ e57.read_scan_raw(0)
171
+ e57.read_scan_raw(0, ignore_unsupported_fields=True)
172
+
173
+
163
174
  def test_source_dest_buffers_raises(e57_path):
164
175
  f = libe57.ImageFile(e57_path, "r")
165
176
  capacity = 1000
@@ -419,3 +430,24 @@ def test_clone_e57(e57_with_data_and_images_path, temp_e57_write):
419
430
 
420
431
  in_image.close()
421
432
  out_image.close()
433
+
434
+
435
+ def test_write_e57_with_rowindex_and_columnindex_omiting_low_values(temp_e57_write):
436
+
437
+ with pye57.E57(temp_e57_write, mode='w') as e57:
438
+ # set some test points with missing row and column 0 (so np.min of it in write_scan_raw is larger than 0)
439
+ data_raw = {}
440
+ data_raw["cartesianX"] = np.array([0, 1, 2, 3]).astype(float)
441
+ data_raw["cartesianY"] = np.array([0, 1, 2, 3]).astype(float)
442
+ data_raw["cartesianZ"] = np.array([0, 1, 2, 3]).astype(float)
443
+ data_raw["rowIndex"] = np.array([1, 1, 2, 3])
444
+ data_raw["columnIndex"] = np.array([1, 1, 2, 3])
445
+
446
+ try:
447
+ # the next line will throw without the suggested fix
448
+ e57.write_scan_raw(data_raw, name='test_output_with_row_and_column')
449
+ except pye57.libe57.E57Exception as ex:
450
+ print(ex)
451
+ assert False
452
+
453
+ assert os.path.isfile(temp_e57_write)
@@ -1 +0,0 @@
1
- __version__ = "0.4.15"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes