opencodecs 0.1.8__tar.gz → 0.1.9__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.8 → opencodecs-0.1.9}/CHANGES.rst +40 -0
  2. {opencodecs-0.1.8/src/opencodecs.egg-info → opencodecs-0.1.9}/PKG-INFO +1 -1
  3. {opencodecs-0.1.8 → opencodecs-0.1.9}/pyproject.toml +1 -1
  4. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/__init__.py +1 -1
  5. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_bcdec.c +152 -152
  6. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_bmp.c +152 -152
  7. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_eer.c +152 -152
  8. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_hcomp.c +152 -152
  9. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_plio.c +152 -152
  10. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_png.c +152 -152
  11. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_qoi.c +152 -152
  12. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_rcomp.c +152 -152
  13. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_rgbe.c +152 -152
  14. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/uhdr.py +52 -4
  15. {opencodecs-0.1.8 → opencodecs-0.1.9/src/opencodecs.egg-info}/PKG-INFO +1 -1
  16. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_uhdr.py +51 -0
  17. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/bcdec/bcdec.h +0 -0
  18. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
  19. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/bitshuffle/iochain.c +0 -0
  20. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
  21. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/cfitsio/pliocomp.c +0 -0
  22. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/cfitsio/ricecomp.c +0 -0
  23. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/imcd_eer/eer.c +0 -0
  24. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/imcd_eer/eer.h +0 -0
  25. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/imcd_lzw/lzw.c +0 -0
  26. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/imcd_lzw/lzw.h +0 -0
  27. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/libspng/spng.c +0 -0
  28. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
  29. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
  30. {opencodecs-0.1.8 → opencodecs-0.1.9}/3rdparty/rgbe/rgbe.c +0 -0
  31. {opencodecs-0.1.8 → opencodecs-0.1.9}/MANIFEST.in +0 -0
  32. {opencodecs-0.1.8 → opencodecs-0.1.9}/README.md +0 -0
  33. {opencodecs-0.1.8 → opencodecs-0.1.9}/bench/build_libjxl.sh +0 -0
  34. {opencodecs-0.1.8 → opencodecs-0.1.9}/patches/libjxl/README.md +0 -0
  35. {opencodecs-0.1.8 → opencodecs-0.1.9}/setup.cfg +0 -0
  36. {opencodecs-0.1.8 → opencodecs-0.1.9}/setup.py +0 -0
  37. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_aec_codec.py +0 -0
  38. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_avif_codec.py +0 -0
  39. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_b2nd_codec.py +0 -0
  40. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_bcn_codec.py +0 -0
  41. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_bitshuffle_codec.py +0 -0
  42. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_blosc2_codec.py +0 -0
  43. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_bmp_codec.py +0 -0
  44. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_brotli_codec.py +0 -0
  45. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_brunsli_codec.py +0 -0
  46. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_byteshuffle_codec.py +0 -0
  47. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_bz2_codec.py +0 -0
  48. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_cms_codec.py +0 -0
  49. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_czi_codec.py +0 -0
  50. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_czi_reader.py +0 -0
  51. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_czi_writer.py +0 -0
  52. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_deflate_codec.py +0 -0
  53. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_dicomrle_codec.py +0 -0
  54. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_dicomweb.py +0 -0
  55. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_eer_reader.py +0 -0
  56. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ets.py +0 -0
  57. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_fits.py +0 -0
  58. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_fits_codec.py +0 -0
  59. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_fits_compressed.py +0 -0
  60. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_gif_codec.py +0 -0
  61. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_gzip_codec.py +0 -0
  62. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_hdf5_codec.py +0 -0
  63. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_hdf5_http.py +0 -0
  64. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_heif_codec.py +0 -0
  65. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_htj2k_codec.py +0 -0
  66. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_jpeg2k_codec.py +0 -0
  67. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_jpeg_codec.py +0 -0
  68. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_jpegls_codec.py +0 -0
  69. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_jxl_codec.py +0 -0
  70. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_lerc_codec.py +0 -0
  71. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_lif_codec.py +0 -0
  72. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_lif_native.py +0 -0
  73. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_lz4_codec.py +0 -0
  74. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_lzma_codec.py +0 -0
  75. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_mozjpeg_codec.py +0 -0
  76. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_nd2_codec.py +0 -0
  77. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_nd2_native.py +0 -0
  78. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ndtiff.py +0 -0
  79. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ndtiff_pyramid.py +0 -0
  80. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ndtiff_writer.py +0 -0
  81. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_none_codec.py +0 -0
  82. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_numpy_codec.py +0 -0
  83. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_oib_codec.py +0 -0
  84. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_oib_native.py +0 -0
  85. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_oir_codec.py +0 -0
  86. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ole2.py +0 -0
  87. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ome_xml.py +0 -0
  88. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_omezarr.py +0 -0
  89. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_omezarr_writer.py +0 -0
  90. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_packints_codec.py +0 -0
  91. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_pcodec_codec.py +0 -0
  92. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_png_codec.py +0 -0
  93. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_predictor_codec.py +0 -0
  94. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_pyramid_build.py +0 -0
  95. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_qoi_codec.py +0 -0
  96. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_quantize_codec.py +0 -0
  97. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_rcomp_codec.py +0 -0
  98. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_rgbe.py +0 -0
  99. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_rgbe_codec.py +0 -0
  100. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_snappy_codec.py +0 -0
  101. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_sperr_codec.py +0 -0
  102. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_sz3_codec.py +0 -0
  103. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_tiff_codec.py +0 -0
  104. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_tiff_http.py +0 -0
  105. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_tiff_pyramid.py +0 -0
  106. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_tiff_writer.py +0 -0
  107. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_ultrahdr_codec.py +0 -0
  108. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_vsi_codec.py +0 -0
  109. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_webp_codec.py +0 -0
  110. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_zarr_codecs.py +0 -0
  111. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_zfp_codec.py +0 -0
  112. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/_zstd_codec.py +0 -0
  113. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/__init__.py +0 -0
  114. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_bitshuffle.c +0 -0
  115. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_bytetools.c +0 -0
  116. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_deflate.c +0 -0
  117. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_lz4.c +0 -0
  118. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_ndtiff.c +0 -0
  119. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_registry.py +0 -0
  120. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_tiff.c +0 -0
  121. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/codecs/_zstd.c +0 -0
  122. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/__init__.py +0 -0
  123. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/_io_helpers.py +0 -0
  124. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/_optional_backend.py +0 -0
  125. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/codec.py +0 -0
  126. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/color.py +0 -0
  127. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/errors.py +0 -0
  128. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/io.py +0 -0
  129. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/pyramid.py +0 -0
  130. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/core/segment_compression.py +0 -0
  131. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/jxl.py +0 -0
  132. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/parallel.py +0 -0
  133. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/tiff_reader.py +0 -0
  134. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/tifffile_patch.py +0 -0
  135. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs/zarr.py +0 -0
  136. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs.egg-info/SOURCES.txt +0 -0
  137. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs.egg-info/dependency_links.txt +0 -0
  138. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs.egg-info/requires.txt +0 -0
  139. {opencodecs-0.1.8 → opencodecs-0.1.9}/src/opencodecs.egg-info/top_level.txt +0 -0
  140. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_auto_pyramid.py +0 -0
  141. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_bcdec.py +0 -0
  142. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_brunsli.py +0 -0
  143. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_charls.py +0 -0
  144. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_core_codec_api.py +0 -0
  145. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus.py +0 -0
  146. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus_codec_decode.py +0 -0
  147. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus_other.py +0 -0
  148. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus_png.py +0 -0
  149. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus_tiff.py +0 -0
  150. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_corpus_vendors.py +0 -0
  151. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_coverage_final.py +0 -0
  152. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_coverage_finishing.py +0 -0
  153. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_coverage_last.py +0 -0
  154. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_coverage_more.py +0 -0
  155. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_coverage_push.py +0 -0
  156. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_czi_fixture.py +0 -0
  157. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_czi_pyramid.py +0 -0
  158. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_czi_writer.py +0 -0
  159. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_data_source.py +0 -0
  160. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_deflate.py +0 -0
  161. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_dicomweb.py +0 -0
  162. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_edge_cases.py +0 -0
  163. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_eer.py +0 -0
  164. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_encode_comprehensive.py +0 -0
  165. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_error_handling.py +0 -0
  166. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_fits.py +0 -0
  167. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_gif.py +0 -0
  168. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_hdf5_http.py +0 -0
  169. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_hdf5_local.py +0 -0
  170. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_heif_avif_features.py +0 -0
  171. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_http_byte_savings.py +0 -0
  172. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_http_prefetch.py +0 -0
  173. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_http_unified.py +0 -0
  174. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_io_chunked.py +0 -0
  175. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_isal.py +0 -0
  176. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_jxl.py +0 -0
  177. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_lif_native.py +0 -0
  178. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_live_archives.py +0 -0
  179. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_mozjpeg.py +0 -0
  180. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_native_parity.py +0 -0
  181. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_nd2_native.py +0 -0
  182. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_ndtiff.py +0 -0
  183. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_oib_native.py +0 -0
  184. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_ome_xml.py +0 -0
  185. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_omezarr.py +0 -0
  186. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_omezarr_sharded_range.py +0 -0
  187. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_open_pyramid.py +0 -0
  188. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_openjph.py +0 -0
  189. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_optional_backend.py +0 -0
  190. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_parallel_jxl.py +0 -0
  191. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_phase4_filters.py +0 -0
  192. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_phase5_icc.py +0 -0
  193. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_phase6_codecs.py +0 -0
  194. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_phase7_cms.py +0 -0
  195. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_rgbe.py +0 -0
  196. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_snappy.py +0 -0
  197. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tier1_scientific.py +0 -0
  198. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_codec_encode.py +0 -0
  199. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_http.py +0 -0
  200. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_native.py +0 -0
  201. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_pyramid.py +0 -0
  202. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_reader.py +0 -0
  203. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tiff_writer.py +0 -0
  204. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_tifffile_patch.py +0 -0
  205. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_unified_api.py +0 -0
  206. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_vsi_oir.py +0 -0
  207. {opencodecs-0.1.8 → opencodecs-0.1.9}/tests/test_zarr_adapters.py +0 -0
@@ -10,6 +10,46 @@ 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.9 (2026-06-02)
14
+ ------------------
15
+
16
+ **Lossless SDR base layer on encode (opt-in)**
17
+
18
+ ``opencodecs.codecs._jpeg.encode`` gained a ``lossless=False`` kwarg
19
+ that switches libjpeg-turbo into predictive lossless mode
20
+ (``TJPARAM_LOSSLESS=1``, PSV=1, forced 4:4:4 chroma). Output is
21
+ bit-exact through the libjpeg-turbo decoder, at the cost of ~3-5×
22
+ larger files vs ``level=95`` baseline DCT on natural-image content.
23
+
24
+ ``opencodecs.uhdr.encode_native(lossless=True)`` routes the SDR base
25
+ layer through that lossless path while keeping the gain map lossy
26
+ (there's no perceptual benefit to making a band-limited gain map
27
+ lossless, and it would balloon the file).
28
+
29
+ Empirical caveats — verified on macOS 15 with an HDR-capable
30
+ display:
31
+
32
+ * macOS Preview, Chrome 116+, and any viewer that parses the MPF /
33
+ XMP gain-map block directly **HDR-render the output normally**.
34
+ * libuhdr's reference ``uhdr_decode`` (and therefore
35
+ ``opencodecs.uhdr.decode``) **rejects** the file. It enforces a
36
+ strict ``JCS_YCbCr`` / ``JCS_GRAYSCALE`` colorspace check that
37
+ lossless-mode JPEG (which writes ``JCS_RGB``) fails.
38
+ * Apple's ``CGImageSource`` ``Headroom`` property and
39
+ ``kCGImageAuxiliaryDataTypeISOGainMap`` aux-data accessors miss
40
+ the HDR signal (same root cause), even though Preview's actual
41
+ render path composites the gain map correctly.
42
+ * ``opencodecs.uhdr.decode_native`` reads it cleanly — it uses our
43
+ own gain-application kernel without libuhdr's colorspace gate.
44
+
45
+ Use only when exact SDR-base-pixel preservation is a hard
46
+ requirement (archival, scientific imaging) and every consumer in
47
+ your pipeline is either Preview / Chrome / ``decode_native``. The
48
+ ``v0.1.8`` note that called lossless "not a conforming Ultra-HDR
49
+ file" was too strong — it's non-conforming to libuhdr's reference
50
+ decoder and Apple's narrow ImageIO API, but visual HDR consumers
51
+ accept it just fine.
52
+
13
53
  0.1.8 (2026-06-02)
14
54
  ------------------
15
55
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencodecs
3
- Version: 0.1.8
3
+ Version: 0.1.9
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.8"
7
+ version = "0.1.9"
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.8"
194
+ __version__ = "0.1.9"