opencodecs 0.1.6__tar.gz → 0.1.7__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 (207) hide show
  1. {opencodecs-0.1.6 → opencodecs-0.1.7}/CHANGES.rst +73 -6
  2. {opencodecs-0.1.6/src/opencodecs.egg-info → opencodecs-0.1.7}/PKG-INFO +1 -1
  3. {opencodecs-0.1.6 → opencodecs-0.1.7}/pyproject.toml +1 -1
  4. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/__init__.py +1 -1
  5. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_bcdec.c +152 -152
  6. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_bmp.c +152 -152
  7. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_eer.c +152 -152
  8. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_hcomp.c +152 -152
  9. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_plio.c +152 -152
  10. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_png.c +152 -152
  11. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_qoi.c +152 -152
  12. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_rcomp.c +152 -152
  13. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_rgbe.c +152 -152
  14. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/uhdr.py +66 -20
  15. {opencodecs-0.1.6 → opencodecs-0.1.7/src/opencodecs.egg-info}/PKG-INFO +1 -1
  16. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_uhdr.py +55 -5
  17. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/bcdec/bcdec.h +0 -0
  18. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
  19. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/bitshuffle/iochain.c +0 -0
  20. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
  21. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/cfitsio/pliocomp.c +0 -0
  22. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/cfitsio/ricecomp.c +0 -0
  23. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/imcd_eer/eer.c +0 -0
  24. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/imcd_eer/eer.h +0 -0
  25. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/imcd_lzw/lzw.c +0 -0
  26. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/imcd_lzw/lzw.h +0 -0
  27. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/libspng/spng.c +0 -0
  28. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
  29. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
  30. {opencodecs-0.1.6 → opencodecs-0.1.7}/3rdparty/rgbe/rgbe.c +0 -0
  31. {opencodecs-0.1.6 → opencodecs-0.1.7}/MANIFEST.in +0 -0
  32. {opencodecs-0.1.6 → opencodecs-0.1.7}/README.md +0 -0
  33. {opencodecs-0.1.6 → opencodecs-0.1.7}/bench/build_libjxl.sh +0 -0
  34. {opencodecs-0.1.6 → opencodecs-0.1.7}/patches/libjxl/README.md +0 -0
  35. {opencodecs-0.1.6 → opencodecs-0.1.7}/setup.cfg +0 -0
  36. {opencodecs-0.1.6 → opencodecs-0.1.7}/setup.py +0 -0
  37. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_aec_codec.py +0 -0
  38. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_avif_codec.py +0 -0
  39. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_b2nd_codec.py +0 -0
  40. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_bcn_codec.py +0 -0
  41. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_bitshuffle_codec.py +0 -0
  42. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_blosc2_codec.py +0 -0
  43. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_bmp_codec.py +0 -0
  44. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_brotli_codec.py +0 -0
  45. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_brunsli_codec.py +0 -0
  46. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_byteshuffle_codec.py +0 -0
  47. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_bz2_codec.py +0 -0
  48. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_cms_codec.py +0 -0
  49. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_czi_codec.py +0 -0
  50. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_czi_reader.py +0 -0
  51. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_czi_writer.py +0 -0
  52. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_deflate_codec.py +0 -0
  53. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_dicomrle_codec.py +0 -0
  54. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_dicomweb.py +0 -0
  55. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_eer_reader.py +0 -0
  56. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ets.py +0 -0
  57. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_fits.py +0 -0
  58. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_fits_codec.py +0 -0
  59. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_fits_compressed.py +0 -0
  60. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_gif_codec.py +0 -0
  61. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_gzip_codec.py +0 -0
  62. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_hdf5_codec.py +0 -0
  63. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_hdf5_http.py +0 -0
  64. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_heif_codec.py +0 -0
  65. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_htj2k_codec.py +0 -0
  66. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_jpeg2k_codec.py +0 -0
  67. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_jpeg_codec.py +0 -0
  68. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_jpegls_codec.py +0 -0
  69. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_jxl_codec.py +0 -0
  70. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_lerc_codec.py +0 -0
  71. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_lif_codec.py +0 -0
  72. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_lif_native.py +0 -0
  73. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_lz4_codec.py +0 -0
  74. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_lzma_codec.py +0 -0
  75. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_mozjpeg_codec.py +0 -0
  76. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_nd2_codec.py +0 -0
  77. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_nd2_native.py +0 -0
  78. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ndtiff.py +0 -0
  79. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ndtiff_pyramid.py +0 -0
  80. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ndtiff_writer.py +0 -0
  81. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_none_codec.py +0 -0
  82. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_numpy_codec.py +0 -0
  83. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_oib_codec.py +0 -0
  84. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_oib_native.py +0 -0
  85. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_oir_codec.py +0 -0
  86. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ole2.py +0 -0
  87. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ome_xml.py +0 -0
  88. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_omezarr.py +0 -0
  89. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_omezarr_writer.py +0 -0
  90. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_packints_codec.py +0 -0
  91. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_pcodec_codec.py +0 -0
  92. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_png_codec.py +0 -0
  93. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_predictor_codec.py +0 -0
  94. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_pyramid_build.py +0 -0
  95. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_qoi_codec.py +0 -0
  96. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_quantize_codec.py +0 -0
  97. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_rcomp_codec.py +0 -0
  98. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_rgbe.py +0 -0
  99. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_rgbe_codec.py +0 -0
  100. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_snappy_codec.py +0 -0
  101. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_sperr_codec.py +0 -0
  102. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_sz3_codec.py +0 -0
  103. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_tiff_codec.py +0 -0
  104. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_tiff_http.py +0 -0
  105. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_tiff_pyramid.py +0 -0
  106. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_tiff_writer.py +0 -0
  107. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_ultrahdr_codec.py +0 -0
  108. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_vsi_codec.py +0 -0
  109. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_webp_codec.py +0 -0
  110. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_zarr_codecs.py +0 -0
  111. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_zfp_codec.py +0 -0
  112. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/_zstd_codec.py +0 -0
  113. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/__init__.py +0 -0
  114. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_bitshuffle.c +0 -0
  115. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_bytetools.c +0 -0
  116. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_deflate.c +0 -0
  117. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_lz4.c +0 -0
  118. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_ndtiff.c +0 -0
  119. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_registry.py +0 -0
  120. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_tiff.c +0 -0
  121. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/codecs/_zstd.c +0 -0
  122. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/__init__.py +0 -0
  123. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/_io_helpers.py +0 -0
  124. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/_optional_backend.py +0 -0
  125. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/codec.py +0 -0
  126. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/color.py +0 -0
  127. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/errors.py +0 -0
  128. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/io.py +0 -0
  129. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/pyramid.py +0 -0
  130. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/core/segment_compression.py +0 -0
  131. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/jxl.py +0 -0
  132. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/parallel.py +0 -0
  133. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/tiff_reader.py +0 -0
  134. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/tifffile_patch.py +0 -0
  135. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs/zarr.py +0 -0
  136. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs.egg-info/SOURCES.txt +0 -0
  137. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs.egg-info/dependency_links.txt +0 -0
  138. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs.egg-info/requires.txt +0 -0
  139. {opencodecs-0.1.6 → opencodecs-0.1.7}/src/opencodecs.egg-info/top_level.txt +0 -0
  140. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_auto_pyramid.py +0 -0
  141. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_bcdec.py +0 -0
  142. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_brunsli.py +0 -0
  143. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_charls.py +0 -0
  144. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_core_codec_api.py +0 -0
  145. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus.py +0 -0
  146. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus_codec_decode.py +0 -0
  147. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus_other.py +0 -0
  148. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus_png.py +0 -0
  149. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus_tiff.py +0 -0
  150. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_corpus_vendors.py +0 -0
  151. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_coverage_final.py +0 -0
  152. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_coverage_finishing.py +0 -0
  153. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_coverage_last.py +0 -0
  154. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_coverage_more.py +0 -0
  155. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_coverage_push.py +0 -0
  156. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_czi_fixture.py +0 -0
  157. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_czi_pyramid.py +0 -0
  158. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_czi_writer.py +0 -0
  159. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_data_source.py +0 -0
  160. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_deflate.py +0 -0
  161. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_dicomweb.py +0 -0
  162. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_edge_cases.py +0 -0
  163. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_eer.py +0 -0
  164. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_encode_comprehensive.py +0 -0
  165. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_error_handling.py +0 -0
  166. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_fits.py +0 -0
  167. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_gif.py +0 -0
  168. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_hdf5_http.py +0 -0
  169. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_hdf5_local.py +0 -0
  170. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_heif_avif_features.py +0 -0
  171. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_http_byte_savings.py +0 -0
  172. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_http_prefetch.py +0 -0
  173. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_http_unified.py +0 -0
  174. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_io_chunked.py +0 -0
  175. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_isal.py +0 -0
  176. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_jxl.py +0 -0
  177. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_lif_native.py +0 -0
  178. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_live_archives.py +0 -0
  179. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_mozjpeg.py +0 -0
  180. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_native_parity.py +0 -0
  181. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_nd2_native.py +0 -0
  182. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_ndtiff.py +0 -0
  183. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_oib_native.py +0 -0
  184. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_ome_xml.py +0 -0
  185. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_omezarr.py +0 -0
  186. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_omezarr_sharded_range.py +0 -0
  187. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_open_pyramid.py +0 -0
  188. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_openjph.py +0 -0
  189. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_optional_backend.py +0 -0
  190. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_parallel_jxl.py +0 -0
  191. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_phase4_filters.py +0 -0
  192. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_phase5_icc.py +0 -0
  193. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_phase6_codecs.py +0 -0
  194. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_phase7_cms.py +0 -0
  195. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_rgbe.py +0 -0
  196. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_snappy.py +0 -0
  197. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tier1_scientific.py +0 -0
  198. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_codec_encode.py +0 -0
  199. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_http.py +0 -0
  200. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_native.py +0 -0
  201. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_pyramid.py +0 -0
  202. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_reader.py +0 -0
  203. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tiff_writer.py +0 -0
  204. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_tifffile_patch.py +0 -0
  205. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_unified_api.py +0 -0
  206. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_vsi_oir.py +0 -0
  207. {opencodecs-0.1.6 → opencodecs-0.1.7}/tests/test_zarr_adapters.py +0 -0
@@ -10,6 +10,69 @@ Versions follow the same ``YYYY.M.D`` cadence as upstream when we
10
10
  publish; the entries below cluster work by date rather than by
11
11
  release because most of it has shipped continuously to ``main``.
12
12
 
13
+ 0.1.7 (2026-06-02)
14
+ ------------------
15
+
16
+ **Patched libultrahdr bundle**
17
+
18
+ Since v0.1.6 we build libuhdr ourselves; v0.1.7 starts carrying
19
+ local patches via ``patches/libultrahdr/*.patch``, applied by
20
+ ``bench/build_codec_libs.sh::build_libultrahdr`` after the source
21
+ fetch. Five upstream post-v1.4.0 cherry-picks land first:
22
+
23
+ * ``5ed39d6`` — fix ``CLIP3`` parameter order in libuhdr's own
24
+ ``applyGainMap``. The bug clamped a constant ``0.0f`` instead of
25
+ the gainmap weight whenever ``display_boost ≠ hdr_capacity_max``,
26
+ silently producing wrong HDR output on libuhdr's wrapped
27
+ ``decode()`` path. ``opencodecs.uhdr.decode_native`` is unaffected
28
+ (it uses our own Cython gain-application kernel).
29
+ * ``7088ca7`` — error-message typo in ``jpegr.cpp``.
30
+ * ``13a058f`` — ``icc.h`` Endian_Swap macros now respect actual
31
+ host endianness instead of an unconditionally-true ``USE_BIG_ENDIAN_IN_ICC``.
32
+ No effect on x86_64/aarch64 (little-endian); fixes PowerPC/s390x.
33
+ * ``5fa99b5`` — add missing ``<cstdint>`` include for GCC 15.
34
+ * ``8cbc983`` — same ``CLIP3`` fix as ``5ed39d6`` in the GPU path
35
+ (we don't link the GPU path; carried for hygiene).
36
+
37
+ **New API: ``opencodecs.uhdr.probe(data) -> dict``**
38
+
39
+ Parse an Ultra-HDR container's MPF metadata without any pixel
40
+ decode. Returns base + gainmap dimensions plus the gainmap
41
+ metadata block (``max_content_boost`` / ``min_content_boost`` /
42
+ ``gamma`` / capacity). Wraps libuhdr's existing ``uhdr_dec_probe``
43
+ + accessors. ~180× faster than ``decode()`` for any HDR-aware
44
+ flow that only needs dimensions or capacity — image indexing,
45
+ thumbnail generation, HTTP HEAD-style inspection, routing batches
46
+ by content-boost.
47
+
48
+ **Gain-map tunables on ``encode_native``: ``gain_quality`` + ``gain_scale``**
49
+
50
+ Two new kwargs let callers shrink the gain-map layer
51
+ independently of the SDR base:
52
+
53
+ * ``gain_quality`` — JPEG quality for the gain-map layer only
54
+ (defaults to track ``quality``). The gain map is heavily
55
+ band-limited so ``gain_quality=70`` is visually equivalent to
56
+ ``q95`` and cuts ~30% off the gain-map bytes.
57
+ * ``gain_scale`` — integer power-of-2 downsample factor for the
58
+ gain-map raster (``1`` keeps full resolution, ``2`` halves both
59
+ axes for quarter-area, etc.). Stride decimation; ~5 ms on a 2k²
60
+ uint8 gain map. Round-trips through ``probe`` / ``decode_native``
61
+ cleanly — the container records the actual gain-map dimensions
62
+ and the decoder upscales on apply.
63
+
64
+ **True streaming encode: ``encode_native(..., out=fp)``**
65
+
66
+ The old ``encode_to(fp, hdr, ...)`` was a forward-compatible
67
+ ``fp.write(encode_native(hdr, **kw))`` wrapper. v0.1.7 makes both
68
+ genuinely streaming: ``encode_assembled`` (and by extension
69
+ ``encode_native`` / ``encode_to``) now accept an ``out=`` file-
70
+ like, and when given they hand a zero-copy ``memoryview`` over
71
+ libuhdr's internal output buffer to ``out.write()``. Skips the
72
+ final ``PyBytes_FromStringAndSize`` allocation + memcpy. Saves
73
+ ~1× output-size peak memory and ~3 ms wall-clock on a 5 MB encode.
74
+ ``encode_to`` now returns ``None`` instead of the byte count.
75
+
13
76
  0.1.6 (2026-06-01)
14
77
  ------------------
15
78
 
@@ -69,12 +132,16 @@ streaming write-out without changing their code.
69
132
 
70
133
  **CI / build robustness**
71
134
 
72
- * ``_uhdr`` extension now links ``-lmvec -lm`` on Linux. GCC at
73
- ``-O3 -ffast-math`` auto-vectorises the sRGB LUT-init ``pow()``
74
- calls into ``_ZGV*`` symbols from glibc's libmvec. AlmaLinux 8's
75
- manylinux toolchain auto-links libmvec so the issue was masked
76
- in CI, but Ubuntu's GCC doesn't caught when verifying on a
77
- threadripper Ubuntu 25.04 box.
135
+ * ``_uhdr`` extension's ``-ffast-math`` is now narrowed to
136
+ ``-ffast-math -fno-finite-math-only
137
+ -fno-unsafe-math-optimizations -fno-math-errno
138
+ -fno-trapping-math``. The ``-funsafe-math-optimizations``
139
+ sub-flag is what tells GCC to replace libm calls with libmvec's
140
+ vectorised ``_ZGV*`` variants, which link-fail on Ubuntu (Ubuntu's
141
+ default gcc doesn't auto-link libmvec like manylinux_2_28 does)
142
+ and aren't available at all on aarch64. Same flag set the edt
143
+ extension uses for the same reason. Keeps FMA + reordering
144
+ perf; eliminates the libmvec dependency entirely.
78
145
  * The libaec source URL moved from ``gitlab.dkrz.de`` (now
79
146
  auth-gated; anonymous requests redirect to ``/users/sign_in``)
80
147
  to DKRZ's GitHub mirror at
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencodecs
3
- Version: 0.1.6
3
+ Version: 0.1.7
4
4
  Summary: Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)
5
5
  Author: Kevin Cutler
6
6
  License: BSD-3-Clause
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opencodecs"
7
- version = "0.1.6"
7
+ version = "0.1.7"
8
8
  description = "Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -191,4 +191,4 @@ __all__ = [
191
191
  "CziWriter", "CziPyramidWriter",
192
192
  ]
193
193
 
194
- __version__ = "0.1.6"
194
+ __version__ = "0.1.7"