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