opencodecs 0.5.0__tar.gz → 0.7.0__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 (473) hide show
  1. {opencodecs-0.5.0 → opencodecs-0.7.0}/CHANGES.rst +129 -0
  2. {opencodecs-0.5.0/src/opencodecs.egg-info → opencodecs-0.7.0}/PKG-INFO +1 -1
  3. {opencodecs-0.5.0 → opencodecs-0.7.0}/pyproject.toml +1 -1
  4. {opencodecs-0.5.0 → opencodecs-0.7.0}/setup.py +22 -2
  5. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/__init__.py +4 -3
  6. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_reader.py +676 -87
  7. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_writer.py +166 -12
  8. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_codec.py +112 -23
  9. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/byteplanes.h +13 -0
  10. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/jpegxr_shim.c +17 -4
  11. {opencodecs-0.5.0 → opencodecs-0.7.0/src/opencodecs.egg-info}/PKG-INFO +1 -1
  12. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/SOURCES.txt +3 -0
  13. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_final.py +3 -2
  14. opencodecs-0.7.0/tests/test_czi_pread_indices.py +264 -0
  15. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_read_dispatch.py +35 -0
  16. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_recompress.py +223 -1
  17. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_region_index.py +4 -1
  18. opencodecs-0.7.0/tests/test_tiff_stack_read.py +105 -0
  19. opencodecs-0.7.0/tests/test_tiff_workers.py +29 -0
  20. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/VENDOR.toml +0 -0
  21. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/LICENSE +0 -0
  22. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/README.md +0 -0
  23. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/bcdec.h +0 -0
  24. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/LICENSE +0 -0
  25. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/README.rst +0 -0
  26. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle.c +0 -0
  27. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle.h +0 -0
  28. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
  29. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_core.h +0 -0
  30. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_internals.h +0 -0
  31. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/iochain.c +0 -0
  32. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/iochain.h +0 -0
  33. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/License.txt +0 -0
  34. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hcompress.c +0 -0
  35. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
  36. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hdecompress_api.h +0 -0
  37. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fitsio2.h +0 -0
  38. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/pliocomp.c +0 -0
  39. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/ricecomp.c +0 -0
  40. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/ricecomp.h +0 -0
  41. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/LICENSE +0 -0
  42. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/spng.c +0 -0
  43. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/spng.h +0 -0
  44. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/LICENSE +0 -0
  45. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/oc_eer.c +0 -0
  46. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/oc_eer.h +0 -0
  47. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/LICENSE +0 -0
  48. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/oc_giflzw.c +0 -0
  49. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/oc_giflzw.h +0 -0
  50. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/LICENSE +0 -0
  51. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
  52. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
  53. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/qoi/LICENSE +0 -0
  54. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/qoi/qoi.h +0 -0
  55. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.c +0 -0
  56. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.h +0 -0
  57. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.txt +0 -0
  58. {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/vendor_hashes.json +0 -0
  59. {opencodecs-0.5.0 → opencodecs-0.7.0}/LICENSE +0 -0
  60. {opencodecs-0.5.0 → opencodecs-0.7.0}/MANIFEST.in +0 -0
  61. {opencodecs-0.5.0 → opencodecs-0.7.0}/README.md +0 -0
  62. {opencodecs-0.5.0 → opencodecs-0.7.0}/THIRD-PARTY.md +0 -0
  63. {opencodecs-0.5.0 → opencodecs-0.7.0}/bench/build_libjxl.sh +0 -0
  64. {opencodecs-0.5.0 → opencodecs-0.7.0}/patches/libjxl/README.md +0 -0
  65. {opencodecs-0.5.0 → opencodecs-0.7.0}/setup.cfg +0 -0
  66. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_aec_codec.py +0 -0
  67. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_avif_codec.py +0 -0
  68. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_avif_heif_params.py +0 -0
  69. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_b2nd_codec.py +0 -0
  70. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bcn_codec.py +0 -0
  71. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bitshuffle_codec.py +0 -0
  72. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_blosc2_codec.py +0 -0
  73. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bmp_codec.py +0 -0
  74. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_brotli_codec.py +0 -0
  75. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_brunsli_codec.py +0 -0
  76. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_byteshuffle_codec.py +0 -0
  77. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bz2_codec.py +0 -0
  78. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_cms_codec.py +0 -0
  79. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_codec.py +0 -0
  80. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_deflate_codec.py +0 -0
  81. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom.py +0 -0
  82. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom_codec.py +0 -0
  83. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom_pyramid.py +0 -0
  84. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicomrle_codec.py +0 -0
  85. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicomweb.py +0 -0
  86. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dm.py +0 -0
  87. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dm_codec.py +0 -0
  88. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_eer_reader.py +0 -0
  89. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_emd.py +0 -0
  90. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_emd_codec.py +0 -0
  91. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ets.py +0 -0
  92. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_filter_args.py +0 -0
  93. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits.py +0 -0
  94. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits_codec.py +0 -0
  95. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits_compressed.py +0 -0
  96. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_gif_codec.py +0 -0
  97. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_gzip_codec.py +0 -0
  98. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_h5_common.py +0 -0
  99. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_hdf5_codec.py +0 -0
  100. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_hdf5_http.py +0 -0
  101. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_heif_codec.py +0 -0
  102. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_htj2k_codec.py +0 -0
  103. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_htj2k_pyramid.py +0 -0
  104. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_imaris.py +0 -0
  105. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg2k_codec.py +0 -0
  106. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg2k_pyramid.py +0 -0
  107. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg_codec.py +0 -0
  108. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg_pyramid.py +0 -0
  109. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpegls_codec.py +0 -0
  110. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jxl_codec.py +0 -0
  111. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lerc_codec.py +0 -0
  112. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lif_codec.py +0 -0
  113. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lif_native.py +0 -0
  114. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lz4_codec.py +0 -0
  115. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lzma_codec.py +0 -0
  116. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mozjpeg_codec.py +0 -0
  117. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mozjpeg_pyramid.py +0 -0
  118. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc.py +0 -0
  119. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc_codec.py +0 -0
  120. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc_writer.py +0 -0
  121. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_n5.py +0 -0
  122. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nd2_codec.py +0 -0
  123. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nd2_native.py +0 -0
  124. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff.py +0 -0
  125. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff_pyramid.py +0 -0
  126. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff_writer.py +0 -0
  127. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti.py +0 -0
  128. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti_codec.py +0 -0
  129. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti_writer.py +0 -0
  130. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_none_codec.py +0 -0
  131. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nrrd.py +0 -0
  132. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nrrd_codec.py +0 -0
  133. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_numpy_codec.py +0 -0
  134. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_numpy_reader.py +0 -0
  135. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oib_codec.py +0 -0
  136. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oib_native.py +0 -0
  137. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oir_codec.py +0 -0
  138. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ole2.py +0 -0
  139. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ome_xml.py +0 -0
  140. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_omezarr.py +0 -0
  141. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_omezarr_writer.py +0 -0
  142. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_packints_codec.py +0 -0
  143. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_pcodec_codec.py +0 -0
  144. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_png_codec.py +0 -0
  145. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_predictor_codec.py +0 -0
  146. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_pyramid_build.py +0 -0
  147. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_qoi_codec.py +0 -0
  148. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_quantize_codec.py +0 -0
  149. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rcomp_codec.py +0 -0
  150. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rgbe.py +0 -0
  151. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rgbe_codec.py +0 -0
  152. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_scaled_pyramid.py +0 -0
  153. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_snappy_codec.py +0 -0
  154. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_sperr_codec.py +0 -0
  155. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_sz3_codec.py +0 -0
  156. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_http.py +0 -0
  157. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_pyramid.py +0 -0
  158. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_writer.py +0 -0
  159. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ultrahdr_codec.py +0 -0
  160. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_vsi_codec.py +0 -0
  161. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_vsi_pyramid.py +0 -0
  162. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_webp_codec.py +0 -0
  163. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zarr_codecs.py +0 -0
  164. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zfp_codec.py +0 -0
  165. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zstd_codec.py +0 -0
  166. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/__init__.py +0 -0
  167. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_aec.pyx +0 -0
  168. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_avif.pyx +0 -0
  169. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_b2nd.pyx +0 -0
  170. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bcdec.pyx +0 -0
  171. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bitshuffle.pyx +0 -0
  172. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_blosc2.pyx +0 -0
  173. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bmp.pyx +0 -0
  174. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_brotli.pyx +0 -0
  175. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_brunsli.pyx +0 -0
  176. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bytetools.pyx +0 -0
  177. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_charls.pyx +0 -0
  178. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_deflate.pyx +0 -0
  179. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_eer.pyx +0 -0
  180. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_gif.pyx +0 -0
  181. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_hcomp.pyx +0 -0
  182. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_heif.pyx +0 -0
  183. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_isal.pyx +0 -0
  184. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg.pyx +0 -0
  185. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg2k.pyx +0 -0
  186. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg_common.py +0 -0
  187. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpegxr.pyx +0 -0
  188. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jxl.pyx +0 -0
  189. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_lerc.pyx +0 -0
  190. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_lz4.pyx +0 -0
  191. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_mozjpeg.pyx +0 -0
  192. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_ndtiff.pyx +0 -0
  193. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_openjph.pyx +0 -0
  194. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_pcodec.pyx +0 -0
  195. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_plio.pyx +0 -0
  196. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_png.pyx +0 -0
  197. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_qoi.pyx +0 -0
  198. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_rcomp.pyx +0 -0
  199. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_registry.py +0 -0
  200. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_rgbe.pyx +0 -0
  201. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_snappy.pyx +0 -0
  202. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_sperr.pyx +0 -0
  203. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_sz3.pyx +0 -0
  204. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_tiff.pyx +0 -0
  205. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_uhdr.pyx +0 -0
  206. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_webp.pyx +0 -0
  207. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_zfp.pyx +0 -0
  208. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_zstd.pyx +0 -0
  209. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/avif.pxd +0 -0
  210. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd.pxd +0 -0
  211. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd_helpers.c +0 -0
  212. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd_helpers.h +0 -0
  213. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/bcdec.pxd +0 -0
  214. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/bitshuffle.pxd +0 -0
  215. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/blosc2.pxd +0 -0
  216. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/brotli.pxd +0 -0
  217. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/brunsli.pxd +0 -0
  218. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/charls.pxd +0 -0
  219. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/eer.pxd +0 -0
  220. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/giflib.pxd +0 -0
  221. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/heif.pxd +0 -0
  222. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/heif_shim.h +0 -0
  223. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/isal_shim.c +0 -0
  224. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/jpegxr_shim.h +0 -0
  225. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/lerc.pxd +0 -0
  226. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libaec.pxd +0 -0
  227. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libjxl.pxd +0 -0
  228. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libuhdr.pxd +0 -0
  229. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/lz4.pxd +0 -0
  230. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/mozjpeg.pxd +0 -0
  231. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/oc_decoder_vtable.h +0 -0
  232. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjpeg.pxd +0 -0
  233. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph.pxd +0 -0
  234. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph_shim.cpp +0 -0
  235. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph_shim.h +0 -0
  236. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/pcodec.pxd +0 -0
  237. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/qoi.pxd +0 -0
  238. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/rgbe.pxd +0 -0
  239. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/snappy.pxd +0 -0
  240. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/sperr.pxd +0 -0
  241. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/spng.pxd +0 -0
  242. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/sz3c.pxd +0 -0
  243. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/turbojpeg.pxd +0 -0
  244. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp.pxd +0 -0
  245. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp_shim.c +0 -0
  246. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp_shim.h +0 -0
  247. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zfp.pxd +0 -0
  248. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zlib_h.pxd +0 -0
  249. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zstd.pxd +0 -0
  250. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/__init__.py +0 -0
  251. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_io_helpers.py +0 -0
  252. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_optional_backend.py +0 -0
  253. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_range_index.py +0 -0
  254. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_sidecar_header.py +0 -0
  255. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_write_helpers.py +0 -0
  256. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/buffers.py +0 -0
  257. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/checksums.py +0 -0
  258. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/codec.py +0 -0
  259. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/color.py +0 -0
  260. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/errors.py +0 -0
  261. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/io.py +0 -0
  262. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/native_source.py +0 -0
  263. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/parallel.py +0 -0
  264. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/pipeline.py +0 -0
  265. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/pyramid.py +0 -0
  266. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/rows.py +0 -0
  267. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/scratch.py +0 -0
  268. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/segment_compression.py +0 -0
  269. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/streaming.py +0 -0
  270. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/tile_cache.py +0 -0
  271. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/verification.py +0 -0
  272. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/jxl.py +0 -0
  273. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/parallel.py +0 -0
  274. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/tiff_reader.py +0 -0
  275. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/uhdr.py +0 -0
  276. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/zarr.py +0 -0
  277. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/dependency_links.txt +0 -0
  278. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/requires.txt +0 -0
  279. {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/top_level.txt +0 -0
  280. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_auto_pyramid.py +0 -0
  281. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_avif_heif_params.py +0 -0
  282. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_avif_sequence.py +0 -0
  283. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_b2nd_file_reader.py +0 -0
  284. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcdec.py +0 -0
  285. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcn_bands.py +0 -0
  286. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcn_rounding.py +0 -0
  287. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bitshuffle_format.py +0 -0
  288. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_blosc2_partial.py +0 -0
  289. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_blosc2_threads.py +0 -0
  290. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bmp_headers.py +0 -0
  291. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bounded_pipeline.py +0 -0
  292. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_brunsli.py +0 -0
  293. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_byteplanes.py +0 -0
  294. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bytestream_standards.py +0 -0
  295. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_capability_manifest.py +0 -0
  296. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_charls.py +0 -0
  297. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_chunked_means_cheap.py +0 -0
  298. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_codec_registry.py +0 -0
  299. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_container_pipeline.py +0 -0
  300. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_container_streaming.py +0 -0
  301. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_core_codec_api.py +0 -0
  302. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus.py +0 -0
  303. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_codec_decode.py +0 -0
  304. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_manifest.py +0 -0
  305. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_native_fixtures.py +0 -0
  306. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_other.py +0 -0
  307. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_png.py +0 -0
  308. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_tiff.py +0 -0
  309. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_vendors.py +0 -0
  310. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_finishing.py +0 -0
  311. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_last.py +0 -0
  312. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_more.py +0 -0
  313. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_push.py +0 -0
  314. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_bounded_iteration.py +0 -0
  315. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_direct_decode.py +0 -0
  316. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_fixture.py +0 -0
  317. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_mixed_subblocks.py +0 -0
  318. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_parallel_write.py +0 -0
  319. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_pyramid.py +0 -0
  320. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_read_out.py +0 -0
  321. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_region_windows.py +0 -0
  322. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_segment_parts.py +0 -0
  323. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_slide_geometry.py +0 -0
  324. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_verification.py +0 -0
  325. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_write_pipeline.py +0 -0
  326. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_writer.py +0 -0
  327. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_writer_shuffle.py +0 -0
  328. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_data_source.py +0 -0
  329. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_decode_releases_gil.py +0 -0
  330. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_deflate.py +0 -0
  331. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_delta_parity.py +0 -0
  332. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom.py +0 -0
  333. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_encodings.py +0 -0
  334. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_parallel.py +0 -0
  335. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_slide_selection.py +0 -0
  336. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_wsi_pyramid.py +0 -0
  337. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicomweb.py +0 -0
  338. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_direct_filter_outputs.py +0 -0
  339. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm.py +0 -0
  340. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm_offsets.py +0 -0
  341. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm_synthetic.py +0 -0
  342. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_edge_cases.py +0 -0
  343. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer.py +0 -0
  344. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer_parallel.py +0 -0
  345. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer_worker_budget.py +0 -0
  346. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_emd.py +0 -0
  347. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_encode_comprehensive.py +0 -0
  348. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_error_handling.py +0 -0
  349. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fd_writes.py +0 -0
  350. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_filter_compat.py +0 -0
  351. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_filter_scratch.py +0 -0
  352. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fits.py +0 -0
  353. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fits_parallel.py +0 -0
  354. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gif.py +0 -0
  355. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gif_compositing.py +0 -0
  356. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gzip_presized.py +0 -0
  357. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_http.py +0 -0
  358. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_local.py +0 -0
  359. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_parallel.py +0 -0
  360. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_remote.py +0 -0
  361. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_heif_avif_features.py +0 -0
  362. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_heif_multi_image.py +0 -0
  363. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_htj2k_compat.py +0 -0
  364. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_htj2k_conformance.py +0 -0
  365. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_byte_savings.py +0 -0
  366. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_prefetch.py +0 -0
  367. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_unified.py +0 -0
  368. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_imaris.py +0 -0
  369. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_incremental_byte_codecs.py +0 -0
  370. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_io_chunked.py +0 -0
  371. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_isal.py +0 -0
  372. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg.py +0 -0
  373. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg2k_compat.py +0 -0
  374. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg2k_region.py +0 -0
  375. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpegxr.py +0 -0
  376. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jxl.py +0 -0
  377. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lerc.py +0 -0
  378. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lif_indexing.py +0 -0
  379. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lif_native.py +0 -0
  380. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_live_archives.py +0 -0
  381. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mozjpeg.py +0 -0
  382. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc.py +0 -0
  383. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc_mrcz_http.py +0 -0
  384. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc_nifti_writers.py +0 -0
  385. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_n5.py +0 -0
  386. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_output_sinks.py +0 -0
  387. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_parity.py +0 -0
  388. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_source_callbacks.py +0 -0
  389. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nd2_native.py +0 -0
  390. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_ndtiff.py +0 -0
  391. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nifti.py +0 -0
  392. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd.py +0 -0
  393. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd_iteration.py +0 -0
  394. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd_slices.py +0 -0
  395. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_numpy_codec_format.py +0 -0
  396. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_offset_readers.py +0 -0
  397. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_oib_indexing.py +0 -0
  398. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_oib_native.py +0 -0
  399. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_ome_xml.py +0 -0
  400. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_omezarr.py +0 -0
  401. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_omezarr_sharded_range.py +0 -0
  402. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_open_pyramid.py +0 -0
  403. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_openjph.py +0 -0
  404. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_optional_backend.py +0 -0
  405. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_owned_color_context.py +0 -0
  406. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_owned_image_decoders.py +0 -0
  407. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_parallel_jxl.py +0 -0
  408. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase4_filters.py +0 -0
  409. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase5_icc.py +0 -0
  410. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase6_codecs.py +0 -0
  411. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase7_cms.py +0 -0
  412. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_budget.py +0 -0
  413. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_catalog.py +0 -0
  414. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_executor.py +0 -0
  415. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_platform_branches.py +0 -0
  416. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_png_row_sessions.py +0 -0
  417. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_png_standard.py +0 -0
  418. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_public_output_buffers.py +0 -0
  419. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pyramid_batched_regions.py +0 -0
  420. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_qoi_standard.py +0 -0
  421. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_range_pipeline_completion.py +0 -0
  422. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rcomp_truncated_input.py +0 -0
  423. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_read_file_into.py +0 -0
  424. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_contract.py +0 -0
  425. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_source_kinds.py +0 -0
  426. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_streaming.py +0 -0
  427. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reference_parity.py +0 -0
  428. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rgbe.py +0 -0
  429. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rgbe_toplevel.py +0 -0
  430. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_scaled_pyramid.py +0 -0
  431. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_segment_encoder_binding.py +0 -0
  432. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_shared_io_regressions.py +0 -0
  433. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_sidecar_header.py +0 -0
  434. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_snappy.py +0 -0
  435. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_source_pool_lifetime.py +0 -0
  436. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_streaming_means_streaming.py +0 -0
  437. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_threading_policy.py +0 -0
  438. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tier1_scientific.py +0 -0
  439. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_codec_encode.py +0 -0
  440. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_fused_decode.py +0 -0
  441. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_http.py +0 -0
  442. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_native.py +0 -0
  443. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_parallel_decode.py +0 -0
  444. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_pipeline.py +0 -0
  445. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_predictor2_interop.py +0 -0
  446. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_predictor_loops.py +0 -0
  447. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_pyramid.py +0 -0
  448. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_read_path.py +0 -0
  449. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_reader.py +0 -0
  450. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_spool.py +0 -0
  451. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer.py +0 -0
  452. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer_float_predictor.py +0 -0
  453. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer_verification.py +0 -0
  454. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tile_cache.py +0 -0
  455. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_uhdr.py +0 -0
  456. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_unified_api.py +0 -0
  457. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_url_sources.py +0 -0
  458. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vendor_provenance.py +0 -0
  459. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_verified_encoding.py +0 -0
  460. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_version_consistency.py +0 -0
  461. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vsi_oir.py +0 -0
  462. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vsi_pyramid.py +0 -0
  463. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_animation.py +0 -0
  464. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_decode_options.py +0 -0
  465. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_encode_standard.py +0 -0
  466. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_wrapper_streams.py +0 -0
  467. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_contract.py +0 -0
  468. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_pipeline_completion.py +0 -0
  469. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_verification.py +0 -0
  470. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zarr_adapters.py +0 -0
  471. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zarr_region_fast_path.py +0 -0
  472. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zfp_blocks.py +0 -0
  473. {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zstd_owned_output.py +0 -0
@@ -10,6 +10,135 @@ 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.7.0 (2026-10-03)
14
+ ------------------
15
+
16
+ ``czi_recompress`` takes ``recompress_when``, a predicate over the reader's
17
+ ``CziSubBlockEntry``. Sub-blocks it accepts are decoded and re-encoded as
18
+ before; sub-blocks it rejects are carried across BYTE FOR BYTE, keeping their
19
+ original compression. The default stays ``None``, which re-encodes everything,
20
+ so existing callers are unaffected. The returned summary gains
21
+ ``recompressed`` and ``carried`` counts.
22
+
23
+ This exists because a sub-block's compression is not a detail to be
24
+ normalized away. Re-encoding one that is already compressed is wasted work,
25
+ and re-encoding a LOSSY one is destructive: the pixels are decoded from a
26
+ lossy encoding and written back losslessly, so the file grows and the
27
+ artifacts become permanent. Measured on a 505 MB Axioscan slide scan of 481
28
+ JPEG XR sub-blocks:
29
+
30
+ ==================================== ======== ========== ============
31
+ strategy time output vs source
32
+ ==================================== ======== ========== ============
33
+ carry JPEG XR across (predicate) 0.36 s 489 MB 0.97x
34
+ re-encode everything (no predicate) 12.6 s 1309 MB 2.59x
35
+ ==================================== ======== ========== ============
36
+
37
+ So the predicate is not a speed knob. Without it that file more than doubles
38
+ in size, takes 33x longer, and loses the option of ever recovering the
39
+ original encoding. This is what ZEISS's ``czicompress`` expresses with
40
+ ``--strategy``, and the three strategies map directly::
41
+
42
+ uncompressed lambda e: e.compression == 0
43
+ uncompressed+zstd lambda e: e.compression in (0, 5, 6)
44
+ all None
45
+
46
+ Supporting this needed a writer that can emit a sub-block it cannot itself
47
+ produce. ``_build_subblock`` gained ``encoded=``, which writes the payload
48
+ exactly as given and records the compression code as-is, with no encode step
49
+ and no look at the pixels. That is the only path by which a JPEG XR sub-block
50
+ can reach a file this writer wrote, and it is why carrying one across cannot
51
+ alter it. Verification is refused on that path: nothing was encoded, so there
52
+ is nothing to check. ``verify=True`` therefore applies only to the sub-blocks
53
+ that were re-encoded.
54
+
55
+ 0.6.0 (2026-10-03)
56
+ ------------------
57
+
58
+ ``czi_recompress`` takes an optional ``should_continue``: a zero-argument
59
+ callable polled once per sub-block, before that sub-block is read. When it
60
+ returns false the rewrite raises the new ``CziCancelled`` and the partial
61
+ output is removed. Existing callers are unaffected; the default is ``None``.
62
+
63
+ It is a plain callable rather than a ``threading.Event`` so a caller can pass
64
+ a deadline, a signal flag or a cancellation token just as easily, and nothing
65
+ in the writer needs to know which. ``CziCancelled`` subclasses
66
+ ``CziWriterError``, so code already catching that keeps working while code
67
+ that cares can tell "the user stopped it" from "the file is broken" without
68
+ matching on message text.
69
+
70
+ Why it exists: a caller replacing a subprocess (ZEISS's ``czicompress``) with
71
+ this function loses the ability to kill a process mid-file, and a Cancel
72
+ button that only takes effect between files is a visible regression on a
73
+ slide scan. Polling per sub-block takes effect within roughly ``workers``
74
+ sub-blocks, which on a 481-sub-block scan is sub-second.
75
+
76
+ An interrupted rewrite now removes ``dst`` on any exception, not only
77
+ cancellation -- a failed verification or a ``KeyboardInterrupt`` too. A CZI
78
+ missing sub-blocks still has a valid header and directory, so readers accept
79
+ it and the loss is silent; truncated-but-plausible is worse than absent.
80
+
81
+ CZI reading
82
+ ~~~~~~~~~~~
83
+
84
+ - ``CziReader(path, index=...)`` reads pixels from a payload index (offsets,
85
+ sizes, compressions, plane shape, pixel type) without reading the file
86
+ header, the directory or any sub-block header, and ``payload_index()``
87
+ returns one from an open reader. A caller that stores the index with its
88
+ own metadata reads planes with no metadata round trips over a network
89
+ share.
90
+ - ``read(indices=[...])`` reads chosen sub-blocks in parallel into one
91
+ stack. ``attachments()`` and ``read_attachment(name)`` return embedded
92
+ files (Thumbnail, TimeStamps, Label ...) exactly as stored.
93
+ - Files on disk are read with positional reads instead of a memory map: a
94
+ cold plane off a network share was paged in a cluster at a time, and one
95
+ exact-range read (split into concurrent pieces of about 1 MiB when only a
96
+ few planes are read) fetches it in a fraction of the time. The file
97
+ header is fetched when first needed, the directory comes in one request,
98
+ and a sub-block's header and payload in one. The directory and metadata
99
+ are read on first use, so a corrupt directory now raises ``CziError`` on
100
+ first use rather than in the constructor.
101
+ - Uncompressed stacks are read on several threads. They were split into 8
102
+ MiB tasks, the size zstd reads use, so nine 2 MiB planes made three
103
+ tasks, which the worker policy ran on one thread; they now go one plane
104
+ per 2 MiB task, and two tasks are enough to share. Warm, that stack reads
105
+ 1.63x faster than a reader copying from an mmap on 128-core Linux, where
106
+ it had been 0.59x as fast (1.51x and 0.88x on a 20-core Mac). Slide
107
+ regions that need two or three tiles decode them in parallel for the same
108
+ reason.
109
+ - JPEG XR (compression 4, most slide scans) decodes through the copy of
110
+ jxrlib maintained inside ZEISS's libCZI (BSD-2-Clause, Microsoft), which
111
+ ZEISS reworked for speed. No compiler flags brought the upstream 2019.10.9
112
+ release within 10% of aicspylibczi on x86-64 Linux; with libCZI's copy a
113
+ slide region read inside one tile takes 0.99x aicspylibczi's time there
114
+ and is 1.08x faster on a 20-core Mac (upstream: 0.90x and 0.93x). The
115
+ wheels build it static, from a pinned libCZI commit, with ``NDEBUG``
116
+ (upstream's Makefile left 68 ``assert()`` calls in the decode loop) and
117
+ link-time optimization. A jxrlib built by ``bench/build_codec_libs.sh``
118
+ is now linked by path, so a system jxrlib earlier on the library path
119
+ can no longer replace it. Upstream jxrlib (Windows wheels, distribution
120
+ packages) still works.
121
+ - The hi/lo byte unshuffle of zstd sub-blocks uses a byte loop for 2-byte
122
+ pixels under GCC and Clang, which GCC vectorizes better: 1.46x faster for
123
+ a 1000 x 1000 plane and 1.11x for 2000 x 2000 on x86-64 Linux. Clang ties;
124
+ MSVC keeps the word form.
125
+ - Payload buffers are shared and reused, and the read pool holds at most
126
+ the 32 threads one read uses (it was twice the CPU count).
127
+
128
+ TIFF reading
129
+ ~~~~~~~~~~~~
130
+
131
+ - A multi-page TIFF decodes each page straight into its slice of one
132
+ output, instead of decoding pages separately and stacking them, a second
133
+ copy of the whole stack. A stack stored as plain pixels, end to end in
134
+ the file (what writers produce for a contiguous series), is read as one
135
+ span by parallel positioned reads: a 23-page 2000 x 2000 uint16 stack in
136
+ 10.8 ms where tifffile takes 33.8 ms (128-core Linux, warm); page by page
137
+ it took 59.6 ms. ``TiffPage.asarray`` takes ``out=``.
138
+ - Decode workers are sized by whichever asks for more: 1 MiB of output each,
139
+ or 256 KiB of compressed input each. Output alone held a deflate image
140
+ with 6.8 MB of compressed data in 31 strips to 7 workers.
141
+
13
142
  0.5.0 (2026-10-01)
14
143
  ------------------
15
144
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opencodecs
3
- Version: 0.5.0
3
+ Version: 0.7.0
4
4
  Summary: Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)
5
5
  Author: Kevin Cutler
6
6
  License-Expression: BSD-3-Clause
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
7
7
 
8
8
  [project]
9
9
  name = "opencodecs"
10
- version = "0.5.0"
10
+ version = "0.7.0"
11
11
  description = "Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"
@@ -450,6 +450,13 @@ _PROBE_PREFIXES: list[Path] = [
450
450
  # ~/Library/Caches/opencodecs/<lib>/ via bench/build_codec_libs.sh.
451
451
  # Probe these so the generic header/lib search picks them up.
452
452
  _OC_USER_CACHE = _user_cache()
453
+
454
+ # jxrlib as bench/build_codec_libs.sh builds it: static libraries and the
455
+ # headers behind include/jxrlib/JXRGlue.h, in the per-user cache prefix.
456
+ _JXR_BUILT = _OC_USER_CACHE / "libs"
457
+ if not all((_JXR_BUILT / f).is_file() for f in (
458
+ "lib/libjpegxr.a", "lib/libjxrglue.a", "include/jxrlib/JXRGlue.h")):
459
+ _JXR_BUILT = None
453
460
  for _libdir in (
454
461
  "sz3", "pcodec", "sperr", "brunsli", "lerc", "zstd", "brotli", "giflib",
455
462
  # zfp: brew's bottle is built without -march tuning and is ~17%
@@ -1412,6 +1419,11 @@ extensions = [
1412
1419
  # (most Zeiss whole-slide scans). jxrlib installs its headers under
1413
1420
  # include/jxrlib/ and needs __ANSI__ off Windows; the shim declares
1414
1421
  # the in-memory stream constructor its public headers leave out.
1422
+ # The copy bench/build_codec_libs.sh builds (libCZI's, static) is
1423
+ # linked by path, with its headers first: by -l, a system jxrlib in
1424
+ # an earlier library directory (Homebrew's) won the link while the
1425
+ # headers came from the build, leaving the extension calling names
1426
+ # nothing defines.
1415
1427
  Extension(
1416
1428
  name="opencodecs.codecs._jpegxr",
1417
1429
  sources=[
@@ -1421,17 +1433,25 @@ extensions = [
1421
1433
  include_dirs=[
1422
1434
  str(PKG_CODECS),
1423
1435
  numpy.get_include(),
1436
+ *([str(_JXR_BUILT / "include" / "jxrlib")] if _JXR_BUILT else []),
1424
1437
  *[str(Path(d) / "jxrlib")
1425
1438
  for d in _resolve_include_dirs("jxrlib/JXRGlue.h")],
1426
1439
  ],
1427
- library_dirs=_lib_dirs_for_probes(),
1440
+ library_dirs=[] if _JXR_BUILT else _lib_dirs_for_probes(),
1428
1441
  # conda-forge on Windows ships static libjxrglue.lib / libjpegxr.lib.
1429
- libraries=[_lib_name("jxrglue", "libjxrglue"), _lib_name("jpegxr", "libjpegxr")],
1442
+ libraries=[] if _JXR_BUILT else [_lib_name("jxrglue", "libjxrglue"),
1443
+ _lib_name("jpegxr", "libjpegxr")],
1444
+ extra_objects=[str(_JXR_BUILT / "lib" / "libjxrglue.a"),
1445
+ str(_JXR_BUILT / "lib" / "libjpegxr.a")] if _JXR_BUILT else [],
1430
1446
  define_macros=[
1431
1447
  ("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION"),
1432
1448
  *([] if _WINDOWS else [("__ANSI__", "1")]),
1433
1449
  ("DISABLE_PERF_MEASUREMENT", "1"),
1434
1450
  ],
1451
+ # bench/build_codec_libs.sh builds jxrlib with -flto; linking with it
1452
+ # too lets the decoder inline across the library (37.7 against
1453
+ # 39.4 ms per slide tile). Harmless with a system jxrlib.
1454
+ extra_link_args=[] if _WINDOWS else ["-flto"],
1435
1455
  language="c",
1436
1456
  ),
1437
1457
  # JPEG-2000 via OpenJPEG. The header lives in a versioned subdir on
@@ -70,7 +70,7 @@ from ._fits import FitsStream, FitsHDU, imread as fits_imread
70
70
  from ._rgbe import encode as rgbe_encode, decode as rgbe_decode, \
71
71
  imread as rgbe_imread, imwrite as rgbe_imwrite
72
72
  from ._czi_reader import CziPyramidReader
73
- from ._czi_writer import (CziWriter, CziPyramidWriter,
73
+ from ._czi_writer import (CziWriter, CziPyramidWriter, CziCancelled,
74
74
  czi_recompress, subblock_dims)
75
75
  from ._tiff_pyramid import TiffPyramidReader
76
76
  from ._tiff_http import HTTPDataSource, FileDataSource
@@ -345,7 +345,8 @@ __all__ = [
345
345
  "FitsStream", "FitsHDU", "fits_imread",
346
346
  "rgbe_encode", "rgbe_decode", "rgbe_imread", "rgbe_imwrite",
347
347
  "CziPyramidReader",
348
- "CziWriter", "CziPyramidWriter", "czi_recompress", "subblock_dims",
348
+ "CziWriter", "CziPyramidWriter", "CziCancelled",
349
+ "czi_recompress", "subblock_dims",
349
350
  ]
350
351
 
351
- __version__ = "0.5.0"
352
+ __version__ = "0.7.0"