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.
- {opencodecs-0.5.0 → opencodecs-0.7.0}/CHANGES.rst +129 -0
- {opencodecs-0.5.0/src/opencodecs.egg-info → opencodecs-0.7.0}/PKG-INFO +1 -1
- {opencodecs-0.5.0 → opencodecs-0.7.0}/pyproject.toml +1 -1
- {opencodecs-0.5.0 → opencodecs-0.7.0}/setup.py +22 -2
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/__init__.py +4 -3
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_reader.py +676 -87
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_writer.py +166 -12
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_codec.py +112 -23
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/byteplanes.h +13 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/jpegxr_shim.c +17 -4
- {opencodecs-0.5.0 → opencodecs-0.7.0/src/opencodecs.egg-info}/PKG-INFO +1 -1
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/SOURCES.txt +3 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_final.py +3 -2
- opencodecs-0.7.0/tests/test_czi_pread_indices.py +264 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_read_dispatch.py +35 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_recompress.py +223 -1
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_region_index.py +4 -1
- opencodecs-0.7.0/tests/test_tiff_stack_read.py +105 -0
- opencodecs-0.7.0/tests/test_tiff_workers.py +29 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/VENDOR.toml +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/README.md +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bcdec/bcdec.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/README.rst +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_core.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/bitshuffle_internals.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/bitshuffle/iochain.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/License.txt +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hcompress.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fits_hdecompress_api.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/fitsio2.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/ricecomp.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/cfitsio/ricecomp.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/spng.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/libspng/spng.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/oc_eer.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_eer/oc_eer.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/oc_giflzw.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_giflzw/oc_giflzw.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/qoi/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/qoi/qoi.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/rgbe/rgbe.txt +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/3rdparty/vendor_hashes.json +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/LICENSE +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/MANIFEST.in +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/README.md +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/THIRD-PARTY.md +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/bench/build_libjxl.sh +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/patches/libjxl/README.md +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/setup.cfg +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_aec_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_avif_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_avif_heif_params.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bcn_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bitshuffle_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_blosc2_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bmp_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_brotli_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_byteshuffle_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_cms_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_deflate_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicom_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicomrle_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dicomweb.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dm.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_dm_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_eer_reader.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_emd.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_emd_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_filter_args.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_gif_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_gzip_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_h5_common.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_heif_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_htj2k_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_htj2k_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_imaris.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg2k_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg2k_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpeg_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jpegls_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lerc_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lz4_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mozjpeg_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mozjpeg_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_mrc_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_n5.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ndtiff_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nifti_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nrrd.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_nrrd_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_numpy_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_numpy_reader.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_omezarr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_omezarr_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_packints_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_pcodec_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_png_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_predictor_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_qoi_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_quantize_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rcomp_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rgbe.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_rgbe_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_scaled_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_snappy_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_sperr_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_sz3_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_http.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_tiff_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_vsi_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_webp_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/_zstd_codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/__init__.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_aec.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_avif.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_b2nd.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bcdec.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bitshuffle.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_blosc2.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bmp.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_brotli.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_brunsli.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_bytetools.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_charls.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_deflate.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_eer.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_gif.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_hcomp.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_heif.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_isal.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg2k.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpeg_common.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jpegxr.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_jxl.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_lerc.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_lz4.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_mozjpeg.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_ndtiff.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_openjph.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_pcodec.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_plio.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_png.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_qoi.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_rcomp.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_registry.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_rgbe.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_snappy.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_sperr.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_sz3.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_tiff.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_uhdr.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_webp.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_zfp.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/_zstd.pyx +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/avif.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd_helpers.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/b2nd_helpers.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/bcdec.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/bitshuffle.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/blosc2.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/brotli.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/brunsli.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/charls.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/eer.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/giflib.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/heif.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/heif_shim.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/isal_shim.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/jpegxr_shim.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/lerc.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libaec.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libjxl.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/libuhdr.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/lz4.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/mozjpeg.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/oc_decoder_vtable.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjpeg.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph_shim.cpp +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/openjph_shim.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/pcodec.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/qoi.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/rgbe.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/snappy.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/sperr.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/spng.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/sz3c.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/turbojpeg.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp_shim.c +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/webp_shim.h +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zfp.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zlib_h.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/codecs/zstd.pxd +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_range_index.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_sidecar_header.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/_write_helpers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/buffers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/checksums.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/io.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/native_source.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/pipeline.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/rows.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/scratch.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/segment_compression.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/streaming.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/tile_cache.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/core/verification.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/tiff_reader.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/uhdr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_avif_heif_params.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_avif_sequence.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_b2nd_file_reader.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcdec.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcn_bands.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bcn_rounding.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bitshuffle_format.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_blosc2_partial.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_blosc2_threads.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bmp_headers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bounded_pipeline.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_brunsli.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_byteplanes.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_bytestream_standards.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_capability_manifest.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_charls.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_chunked_means_cheap.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_codec_registry.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_container_pipeline.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_container_streaming.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_codec_decode.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_manifest.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_native_fixtures.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_png.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_coverage_push.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_bounded_iteration.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_direct_decode.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_mixed_subblocks.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_parallel_write.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_read_out.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_region_windows.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_segment_parts.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_slide_geometry.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_verification.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_write_pipeline.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_czi_writer_shuffle.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_data_source.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_decode_releases_gil.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_deflate.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_delta_parity.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_encodings.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_slide_selection.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicom_wsi_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_direct_filter_outputs.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm_offsets.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_dm_synthetic.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer_parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_eer_worker_budget.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_emd.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_encode_comprehensive.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_error_handling.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fd_writes.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_filter_compat.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_filter_scratch.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fits.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_fits_parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gif.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gif_compositing.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_gzip_presized.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_parallel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_hdf5_remote.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_heif_multi_image.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_htj2k_compat.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_htj2k_conformance.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_http_unified.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_imaris.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_incremental_byte_codecs.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_isal.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg2k_compat.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpeg2k_region.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jpegxr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_jxl.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lerc.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lif_indexing.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_lif_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_live_archives.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mozjpeg.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc_mrcz_http.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_mrc_nifti_writers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_n5.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_output_sinks.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_parity.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_native_source_callbacks.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nifti.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd_iteration.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_nrrd_slices.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_numpy_codec_format.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_offset_readers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_oib_indexing.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_oib_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_omezarr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_omezarr_sharded_range.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_openjph.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_owned_color_context.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_owned_image_decoders.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase4_filters.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase6_codecs.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_budget.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_catalog.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pipeline_executor.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_platform_branches.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_png_row_sessions.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_png_standard.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_public_output_buffers.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_pyramid_batched_regions.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_qoi_standard.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_range_pipeline_completion.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rcomp_truncated_input.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_read_file_into.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_contract.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_source_kinds.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reader_streaming.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_reference_parity.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rgbe.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_rgbe_toplevel.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_scaled_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_segment_encoder_binding.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_shared_io_regressions.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_sidecar_header.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_snappy.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_source_pool_lifetime.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_streaming_means_streaming.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_threading_policy.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tier1_scientific.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_codec_encode.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_fused_decode.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_native.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_parallel_decode.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_pipeline.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_predictor2_interop.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_predictor_loops.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_read_path.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_spool.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer_float_predictor.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tiff_writer_verification.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_tile_cache.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_uhdr.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_unified_api.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_url_sources.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vendor_provenance.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_verified_encoding.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_version_consistency.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_vsi_pyramid.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_animation.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_decode_options.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_webp_encode_standard.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_wrapper_streams.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_contract.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_pipeline_completion.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_writer_verification.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zarr_adapters.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zarr_region_fast_path.py +0 -0
- {opencodecs-0.5.0 → opencodecs-0.7.0}/tests/test_zfp_blocks.py +0 -0
- {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
|
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "opencodecs"
|
|
10
|
-
version = "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"),
|
|
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", "
|
|
348
|
+
"CziWriter", "CziPyramidWriter", "CziCancelled",
|
|
349
|
+
"czi_recompress", "subblock_dims",
|
|
349
350
|
]
|
|
350
351
|
|
|
351
|
-
__version__ = "0.
|
|
352
|
+
__version__ = "0.7.0"
|