Glymur 0.14.2__tar.gz → 0.14.5__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.
Files changed (183) hide show
  1. {glymur-0.14.2 → glymur-0.14.5}/.circleci/config.yml +14 -10
  2. {glymur-0.14.2 → glymur-0.14.5}/CHANGES.txt +12 -0
  3. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/PKG-INFO +2 -1
  4. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/SOURCES.txt +6 -6
  5. {glymur-0.14.2 → glymur-0.14.5}/PKG-INFO +2 -1
  6. {glymur-0.14.2 → glymur-0.14.5}/appveyor.yml +7 -1
  7. glymur-0.14.2/ci/travis-311-no-gdal.yaml → glymur-0.14.5/ci/ci-311.yaml +3 -3
  8. glymur-0.14.2/ci/travis-313.yaml → glymur-0.14.5/ci/ci-313.yaml +4 -3
  9. glymur-0.14.2/ci/travis-311-no-opj.yaml → glymur-0.14.5/ci/ci-314-no-gdal.yaml +5 -5
  10. glymur-0.14.5/ci/ci-314-no-opj.yaml +13 -0
  11. glymur-0.14.5/ci/ci-314.yaml +14 -0
  12. {glymur-0.14.2 → glymur-0.14.5}/ci/install.ps1 +2 -0
  13. {glymur-0.14.2 → glymur-0.14.5}/docs/source/conf.py +1 -1
  14. {glymur-0.14.2 → glymur-0.14.5}/docs/source/introduction.rst +1 -1
  15. glymur-0.14.5/docs/source/whatsnew/0.14.rst +59 -0
  16. {glymur-0.14.2 → glymur-0.14.5}/glymur/_core_converter.py +2 -6
  17. {glymur-0.14.2 → glymur-0.14.5}/glymur/jp2box.py +1 -1
  18. {glymur-0.14.2 → glymur-0.14.5}/glymur/jp2k.py +7 -6
  19. {glymur-0.14.2 → glymur-0.14.5}/glymur/jp2kr.py +6 -10
  20. {glymur-0.14.2 → glymur-0.14.5}/glymur/options.py +3 -4
  21. {glymur-0.14.2 → glymur-0.14.5}/glymur/version.py +2 -2
  22. {glymur-0.14.2 → glymur-0.14.5}/pyproject.toml +2 -1
  23. {glymur-0.14.2 → glymur-0.14.5}/tests/fixtures.py +7 -37
  24. {glymur-0.14.2 → glymur-0.14.5}/tests/test_commandline_jpeg2jp2.py +1 -6
  25. {glymur-0.14.2 → glymur-0.14.5}/tests/test_commandline_tiff2jp2.py +1 -1
  26. {glymur-0.14.2 → glymur-0.14.5}/tests/test_config.py +1 -22
  27. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jpeg2jp2.py +0 -5
  28. {glymur-0.14.2 → glymur-0.14.5}/tests/test_threading.py +13 -19
  29. {glymur-0.14.2 → glymur-0.14.5}/tests/test_tiff2jp2.py +1 -1
  30. glymur-0.14.2/azure-pipelines.yml +0 -30
  31. glymur-0.14.2/ci/travis-311.yaml +0 -13
  32. glymur-0.14.2/docs/source/whatsnew/0.14.rst +0 -30
  33. {glymur-0.14.2 → glymur-0.14.5}/.gitignore +0 -0
  34. {glymur-0.14.2 → glymur-0.14.5}/.readthedocs.yaml +0 -0
  35. {glymur-0.14.2 → glymur-0.14.5}/.travis.yml +0 -0
  36. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/dependency_links.txt +0 -0
  37. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/entry_points.txt +0 -0
  38. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/requires.txt +0 -0
  39. {glymur-0.14.2 → glymur-0.14.5}/Glymur.egg-info/top_level.txt +0 -0
  40. {glymur-0.14.2 → glymur-0.14.5}/LICENSE.txt +0 -0
  41. {glymur-0.14.2 → glymur-0.14.5}/MANIFEST.in +0 -0
  42. {glymur-0.14.2 → glymur-0.14.5}/README.md +0 -0
  43. /glymur-0.14.2/ci/travis-312.yaml → /glymur-0.14.5/ci/ci-312.yaml +0 -0
  44. {glymur-0.14.2 → glymur-0.14.5}/ci/doc.yml +0 -0
  45. {glymur-0.14.2 → glymur-0.14.5}/ci/run_script.sh +0 -0
  46. {glymur-0.14.2 → glymur-0.14.5}/ci/run_with_env.cmd +0 -0
  47. {glymur-0.14.2 → glymur-0.14.5}/ci/setup_env.sh +0 -0
  48. {glymur-0.14.2 → glymur-0.14.5}/conftest.py +0 -0
  49. {glymur-0.14.2 → glymur-0.14.5}/docs/Makefile +0 -0
  50. {glymur-0.14.2 → glymur-0.14.5}/docs/make.bat +0 -0
  51. {glymur-0.14.2 → glymur-0.14.5}/docs/requirements.txt +0 -0
  52. {glymur-0.14.2 → glymur-0.14.5}/docs/source/api.rst +0 -0
  53. {glymur-0.14.2 → glymur-0.14.5}/docs/source/detailed_installation.rst +0 -0
  54. {glymur-0.14.2 → glymur-0.14.5}/docs/source/goodstuff_alpha.png +0 -0
  55. {glymur-0.14.2 → glymur-0.14.5}/docs/source/how_do_i.rst +0 -0
  56. {glymur-0.14.2 → glymur-0.14.5}/docs/source/index.rst +0 -0
  57. {glymur-0.14.2 → glymur-0.14.5}/docs/source/roadmap.rst +0 -0
  58. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.10.rst +0 -0
  59. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.11.rst +0 -0
  60. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.12.rst +0 -0
  61. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.13.rst +0 -0
  62. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.5.rst +0 -0
  63. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.6.rst +0 -0
  64. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.7.rst +0 -0
  65. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.8.rst +0 -0
  66. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/0.9.rst +0 -0
  67. {glymur-0.14.2 → glymur-0.14.5}/docs/source/whatsnew/index.rst +0 -0
  68. {glymur-0.14.2 → glymur-0.14.5}/glymur/__init__.py +0 -0
  69. {glymur-0.14.2 → glymur-0.14.5}/glymur/_iccprofile.py +0 -0
  70. {glymur-0.14.2 → glymur-0.14.5}/glymur/codestream.py +0 -0
  71. {glymur-0.14.2 → glymur-0.14.5}/glymur/command_line.py +0 -0
  72. {glymur-0.14.2 → glymur-0.14.5}/glymur/config.py +0 -0
  73. {glymur-0.14.2 → glymur-0.14.5}/glymur/core.py +0 -0
  74. {glymur-0.14.2 → glymur-0.14.5}/glymur/data/__init__.py +0 -0
  75. {glymur-0.14.2 → glymur-0.14.5}/glymur/data/goodstuff.j2k +0 -0
  76. {glymur-0.14.2 → glymur-0.14.5}/glymur/data/heliov.jpx +0 -0
  77. {glymur-0.14.2 → glymur-0.14.5}/glymur/data/nemo.jp2 +0 -0
  78. {glymur-0.14.2 → glymur-0.14.5}/glymur/jpeg.py +0 -0
  79. {glymur-0.14.2 → glymur-0.14.5}/glymur/lib/__init__.py +0 -0
  80. {glymur-0.14.2 → glymur-0.14.5}/glymur/lib/_tiff.py +0 -0
  81. {glymur-0.14.2 → glymur-0.14.5}/glymur/lib/openjp2.py +0 -0
  82. {glymur-0.14.2 → glymur-0.14.5}/glymur/lib/tiff.py +0 -0
  83. {glymur-0.14.2 → glymur-0.14.5}/glymur/tiff.py +0 -0
  84. {glymur-0.14.2 → glymur-0.14.5}/setup.cfg +0 -0
  85. {glymur-0.14.2 → glymur-0.14.5}/tests/__init__.py +0 -0
  86. {glymur-0.14.2 → glymur-0.14.5}/tests/data/__init__.py +0 -0
  87. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/__init__.py +0 -0
  88. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/file1_xml.txt +0 -0
  89. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/file1_xml_box.txt +0 -0
  90. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p0_02.j2k +0 -0
  91. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p0_03.j2k +0 -0
  92. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p0_06.j2k +0 -0
  93. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p1_06.j2k +0 -0
  94. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p1_07.j2k +0 -0
  95. {glymur-0.14.2 → glymur-0.14.5}/tests/data/conformance/p1_07.txt +0 -0
  96. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/__init__.py +0 -0
  97. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/edf_c2_1178956.jp2 +0 -0
  98. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/issue142.j2k +0 -0
  99. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/issue392.jp2 +0 -0
  100. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/issue396.jp2 +0 -0
  101. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/issue438.jp2 +0 -0
  102. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/issue626.j2k +0 -0
  103. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/jph_siz.txt +0 -0
  104. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/oj-ht-byte.jph +0 -0
  105. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/text_GBR.jp2 +0 -0
  106. {glymur-0.14.2 → glymur-0.14.5}/tests/data/from-openjpeg/text_GBR_rreq.txt +0 -0
  107. {glymur-0.14.2 → glymur-0.14.5}/tests/data/geo/0220000800_uuid.dat +0 -0
  108. {glymur-0.14.2 → glymur-0.14.5}/tests/data/geo/__init__.py +0 -0
  109. {glymur-0.14.2 → glymur-0.14.5}/tests/data/geo/gml.xml +0 -0
  110. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/appended_xml_box.txt +0 -0
  111. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/countries.xml +0 -0
  112. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/decompression_parameters_type.txt +0 -0
  113. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/default_compression_parameters_type.txt +0 -0
  114. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/default_progression_order_changes_type.txt +0 -0
  115. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/encoding_declaration.xml +0 -0
  116. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/goodstuff_codestream_header.txt +0 -0
  117. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/goodstuff_with_full_header.txt +0 -0
  118. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue186_progression_order.txt +0 -0
  119. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue398.dat +0 -0
  120. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue405.dat +0 -0
  121. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue549.dat +0 -0
  122. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue555.xmp +0 -0
  123. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/issue982.j2k +0 -0
  124. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/multiple_precinct_size.txt +0 -0
  125. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo.txt +0 -0
  126. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_dump_no_codestream.txt +0 -0
  127. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_dump_no_codestream_no_xml.txt +0 -0
  128. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_dump_no_xml.txt +0 -0
  129. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_dump_short.txt +0 -0
  130. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_with_codestream_header.txt +0 -0
  131. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/nemo_xmp_box.txt +0 -0
  132. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/no_jp2c.jp2 +0 -0
  133. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/sgray.icc +0 -0
  134. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/simple_rdf.txt +0 -0
  135. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/simple_rdf.uuid-box.txt +0 -0
  136. {glymur-0.14.2 → glymur-0.14.5}/tests/data/misc/uint16.j2k +0 -0
  137. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/__init__.py +0 -0
  138. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/astronaut8.tif +0 -0
  139. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/astronaut8_stripped.tif +0 -0
  140. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/astronaut_s_uint16.tif +0 -0
  141. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/astronaut_uint16.tif +0 -0
  142. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/astronaut_ycbcr_jpeg_tiled.tif +0 -0
  143. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/goodstuff_32s.tif +0 -0
  144. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon.tif +0 -0
  145. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon3_partial_last_strip.tif +0 -0
  146. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon3_stripped.tif +0 -0
  147. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon63.tif +0 -0
  148. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon_2x2.tif +0 -0
  149. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/moon_3x3.tif +0 -0
  150. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/stripped.tif +0 -0
  151. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/ycbcr_bg.tif +0 -0
  152. {glymur-0.14.2 → glymur-0.14.5}/tests/data/skimage/ycbcr_stripped.tif +0 -0
  153. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/__init__.py +0 -0
  154. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/albers27-8.tif +0 -0
  155. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/albers27.tif +0 -0
  156. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/basn6a08.tif +0 -0
  157. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/cmyk.tif +0 -0
  158. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/degenerate_geotiff.tif +0 -0
  159. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/flower-separated-planar-08.tif +0 -0
  160. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/ieeefp32.tif +0 -0
  161. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/issue572.tif +0 -0
  162. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/issue678.tif +0 -0
  163. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/uint32.tif +0 -0
  164. {glymur-0.14.2 → glymur-0.14.5}/tests/data/tiff/warning.tif +0 -0
  165. {glymur-0.14.2 → glymur-0.14.5}/tests/test_callbacks.py +0 -0
  166. {glymur-0.14.2 → glymur-0.14.5}/tests/test_cinema.py +0 -0
  167. {glymur-0.14.2 → glymur-0.14.5}/tests/test_codestream.py +0 -0
  168. {glymur-0.14.2 → glymur-0.14.5}/tests/test_colour_specification_box.py +0 -0
  169. {glymur-0.14.2 → glymur-0.14.5}/tests/test_commandline_jp2dump.py +0 -0
  170. {glymur-0.14.2 → glymur-0.14.5}/tests/test_geo.py +0 -0
  171. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2box.py +0 -0
  172. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2box_jpx.py +0 -0
  173. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2box_uuid.py +0 -0
  174. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2box_xml.py +0 -0
  175. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2k.py +0 -0
  176. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2k_writes.py +0 -0
  177. {glymur-0.14.2 → glymur-0.14.5}/tests/test_jp2kr.py +0 -0
  178. {glymur-0.14.2 → glymur-0.14.5}/tests/test_libtiff.py +0 -0
  179. {glymur-0.14.2 → glymur-0.14.5}/tests/test_openjp2.py +0 -0
  180. {glymur-0.14.2 → glymur-0.14.5}/tests/test_printing.py +0 -0
  181. {glymur-0.14.2 → glymur-0.14.5}/tests/test_set_decoded_components.py +0 -0
  182. {glymur-0.14.2 → glymur-0.14.5}/tests/test_slicing.py +0 -0
  183. {glymur-0.14.2 → glymur-0.14.5}/tests/test_warnings.py +0 -0
@@ -6,11 +6,12 @@ workflows:
6
6
  version: 2
7
7
  test:
8
8
  jobs:
9
- - travis-311-no-gdal
10
- - travis-311-no-opj
11
- - travis-311
12
- - travis-312
13
- - travis-313
9
+ - ci-311
10
+ - ci-312
11
+ - ci-313
12
+ - ci-314-no-gdal
13
+ - ci-314-no-opj
14
+ - ci-314
14
15
 
15
16
  test-template: &test-template
16
17
  docker:
@@ -46,17 +47,20 @@ test-template: &test-template
46
47
  pytest --doctest-modules glymur
47
48
 
48
49
  jobs:
49
- travis-311-no-gdal:
50
+ ci-311:
50
51
  <<: *test-template
51
52
 
52
- travis-311-no-opj:
53
+ ci-312:
53
54
  <<: *test-template
54
55
 
55
- travis-311:
56
+ ci-313:
56
57
  <<: *test-template
57
58
 
58
- travis-312:
59
+ ci-314-no-gdal:
59
60
  <<: *test-template
60
61
 
61
- travis-313:
62
+ ci-314-no-opj:
63
+ <<: *test-template
64
+
65
+ ci-314:
62
66
  <<: *test-template
@@ -1,3 +1,15 @@
1
+ Jan 25, 2025 - v0.14.5
2
+ Remove two debugging breakpoints
3
+
4
+ Oct 08, 2025 - v0.14.4
5
+ Qualify on python 3.14
6
+ Add User-Agent header to powershell script for Appveyor
7
+ Remove remaining openjpeg<2.4 artifacts
8
+ Remove explicit testing of numpy 1.26
9
+
10
+ Jun 12, 2025 - v0.14.3
11
+ Fix DeprecationWarning upon import
12
+
1
13
  Jun 12, 2025 - v0.14.2
2
14
  Fix test suite for python 3.14 regular expressions
3
15
  Remove long-since-deprecated Jp2kr.read method
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Glymur
3
- Version: 0.14.2
3
+ Version: 0.14.5
4
4
  Summary: Read and write JPEG 2000 files
5
5
  Author-email: John Evans <jevans667cc@proton.me>
6
6
  License-Expression: MIT
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
15
16
  Classifier: Programming Language :: Python :: Implementation :: CPython
16
17
  Classifier: Intended Audience :: Science/Research
17
18
  Classifier: Operating System :: OS Independent
@@ -6,7 +6,6 @@ LICENSE.txt
6
6
  MANIFEST.in
7
7
  README.md
8
8
  appveyor.yml
9
- azure-pipelines.yml
10
9
  conftest.py
11
10
  pyproject.toml
12
11
  .circleci/config.yml
@@ -16,16 +15,17 @@ Glymur.egg-info/dependency_links.txt
16
15
  Glymur.egg-info/entry_points.txt
17
16
  Glymur.egg-info/requires.txt
18
17
  Glymur.egg-info/top_level.txt
18
+ ci/ci-311.yaml
19
+ ci/ci-312.yaml
20
+ ci/ci-313.yaml
21
+ ci/ci-314-no-gdal.yaml
22
+ ci/ci-314-no-opj.yaml
23
+ ci/ci-314.yaml
19
24
  ci/doc.yml
20
25
  ci/install.ps1
21
26
  ci/run_script.sh
22
27
  ci/run_with_env.cmd
23
28
  ci/setup_env.sh
24
- ci/travis-311-no-gdal.yaml
25
- ci/travis-311-no-opj.yaml
26
- ci/travis-311.yaml
27
- ci/travis-312.yaml
28
- ci/travis-313.yaml
29
29
  docs/Makefile
30
30
  docs/make.bat
31
31
  docs/requirements.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Glymur
3
- Version: 0.14.2
3
+ Version: 0.14.5
4
4
  Summary: Read and write JPEG 2000 files
5
5
  Author-email: John Evans <jevans667cc@proton.me>
6
6
  License-Expression: MIT
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
15
16
  Classifier: Programming Language :: Python :: Implementation :: CPython
16
17
  Classifier: Intended Audience :: Science/Research
17
18
  Classifier: Operating System :: OS Independent
@@ -30,6 +30,12 @@ environment:
30
30
  CONDA_PY: "313"
31
31
  USE_PATH_FOR_GDAL_PYTHON: "YES"
32
32
 
33
+ - CONDA_ROOT: "C:\\Miniconda3_64"
34
+ PYTHON_VERSION: "3.14"
35
+ PYTHON_ARCH: "64"
36
+ CONDA_PY: "314"
37
+ USE_PATH_FOR_GDAL_PYTHON: "YES"
38
+
33
39
  # We always use a 64-bit machine, but can build x86 distributions
34
40
  # with the PYTHON_ARCH variable (which is used by CMD_IN_ENV).
35
41
  platform:
@@ -65,7 +71,7 @@ install:
65
71
  - cmd: conda info -a
66
72
 
67
73
  # create our env
68
- - SET REQ=ci\travis-%CONDA_PY%.yaml
74
+ - SET REQ=ci\ci-%CONDA_PY%.yaml
69
75
  - cmd: echo "installing requirements from %REQ%"
70
76
  - cmd: conda env create --file=%REQ%
71
77
  - cmd: conda list -n glymur
@@ -3,11 +3,11 @@ channels:
3
3
  - conda-forge
4
4
  dependencies:
5
5
  - python=3.11.*
6
- - gdal>=3.7.0,<3.8.0
6
+ - gdal>=3.8.0,<3.9.0
7
7
  - pillow
8
- - libtiff>=4.5.0,<4.6.0
8
+ - libtiff>=4.6.0,<4.7.0
9
9
  - lxml>=5.0
10
- - numpy>=1.26,<2.0
10
+ - numpy>=2.0,<2.1
11
11
  - openjpeg>=2.5
12
12
  - pytest-xdist
13
13
  - scikit-image
@@ -4,10 +4,11 @@ channels:
4
4
  dependencies:
5
5
  - python=3.13.*
6
6
  - gdal>=3.10.0,<3.11.0
7
+ - libgdal-jp2openjpeg
7
8
  - pillow
8
9
  - libtiff>=4.7.0,<4.8.0
9
- - lxml>=5.3.0
10
- - numpy>=2.1
11
- - openjpeg>=2.5
10
+ - lxml>=5.3.0,<6.0.0
11
+ - numpy>=2.1,<2.3.3
12
+ - openjpeg>=2.5.3,<2.5.4
12
13
  - pytest-xdist
13
14
  - scikit-image
@@ -2,12 +2,12 @@ name: glymur
2
2
  channels:
3
3
  - conda-forge
4
4
  dependencies:
5
- - python=3.11.*
6
- - gdal>=3.7.0,<3.8.0
5
+ - python>=3.14.0
7
6
  - pillow
8
- - libtiff>=4.5.0,<4.6.0
9
- - lxml>=5.0
10
- - numpy>=1.26,<2.0
7
+ - libtiff>=4.7.1
8
+ - lxml>=6.0.2
9
+ - numpy>=2.3.3
10
+ - openjpeg>=2.5.4
11
11
  - pip
12
12
  - pytest-xdist
13
13
  - scikit-image
@@ -0,0 +1,13 @@
1
+ name: glymur
2
+ channels:
3
+ - conda-forge
4
+ dependencies:
5
+ - python>=3.14.0
6
+ - gdal>=3.11.0
7
+ - pillow
8
+ - libtiff>=4.7.1
9
+ - lxml>=6.0.2
10
+ - numpy>=2.3.3
11
+ - pip
12
+ - pytest-xdist
13
+ - scikit-image
@@ -0,0 +1,14 @@
1
+ name: glymur
2
+ channels:
3
+ - conda-forge
4
+ dependencies:
5
+ - python>=3.14.0
6
+ - gdal>=3.11.0
7
+ - libgdal-jp2openjpeg
8
+ - pillow
9
+ - libtiff>=4.7.1
10
+ - lxml>=6.0.2
11
+ - numpy>=2.3.3
12
+ - openjpeg>=2.5.4
13
+ - pytest-xdist
14
+ - scikit-image
@@ -7,6 +7,8 @@ $MINICONDA_URL = "http://repo.continuum.io/miniconda/"
7
7
 
8
8
  function DownloadMiniconda ($python_version, $platform_suffix) {
9
9
  $webclient = New-Object System.Net.WebClient
10
+ $webclient.Headers.Add("User-Agent", "Abraxis/1.0")
11
+
10
12
  $filename = "Miniconda3-latest-Windows-" + $platform_suffix + ".exe"
11
13
  $url = $MINICONDA_URL + $filename
12
14
 
@@ -81,7 +81,7 @@ copyright = '2013-2025, John Evans'
81
81
  # The short X.Y version.
82
82
  version = '0.14'
83
83
  # The full version, including alpha/beta/rc tags.
84
- release = '0.14.2'
84
+ release = '0.14.5'
85
85
 
86
86
  # The language for content autogenerated by Sphinx. Refer to documentation
87
87
  # for a list of supported languages.
@@ -13,7 +13,7 @@ Certain optional JP2 boxes can also be written, including XML boxes and
13
13
  XMP UUIDs. There is incomplete support for reading JPX metadata.
14
14
 
15
15
  The current version of glymur is supported on Python versions 3.11,
16
- 3.12, and 3.13. You should have at least version 2.4.0 of OpenJPEG.
16
+ 3.12, 3.13, and 3.14. You should have at least version 2.4.0 of OpenJPEG.
17
17
 
18
18
  For more information about OpenJPEG, please consult http://www.openjpeg.org.
19
19
 
@@ -0,0 +1,59 @@
1
+ ######################
2
+ Changes in glymur 0.14
3
+ ######################
4
+
5
+ *****************
6
+ Changes in 0.14.5
7
+ *****************
8
+
9
+ * Suppress W291 warning from doctests
10
+ * Remove two debugging breakpoints
11
+ * Update CI infrastructure for names
12
+ * Update testing, deprecate python 3.11
13
+ * Use importlib.resources instead of importlib.metadata
14
+ * Remove custom chdir context manager
15
+ * Use sys.version() to determine if anaconda or not on tests
16
+ * Add libgdal-jp2openjpeg to CI
17
+ * Remove broken azure pipelines setup
18
+
19
+ *****************
20
+ Changes in 0.14.4
21
+ *****************
22
+
23
+ * Qualify on python 3.14
24
+ * Add User-Agent header to powershell script for Appveyor
25
+ * Remove remaining openjpeg<2.4 artifacts
26
+ * Remove explicit testing of numpy 1.x
27
+
28
+ *****************
29
+ Changes in 0.14.3
30
+ *****************
31
+
32
+ * Fix import warning
33
+
34
+ *****************
35
+ Changes in 0.14.2
36
+ *****************
37
+
38
+ * Fix test suite for python 3.14 regular expressions
39
+ * Remove long-since-deprecated Jp2kr.read method
40
+ * Make Jp2kr.parse method private
41
+ * Make glymur.lib.tiff module private
42
+ * Add doctests into circleci config
43
+
44
+ *****************
45
+ Changes in 0.14.1
46
+ *****************
47
+
48
+ * Fix doc builds for API
49
+ * Add additional API examples for Jp2k, Jp2kr
50
+ * Fix tilesize reporting
51
+ * Refactor all of setup.cfg into pyproject.toml
52
+
53
+ *****************
54
+ Changes in 0.14.0
55
+ *****************
56
+
57
+ * Add description of raw IFD for geojp2 UUIDs
58
+ * Add feature to convert JPEGs to JP2
59
+ * Remove support for python 3.10
@@ -9,7 +9,7 @@ from uuid import UUID
9
9
 
10
10
  # local imports
11
11
  from . import jp2box
12
- from .lib.tiff import DATATYPE2FMT
12
+ from .lib._tiff import DATATYPE2FMT
13
13
  from .jp2k import Jp2k
14
14
  from glymur.core import RESTRICTED_ICC_PROFILE
15
15
 
@@ -276,11 +276,7 @@ class _2JP2Converter(object):
276
276
 
277
277
  b.seek(tag_offset)
278
278
 
279
- try:
280
- dtype = tags[tag]["dtype"]
281
- except IndexError:
282
- breakpoint()
283
- pass
279
+ dtype = tags[tag]["dtype"]
284
280
 
285
281
  nvalues = tags[tag]["nvalues"]
286
282
  payload = tags[tag]["payload"]
@@ -51,7 +51,7 @@ from .core import (
51
51
  ANY_ICC_PROFILE,
52
52
  VENDOR_COLOR_METHOD,
53
53
  )
54
- from .lib.tiff import tiff_header, BadTiffTagDatatype
54
+ from .lib._tiff import tiff_header, BadTiffTagDatatype
55
55
  from . import get_option
56
56
  from ._iccprofile import _ICCProfile
57
57
 
@@ -526,10 +526,10 @@ class Jp2k(Jp2kr):
526
526
  This method can only be used to create JPEG 2000 images that can fit
527
527
  in memory.
528
528
  """
529
- if version.openjpeg_version < "2.3.0":
529
+ if version.openjpeg_version < "2.4.0":
530
530
  msg = (
531
- "You must have at least version 2.3.0 of OpenJPEG in order to "
532
- "write images."
531
+ "The minimum supported version of OpenJPEG is 2.4.0. "
532
+ f"Your version is {version.openjpeg_version}."
533
533
  )
534
534
  raise RuntimeError(msg)
535
535
 
@@ -741,6 +741,7 @@ class Jp2k(Jp2kr):
741
741
 
742
742
  Examples
743
743
  --------
744
+ # noqa : W291
744
745
  >>> import io, shutil, lxml.etree as ET
745
746
  >>> _ = shutil.copyfile(glymur.data.nemo(), 'new-nemo.jp2')
746
747
  >>> j = glymur.Jp2k('new-nemo.jp2')
@@ -1463,10 +1464,10 @@ class _TileWriter(object):
1463
1464
  """Write image data to a JP2/JPX/J2k file. Intended usage of the
1464
1465
  various parameters follows that of OpenJPEG's opj_compress utility.
1465
1466
  """
1466
- if version.openjpeg_version < "2.3.0":
1467
+ if version.openjpeg_version < "2.4.0":
1467
1468
  msg = (
1468
- "You must have at least version 2.3.0 of OpenJPEG "
1469
- "in order to write images."
1469
+ "The minimum supported version of OpenJPEG is 2.4.0. "
1470
+ f"Your version is {version.openjpeg_version}."
1470
1471
  )
1471
1472
  raise RuntimeError(msg)
1472
1473
 
@@ -12,7 +12,6 @@ from __future__ import annotations
12
12
  from contextlib import ExitStack
13
13
  import ctypes
14
14
  import pathlib
15
- import re
16
15
  import struct
17
16
  import sys
18
17
  import warnings
@@ -396,7 +395,6 @@ class Jp2kr(Jp2kBox):
396
395
  """
397
396
  .. deprecated:: 0.15.0
398
397
  """
399
- breakpoint()
400
398
  msg = "Deprecated, do not use."
401
399
  warnings.warn(msg, DeprecationWarning)
402
400
  self._parse(force=force)
@@ -694,11 +692,10 @@ class Jp2kr(Jp2kBox):
694
692
  RuntimeError
695
693
  If the image has differing subsample factors.
696
694
  """
697
- if re.match("0|1|2.[012]", version.openjpeg_version):
695
+ if version.openjpeg_version < '2.4.0':
698
696
  msg = (
699
- f"You must have a version of OpenJPEG at least as high as "
700
- f"2.3.0 before you can read JPEG2000 images with glymur. "
701
- f"Your version is {version.openjpeg_version}"
697
+ "The minimum supported version of OpenJPEG is 2.4.0. "
698
+ f"Your version is {version.openjpeg_version}."
702
699
  )
703
700
  raise RuntimeError(msg)
704
701
 
@@ -878,11 +875,10 @@ class Jp2kr(Jp2kBox):
878
875
  >>> jp = glymur.Jp2k(jfile)
879
876
  >>> components_lst = jp.read_bands(rlevel=1)
880
877
  """
881
- if version.openjpeg_version < "2.3.0":
878
+ if version.openjpeg_version < "2.4.0":
882
879
  msg = (
883
- f"You must have at least version 2.3.0 of OpenJPEG installed "
884
- f"before using this method. Your version of OpenJPEG is "
885
- f"{version.openjpeg_version}."
880
+ "The minimum supported version of OpenJPEG is 2.4.0. "
881
+ f"Your version is {version.openjpeg_version}."
886
882
  )
887
883
  raise RuntimeError(msg)
888
884
 
@@ -71,11 +71,10 @@ def set_option(key, value):
71
71
  raise KeyError(f"{key} not valid.")
72
72
 
73
73
  if key == "lib.num_threads":
74
- if version.openjpeg_version < "2.2.0":
74
+ if version.openjpeg_version < "2.4.0":
75
75
  msg = (
76
- f"Thread support is not available on versions of OpenJPEG "
77
- f"prior to 2.2.0. Your version is "
78
- f"{version.openjpeg_version}."
76
+ "The minimum supported version of OpenJPEG is 2.4.0. "
77
+ f"Your version is {version.openjpeg_version}."
79
78
  )
80
79
  raise RuntimeError(msg)
81
80
  if not opj2.has_thread_support():
@@ -16,11 +16,11 @@ import numpy as np
16
16
 
17
17
  # Local imports ...
18
18
  from .lib import openjp2 as opj2
19
- from .lib import tiff
19
+ from .lib import _tiff as tiff
20
20
 
21
21
  # Do not change the format of this next line! Doing so risks breaking
22
22
  # setup.py
23
- version = "0.14.2"
23
+ version = "0.14.5"
24
24
 
25
25
  version_tuple = parse(version).release
26
26
 
@@ -5,6 +5,7 @@ classifiers = [
5
5
  'Programming Language :: Python :: 3.11',
6
6
  'Programming Language :: Python :: 3.12',
7
7
  'Programming Language :: Python :: 3.13',
8
+ 'Programming Language :: Python :: 3.14',
8
9
  'Programming Language :: Python :: Implementation :: CPython',
9
10
  'Intended Audience :: Science/Research',
10
11
  'Operating System :: OS Independent',
@@ -21,7 +22,7 @@ license = 'MIT'
21
22
  name = 'Glymur'
22
23
  readme = 'README.md'
23
24
  requires-python = '>=3.11'
24
- version = '0.14.2'
25
+ version = '0.14.5'
25
26
 
26
27
  [project.scripts]
27
28
  jp2dump = 'glymur.command_line:main'
@@ -3,21 +3,18 @@ Test fixtures common to more than one test point.
3
3
  """
4
4
 
5
5
  # Standard library imports
6
- import importlib.metadata as im
6
+ import importlib.resources as ir
7
7
  import pathlib
8
- import platform
9
8
  import shutil
10
9
  import sys
11
10
  import tempfile
12
11
  import unittest
13
12
 
14
13
  # are we anaconda?
15
- try:
16
- import conda # noqa : F401
17
- except ImportError:
18
- ANACONDA = False
19
- else:
14
+ if 'conda' in sys.version.lower():
20
15
  ANACONDA = True
16
+ else:
17
+ ANACONDA = False
21
18
 
22
19
  # are we macports?
23
20
  if sys.executable.startswith('/opt/local/Library/Frameworks/Python.framework'):
@@ -25,20 +22,6 @@ if sys.executable.startswith('/opt/local/Library/Frameworks/Python.framework'):
25
22
  else:
26
23
  MACPORTS = False
27
24
 
28
- # are we a linux platform that can use importlib.metadata
29
- if (
30
- platform.system() == 'linux'
31
- and platform.freedesktop_os_release()['id'] == 'opensuse-tumbleweed'
32
- ):
33
- LINUX_WITH_GOOD_IMPORTLIBMETADATA = True
34
- else:
35
- LINUX_WITH_GOOD_IMPORTLIBMETADATA = False
36
-
37
- if ANACONDA or MACPORTS or LINUX_WITH_GOOD_IMPORTLIBMETADATA:
38
- CANNOT_USE_IMPORTLIB_METADATA = False
39
- else:
40
- CANNOT_USE_IMPORTLIB_METADATA = True
41
-
42
25
  # 3rd party library imports
43
26
  try:
44
27
  from osgeo import gdal # noqa : F401
@@ -107,22 +90,9 @@ class TestJPEGCommon(TestCommon):
107
90
  Use some files supplied by scikit-image for our tests.
108
91
  """
109
92
 
110
- files = im.files('scikit-image')
111
-
112
- jpeg = next(filter(lambda x: 'retina' in x.name, files), None)
113
- cls.retina = jpeg.locate()
114
-
115
- jpeg = next(
116
- filter(lambda x: 'hubble_deep_field' in x.name, files),
117
- None
118
- )
119
- cls.hubble = jpeg.locate()
120
-
121
- jpeg = next(
122
- filter(lambda x: 'rocket' in x.name, files),
123
- None
124
- )
125
- cls.rocket = jpeg.locate()
93
+ cls.retina = ir.files('skimage') / 'data' / 'retina.jpg'
94
+ cls.hubble = ir.files('skimage') / 'data' / 'hubble_deep_field.jpg'
95
+ cls.rocket = ir.files('skimage') / 'data' / 'rocket.jpg'
126
96
 
127
97
  def setUp(self):
128
98
  super().setUp()
@@ -13,16 +13,11 @@ from glymur import JPEG2JP2, command_line, reset_option
13
13
  from . import fixtures
14
14
  from .fixtures import (
15
15
  OPENJPEG_NOT_AVAILABLE,
16
- OPENJPEG_NOT_AVAILABLE_MSG,
17
- CANNOT_USE_IMPORTLIB_METADATA
16
+ OPENJPEG_NOT_AVAILABLE_MSG
18
17
  )
19
18
 
20
19
 
21
20
  @unittest.skipIf(OPENJPEG_NOT_AVAILABLE, OPENJPEG_NOT_AVAILABLE_MSG)
22
- @unittest.skipIf(
23
- CANNOT_USE_IMPORTLIB_METADATA,
24
- 'missing importlib.metadata.files ?'
25
- )
26
21
  class TestSuite(fixtures.TestJPEGCommon):
27
22
 
28
23
  def test_smoke(self):
@@ -428,7 +428,7 @@ class TestSuite(fixtures.TestCommon):
428
428
  """
429
429
  path = ir.files('tests.data.tiff').joinpath('basn6a08.tif')
430
430
  buffer = path.read_bytes()
431
- ifd = glymur.lib.tiff.tiff_header(buffer)
431
+ ifd = glymur.lib._tiff.tiff_header(buffer)
432
432
  icc_profile = bytes(ifd['ICCProfile'])
433
433
 
434
434
  sys.argv = [
@@ -5,7 +5,6 @@ OPENJP2 may be present in some form or other.
5
5
  # Standard library imports ...
6
6
  import contextlib
7
7
  import importlib
8
- import os
9
8
  import pathlib
10
9
  import platform
11
10
  import unittest
@@ -18,26 +17,6 @@ from glymur import Jp2k
18
17
  from .fixtures import TestCommon, OPENJPEG_NOT_AVAILABLE, OPENJPEG_NOT_AVAILABLE_MSG # noqa : E501
19
18
 
20
19
 
21
- @contextlib.contextmanager
22
- def chdir(dirname=None):
23
- """
24
- This context manager restores the value of the current working directory
25
- (cwd) after the enclosed code block completes or raises an exception. If a
26
- directory name is supplied to the context manager then the cwd is changed
27
- prior to running the code block.
28
-
29
- Shamelessly lifted from
30
- http://www.astropython.org/snippet/2009/10/chdir-context-manager
31
- """
32
- curdir = os.getcwd()
33
- try:
34
- if dirname is not None:
35
- os.chdir(dirname)
36
- yield
37
- finally:
38
- os.chdir(curdir)
39
-
40
-
41
20
  @patch("glymur.config.glymurrc_fname", lambda: None)
42
21
  class TestSuitePathToLibrary(TestCommon):
43
22
  """
@@ -331,7 +310,7 @@ class TestSuiteConfigFile(TestCommon):
331
310
  f.write("[library]\n")
332
311
  f.write(f"openjp2: {expected}\n")
333
312
 
334
- with chdir(self.glymur_configdir):
313
+ with contextlib.chdir(self.glymur_configdir):
335
314
  # Should be able to load openjp2 as before.
336
315
  actual = glymur.config.read_config_file("openjp2")
337
316
 
@@ -17,15 +17,10 @@ from . import fixtures
17
17
  from .fixtures import (
18
18
  OPENJPEG_NOT_AVAILABLE,
19
19
  OPENJPEG_NOT_AVAILABLE_MSG,
20
- CANNOT_USE_IMPORTLIB_METADATA
21
20
  )
22
21
 
23
22
 
24
23
  @unittest.skipIf(OPENJPEG_NOT_AVAILABLE, OPENJPEG_NOT_AVAILABLE_MSG)
25
- @unittest.skipIf(
26
- CANNOT_USE_IMPORTLIB_METADATA,
27
- 'missing importlib.metadata.files ?'
28
- )
29
24
  class TestSuite(fixtures.TestJPEGCommon):
30
25
 
31
26
  def test_smoke(self):