opencodecs 0.3.0__tar.gz → 0.4.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.3.0 → opencodecs-0.4.0}/CHANGES.rst +149 -0
- {opencodecs-0.3.0/src/opencodecs.egg-info → opencodecs-0.4.0}/PKG-INFO +33 -2
- {opencodecs-0.3.0 → opencodecs-0.4.0}/README.md +32 -1
- {opencodecs-0.3.0 → opencodecs-0.4.0}/bench/build_libjxl.sh +1 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/pyproject.toml +1 -1
- {opencodecs-0.3.0 → opencodecs-0.4.0}/setup.py +350 -633
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/__init__.py +11 -5
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_cms_codec.py +4 -2
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_czi_reader.py +129 -33
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_czi_writer.py +213 -25
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dicom_codec.py +2 -1
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ndtiff.py +6 -35
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ndtiff_writer.py +28 -154
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_omezarr.py +2 -1
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_tiff_codec.py +125 -4
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_tiff_http.py +3 -28
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_tiff_writer.py +16 -90
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/__init__.py +38 -19
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_avif.pyx +23 -12
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_deflate.pyx +59 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_isal.pyx +6 -7
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_jxl.pyx +67 -1
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_tiff.pyx +291 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_uhdr.pyx +24 -16
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_zstd.pyx +47 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/byteplanes.h +3 -7
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/isal_shim.c +6 -18
- opencodecs-0.4.0/src/opencodecs/codecs/oc_decoder_vtable.h +28 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/_write_helpers.py +75 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/io.py +197 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/parallel.py +161 -18
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/pipeline.py +6 -7
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/parallel.py +15 -16
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/tiff_reader.py +8 -8
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/uhdr.py +25 -25
- {opencodecs-0.3.0 → opencodecs-0.4.0/src/opencodecs.egg-info}/PKG-INFO +33 -2
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs.egg-info/SOURCES.txt +9 -0
- opencodecs-0.4.0/tests/test_czi_mixed_subblocks.py +82 -0
- opencodecs-0.4.0/tests/test_czi_read_dispatch.py +199 -0
- opencodecs-0.4.0/tests/test_czi_recompress.py +240 -0
- opencodecs-0.4.0/tests/test_fd_writes.py +94 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_omezarr_sharded_range.py +8 -1
- opencodecs-0.4.0/tests/test_platform_branches.py +122 -0
- opencodecs-0.4.0/tests/test_read_file_into.py +117 -0
- opencodecs-0.4.0/tests/test_threading_policy.py +283 -0
- opencodecs-0.4.0/tests/test_tiff_fused_decode.py +126 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_parallel_decode.py +12 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/VENDOR.toml +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bcdec/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bcdec/README.md +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bcdec/bcdec.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/README.rst +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/bitshuffle.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/bitshuffle.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/bitshuffle_core.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/bitshuffle_internals.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/bitshuffle/iochain.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/License.txt +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/fits_hcompress.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/fits_hdecompress_api.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/fitsio2.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/ricecomp.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/cfitsio/ricecomp.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/libspng/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/libspng/spng.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/libspng/spng.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_eer/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_eer/oc_eer.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_eer/oc_eer.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_giflzw/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_giflzw/oc_giflzw.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_giflzw/oc_giflzw.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_tifflzw/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/qoi/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/qoi/qoi.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/rgbe/rgbe.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/rgbe/rgbe.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/rgbe/rgbe.txt +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/3rdparty/vendor_hashes.json +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/LICENSE +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/MANIFEST.in +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/THIRD-PARTY.md +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/patches/libjxl/README.md +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/setup.cfg +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_aec_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_avif_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_bcn_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_bitshuffle_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_blosc2_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_bmp_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_brotli_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_byteshuffle_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_deflate_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dicom.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dicom_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dicomrle_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dicomweb.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dm.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_dm_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_eer_reader.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_emd.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_emd_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_gif_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_gzip_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_h5_common.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_heif_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_htj2k_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_htj2k_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_imaris.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jpeg2k_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jpeg2k_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jpeg_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jpeg_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jpegls_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_lerc_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_lz4_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_mozjpeg_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_mozjpeg_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_mrc.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_mrc_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_mrc_writer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_n5.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nifti.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nifti_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nifti_writer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nrrd.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_nrrd_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_numpy_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_numpy_reader.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_omezarr_writer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_packints_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_pcodec_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_png_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_predictor_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_qoi_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_quantize_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_rcomp_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_rgbe.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_rgbe_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_scaled_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_snappy_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_sperr_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_sz3_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_vsi_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_webp_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/_zstd_codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_aec.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_b2nd.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_bcdec.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_bitshuffle.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_blosc2.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_bmp.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_brotli.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_brunsli.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_bytetools.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_charls.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_eer.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_gif.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_hcomp.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_heif.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_jpeg.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_jpeg2k.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_jpegxr.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_lerc.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_lz4.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_mozjpeg.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_ndtiff.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_openjph.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_pcodec.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_plio.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_png.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_qoi.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_rcomp.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_registry.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_rgbe.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_snappy.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_sperr.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_sz3.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_webp.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/_zfp.pyx +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/avif.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/b2nd.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/b2nd_helpers.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/b2nd_helpers.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/bcdec.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/bitshuffle.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/blosc2.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/brotli.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/brunsli.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/charls.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/eer.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/giflib.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/heif.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/heif_shim.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/jpegxr_shim.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/jpegxr_shim.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/lerc.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/libaec.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/libjxl.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/libuhdr.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/lz4.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/mozjpeg.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/openjpeg.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/openjph.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/openjph_shim.cpp +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/openjph_shim.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/pcodec.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/qoi.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/rgbe.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/snappy.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/sperr.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/spng.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/sz3c.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/turbojpeg.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/webp.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/webp_shim.c +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/webp_shim.h +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/zfp.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/zlib_h.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/codecs/zstd.pxd +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/_range_index.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/_sidecar_header.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/buffers.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/checksums.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/native_source.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/rows.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/scratch.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/segment_compression.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/streaming.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/tile_cache.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/core/verification.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/tifffile_patch.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_avif_sequence.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_b2nd_file_reader.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_bcdec.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_bcn_bands.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_blosc2_partial.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_blosc2_threads.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_bounded_pipeline.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_brunsli.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_capability_manifest.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_charls.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_chunked_means_cheap.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_codec_registry.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_container_pipeline.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_container_streaming.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_codec_decode.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_manifest.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_native_fixtures.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_png.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_coverage_final.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_coverage_push.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_bounded_iteration.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_direct_decode.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_parallel_write.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_read_out.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_region_index.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_region_windows.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_segment_parts.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_slide_geometry.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_verification.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_write_pipeline.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_czi_writer_shuffle.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_data_source.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_decode_releases_gil.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_deflate.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_delta_parity.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicom.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicom_encodings.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicom_parallel.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicom_slide_selection.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicom_wsi_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_direct_filter_outputs.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dm.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dm_offsets.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_dm_synthetic.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_eer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_eer_parallel.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_eer_worker_budget.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_emd.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_encode_comprehensive.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_error_handling.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_filter_scratch.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_fits.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_fits_parallel.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_gif.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_gzip_presized.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_hdf5_parallel.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_hdf5_remote.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_heif_multi_image.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_htj2k_conformance.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_http_unified.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_imaris.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_incremental_byte_codecs.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_isal.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_jpeg2k_region.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_jpegxr.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_jxl.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_lif_indexing.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_lif_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_live_archives.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_mozjpeg.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_mrc.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_mrc_mrcz_http.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_mrc_nifti_writers.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_n5.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_native_output_sinks.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_native_parity.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_native_source_callbacks.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_nifti.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_nrrd.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_nrrd_iteration.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_nrrd_slices.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_offset_readers.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_oib_indexing.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_oib_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_omezarr.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_openjph.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_owned_color_context.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_owned_image_decoders.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_phase4_filters.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_phase6_codecs.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_pipeline_budget.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_pipeline_catalog.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_pipeline_executor.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_png_row_sessions.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_public_output_buffers.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_pyramid_batched_regions.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_range_pipeline_completion.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_rcomp_truncated_input.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_reader_contract.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_reader_source_kinds.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_reader_streaming.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_reference_parity.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_rgbe.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_scaled_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_segment_encoder_binding.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_shared_io_regressions.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_sidecar_header.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_snappy.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_source_pool_lifetime.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_streaming_means_streaming.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tier1_scientific.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_codec_encode.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_native.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_pipeline.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_read_path.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_spool.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_writer_float_predictor.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tiff_writer_verification.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tifffile_patch.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_tile_cache.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_uhdr.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_unified_api.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_url_sources.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_vendor_provenance.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_verified_encoding.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_version_consistency.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_vsi_pyramid.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_webp_animation.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_writer_contract.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_writer_pipeline_completion.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_writer_verification.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_zarr_adapters.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_zarr_region_fast_path.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_zfp_blocks.py +0 -0
- {opencodecs-0.3.0 → opencodecs-0.4.0}/tests/test_zstd_owned_output.py +0 -0
|
@@ -10,6 +10,155 @@ 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.4.0 (2026-09-29)
|
|
14
|
+
------------------
|
|
15
|
+
|
|
16
|
+
How opencodecs spends threads, especially when several of your threads
|
|
17
|
+
call it at once, and one place for each thing it does differently by
|
|
18
|
+
operating system. Figures compare against 0.3.1 on a 20-core arm64 Mac and
|
|
19
|
+
a 64-core x86-64 Linux workstation: both builds in fresh processes,
|
|
20
|
+
alternating, each process one sample, identical decoded pixels required.
|
|
21
|
+
|
|
22
|
+
- **One shared pool.** ``run_batched``, ``map_batches`` and ``map_bounded``
|
|
23
|
+
(under TIFF, DICOM, EER, FITS, HDF5, CZI, Zarr and more) built a
|
|
24
|
+
ThreadPoolExecutor per call. They now share one process-wide pool. A
|
|
25
|
+
144-tile TIFF reads 1.34x faster on Linux (9.2 to 6.9 ms) and 1.11x on
|
|
26
|
+
the Mac.
|
|
27
|
+
- **Concurrent callers share instead of multiplying.** A call counts as
|
|
28
|
+
in flight for its whole duration, and an automatic worker count is its
|
|
29
|
+
share of what the calls in flight divide: the pool helpers' workers,
|
|
30
|
+
which hand the GIL back and forth, share 32 between calls (each call
|
|
31
|
+
still takes at most 16), and native codec threads share the CPU count.
|
|
32
|
+
A lone call keeps full width and an explicit ``numthreads`` is honored
|
|
33
|
+
as given. With the TIFF work below, two and eight threads reading a
|
|
34
|
+
tiled deflate TIFF at once: 3.46x and 4.63x on Linux, 3.61x and 4.01x
|
|
35
|
+
on the Mac; eight JPEG XL readers 1.86x on Linux and 1.03x on the Mac.
|
|
36
|
+
- **JPEG XL sizes its threads to the image.** One-shot ``decode`` used
|
|
37
|
+
libjxl's default of one thread per hardware thread, all created for
|
|
38
|
+
each call whatever the image size. It now reads the size from the
|
|
39
|
+
header and uses about one thread per 64K pixels, up to 20. 512 x 512:
|
|
40
|
+
2.54x faster on Linux (12.9 to 5.1 ms, 5 threads instead of 129) and
|
|
41
|
+
1.24x on the Mac; 2048 x 2048: 1.10x for one caller and 1.56x for
|
|
42
|
+
eight on Linux, parity on the Mac.
|
|
43
|
+
- **AVIF decode uses up to 8 threads by default** instead of one per
|
|
44
|
+
core: AV1 decodes in parallel across tiles, and past 8 threads there
|
|
45
|
+
was nothing left to gain. 1.07 to 1.13x on Linux, 1.00 to 1.03x on the
|
|
46
|
+
Mac. ``numthreads=0`` still means every core.
|
|
47
|
+
- **TIFF segments decode, un-predict and land in one native call.** A
|
|
48
|
+
tile used to be inflated in one call, un-predicted in a second and
|
|
49
|
+
copied into the output with numpy, with a GIL handoff between each,
|
|
50
|
+
which is what capped concurrent readers. Now a batch of segments goes
|
|
51
|
+
through all three under one GIL release (``_tiff.decode_segments_into``),
|
|
52
|
+
for no compression, deflate, zstd, LZW and PackBits with predictors 1
|
|
53
|
+
to 3, and a whole strip decompresses straight into its output rows.
|
|
54
|
+
zlib and zstd are reached through a C table their own modules export,
|
|
55
|
+
so ``_tiff`` links neither. Separate planes, bilevel and byte-swapped
|
|
56
|
+
files keep the general path, as does any segment the native call
|
|
57
|
+
rejects, which also keeps its exact error. Against 0.3.1, a tiled 4096 x
|
|
58
|
+
4096 uint16 image with the horizontal predictor: one reader 2.94x on the
|
|
59
|
+
Mac and 2.38x on Linux, eight readers 3.65x on both; a 144-tile image
|
|
60
|
+
1.98x and 1.96x; the same pixels in strips 1.28x and 1.37x for one
|
|
61
|
+
reader, 1.59x and 1.94x for eight. Serial reads are unchanged or faster.
|
|
62
|
+
- **Uncompressed TIFF strips laid out end to end go straight into the
|
|
63
|
+
output** (``core.io.read_file_into``): positioned reads split across
|
|
64
|
+
the shared pool, where one thread used to copy them out of the file
|
|
65
|
+
mapping. One reader 2.29x on the Mac and 3.79x on Linux; with
|
|
66
|
+
``numthreads=1``, 1.65x on the Mac and level on Linux; eight readers
|
|
67
|
+
1.66x on Linux and level on the Mac, where both versions copy from the
|
|
68
|
+
mapping. One choice depends on the kernel, and is named for it: macOS
|
|
69
|
+
copies one thread's worth of bytes out of the reader's file mapping
|
|
70
|
+
faster than it reads them, and Linux reads faster, alone and with
|
|
71
|
+
eight readers alike, so that is what each does.
|
|
72
|
+
- The README compares TIFF reads directly with tifffile: 2.7 to 4.3x
|
|
73
|
+
faster on the Mac and 4.0 to 7.7x on Linux for one reader of a tiled
|
|
74
|
+
compressed image, up to 13.4x for eight concurrent readers.
|
|
75
|
+
- **Ultra HDR** runs its kernels on the shared pool and its encode and
|
|
76
|
+
decode steps on a persistent pool of their own, instead of building up
|
|
77
|
+
to five pools per call: encode 1.06x on the Mac and 1.30x on Linux,
|
|
78
|
+
decode 1.09x on both.
|
|
79
|
+
- **Each operating-system difference is named once.** ``setup.py``
|
|
80
|
+
states its platform conventions in one place and links the library
|
|
81
|
+
files it finds by path on every platform; descriptor reads and writes,
|
|
82
|
+
Windows' binary-mode flag and uncached opens each have one
|
|
83
|
+
implementation; capabilities are probed instead of inferred from the
|
|
84
|
+
platform. A test lists the nine operating-system branches left in the
|
|
85
|
+
package and ``setup.py``, each with the reason it cannot be a probe,
|
|
86
|
+
and fails on a new one.
|
|
87
|
+
- **A CZI file's compression can be rewritten without losing its
|
|
88
|
+
container.** ``czi_recompress(src, dst)`` re-encodes every sub-block
|
|
89
|
+
and keeps its dimensions, scene, mosaic index and pyramid level, and
|
|
90
|
+
the metadata XML; ``write_frame`` and ``write_many`` take a sub-block's
|
|
91
|
+
own dimension list, and ``subblock_dims`` builds one from a reader's
|
|
92
|
+
entry. libCZI reads the output of a 481 sub-block slide scan and
|
|
93
|
+
agrees with the input. 185 MB takes 122 ms against 340 ms for ZEISS's
|
|
94
|
+
czicompress, and 297 ms with ``verify=True``, which decodes every
|
|
95
|
+
sub-block back before it is written.
|
|
96
|
+
- **Windows wheels use libdeflate**, as macOS and Linux wheels already
|
|
97
|
+
did. conda-forge names its import library ``deflate.lib``, which the
|
|
98
|
+
old probe did not recognize, so Windows fell back to zlib. On a Windows
|
|
99
|
+
VM, against 0.3.1: deflate encode 2.79x and decode 1.79x, PNG encode
|
|
100
|
+
2.82x (decode stays on zlib, level), a tiled deflate TIFF read 1.33x;
|
|
101
|
+
output at the default level is 0.7% (deflate) to 1.5% (PNG) larger,
|
|
102
|
+
the same trade macOS and Linux make.
|
|
103
|
+
- ``import opencodecs`` on macOS ran ``mount`` once per extension, about
|
|
104
|
+
4.5 ms each; the mount table is now read once, about 200 ms per import.
|
|
105
|
+
- Fix: the DICOM codec dropped ``numthreads``, so ``numthreads=1`` still
|
|
106
|
+
decoded on several threads.
|
|
107
|
+
- Fix: the NDTiff writer counted the buffers after a partial ``writev``
|
|
108
|
+
twice, so its position ran ahead of the file, and ``tiff_reader`` took
|
|
109
|
+
one ``os.pread`` as complete even when it returned short.
|
|
110
|
+
- Fix (building from source): with a per-user cache of source-built
|
|
111
|
+
libraries present, a Windows build handed MSVC ``.so`` paths and
|
|
112
|
+
``-Wl,-rpath`` flags; the MozJPEG extension on Linux had no rpath to its
|
|
113
|
+
own library, so the loader could take the system's libturbojpeg for it;
|
|
114
|
+
``bench/build_codec_libs.sh`` passed ``-mcpu=apple-m1`` on Intel Macs.
|
|
115
|
+
- Fix: pools created before ``os.fork()`` hung in the child, which
|
|
116
|
+
inherits the pool object but none of its threads (the first submit
|
|
117
|
+
in a forked DataLoader-style worker waited forever). A forked child
|
|
118
|
+
now builds fresh pools.
|
|
119
|
+
|
|
120
|
+
0.3.1 (2026-09-28)
|
|
121
|
+
------------------
|
|
122
|
+
|
|
123
|
+
A CZI read scheduling fix, and a clear refusal for the files that cannot
|
|
124
|
+
stack. Figures compare against 0.3.0 on the same machines.
|
|
125
|
+
|
|
126
|
+
**CZI whole-stack reads hand out work by bytes**
|
|
127
|
+
|
|
128
|
+
``read`` derived its batch size from the worker count, giving each worker
|
|
129
|
+
``ceil(n/workers)`` consecutive sub-blocks. That makes the read wait on
|
|
130
|
+
that many sub-blocks even when most workers have already finished: nine
|
|
131
|
+
8 MiB sub-blocks over eight workers is two rounds, and measured 15.1 ms
|
|
132
|
+
against 7.9 ms for nine one-sub-block tasks. Tasks are now sized by
|
|
133
|
+
output bytes, about 8 MiB each, so a large sub-block gets a task to
|
|
134
|
+
itself and small ones ride together. That keeps the reason batching
|
|
135
|
+
existed, which is that a 0.7 MiB tile cannot pay for its own future,
|
|
136
|
+
without paying the rounding. ``_READ_MAX_WORKERS`` goes 8 to 32: the old
|
|
137
|
+
value was measured against the dispatch above, where extra workers could
|
|
138
|
+
not help. With byte-sized tasks, 20 to 32 measured fastest on both a
|
|
139
|
+
20-core arm64 Mac and a 128-core x86-64 Linux host, and past 32 the Linux
|
|
140
|
+
host gives it back to memory-bandwidth contention. A semaphore keeps the
|
|
141
|
+
resolved worker count a real bound when the byte sizing yields more tasks
|
|
142
|
+
than that.
|
|
143
|
+
|
|
144
|
+
Eight files of 2000 x 2000 uint16 ZSTDHDR sub-blocks, read back to back:
|
|
145
|
+
22.1 to about 15 ms per file on macOS, which moves a whole-stack read
|
|
146
|
+
from a little behind aicspylibczi to about 1.3x ahead of it.
|
|
147
|
+
|
|
148
|
+
**A mixed sub-block CZI says so, instead of failing inside the codec**
|
|
149
|
+
|
|
150
|
+
``read`` stacks every sub-block into one array, and sized that array from
|
|
151
|
+
the first sub-block, which is wrong for any file whose sub-blocks differ:
|
|
152
|
+
a pyramidal slide scan interleaves down-scaled sub-blocks with
|
|
153
|
+
full-resolution ones, and a mosaic can clip its edge tiles. The decode
|
|
154
|
+
destination check then failed with an element count the caller never
|
|
155
|
+
chose, naming neither the file's shape mix nor a way forward. It now
|
|
156
|
+
refuses up front, listing the shapes it cannot stack and the APIs that do
|
|
157
|
+
work (``CziPyramidReader.read_region``, ``entries_at_level``,
|
|
158
|
+
``read_tile`` and ``iter_tiles``), and the new ``CziReader.is_uniform``
|
|
159
|
+
lets a caller branch before asking. Decoding was never at fault: JPEG XR
|
|
160
|
+
sub-blocks are pixel-exact against aicspylibczi.
|
|
161
|
+
|
|
13
162
|
0.3.0 (2026-09-27)
|
|
14
163
|
------------------
|
|
15
164
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opencodecs
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.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
|
|
@@ -325,6 +325,37 @@ z = zarr.create_array(
|
|
|
325
325
|
|
|
326
326
|
## Performance
|
|
327
327
|
|
|
328
|
+
### TIFF against tifffile
|
|
329
|
+
|
|
330
|
+
Reading the same files, all written by tifffile, and requiring identical
|
|
331
|
+
pixels from both. "1 reader" is each library's default call; "1 thread"
|
|
332
|
+
forces both to a single thread (`numthreads=1`, `maxworkers=1`); "8
|
|
333
|
+
readers" is eight threads each reading at once, both on defaults. Each
|
|
334
|
+
number is how many times faster opencodecs is, the median over fresh
|
|
335
|
+
processes alternating the two libraries, on a 20-core Apple silicon Mac
|
|
336
|
+
(tifffile 2026.3.3) and a 64-core x86-64 Linux workstation (tifffile
|
|
337
|
+
2026.5.2).
|
|
338
|
+
|
|
339
|
+
| 4096 x 4096 uint16 | Mac, 1 reader | Mac, 1 thread | Mac, 8 readers | Linux, 1 reader | Linux, 1 thread | Linux, 8 readers |
|
|
340
|
+
|---|---:|---:|---:|---:|---:|---:|
|
|
341
|
+
| Tiled, deflate + predictor | 3.2x | 1.0x | 4.0x | 5.7x | 1.3x | 9.9x |
|
|
342
|
+
| Tiled, zstd | 4.3x | 1.1x | 5.1x | 7.7x | 1.7x | 10.0x |
|
|
343
|
+
| Tiled, LZW + predictor | 2.7x | 1.3x | 2.8x | 4.0x | 1.3x | 6.5x |
|
|
344
|
+
| Strips, deflate + predictor | 2.0x | 1.0x | 2.0x | 5.2x | 1.3x | 5.1x |
|
|
345
|
+
| Strips, uncompressed | 3.2x | 2.3x | 1.6x | 3.7x | 1.0x | 1.0x |
|
|
346
|
+
| 3072 x 3072 uint8, 144 tiles, deflate | 2.1x | 1.0x | 4.7x | 4.5x | 1.1x | 13.4x |
|
|
347
|
+
|
|
348
|
+
A tiled deflate image with the predictor takes 6.3 ms against 20.4 ms on
|
|
349
|
+
the Mac and 10.1 ms against 57.6 ms on Linux. Most of the gap is how the
|
|
350
|
+
work is spread: a batch of tiles decompresses, has its predictor undone
|
|
351
|
+
and lands in the output in one native call that releases the GIL once,
|
|
352
|
+
so threads spend their time decoding rather than queuing for it, and
|
|
353
|
+
concurrent readers share the machine instead of each taking all of it.
|
|
354
|
+
Uncompressed strips are a copy for both libraries; opencodecs splits it
|
|
355
|
+
into positioned reads on several threads, and for one thread's worth
|
|
356
|
+
does whichever its kernel does faster: macOS copies out of the file
|
|
357
|
+
mapping, Linux reads.
|
|
358
|
+
|
|
328
359
|
### 0.3.0 against 0.2.0
|
|
329
360
|
|
|
330
361
|
0.3.0 is mostly a speed release. Each row below ran both versions in fresh
|
|
@@ -637,7 +668,7 @@ build).
|
|
|
637
668
|
|
|
638
669
|
## Status
|
|
639
670
|
|
|
640
|
-
- **v0.
|
|
671
|
+
- **v0.4.0** on PyPI (September 2026). Every wheel carries the same 40
|
|
641
672
|
compiled extensions, and `ci/check_wheel_contents.py` fails the
|
|
642
673
|
release build if one goes missing.
|
|
643
674
|
- About 4,000 tests locally, including a 40-dataset conformance corpus;
|
|
@@ -273,6 +273,37 @@ z = zarr.create_array(
|
|
|
273
273
|
|
|
274
274
|
## Performance
|
|
275
275
|
|
|
276
|
+
### TIFF against tifffile
|
|
277
|
+
|
|
278
|
+
Reading the same files, all written by tifffile, and requiring identical
|
|
279
|
+
pixels from both. "1 reader" is each library's default call; "1 thread"
|
|
280
|
+
forces both to a single thread (`numthreads=1`, `maxworkers=1`); "8
|
|
281
|
+
readers" is eight threads each reading at once, both on defaults. Each
|
|
282
|
+
number is how many times faster opencodecs is, the median over fresh
|
|
283
|
+
processes alternating the two libraries, on a 20-core Apple silicon Mac
|
|
284
|
+
(tifffile 2026.3.3) and a 64-core x86-64 Linux workstation (tifffile
|
|
285
|
+
2026.5.2).
|
|
286
|
+
|
|
287
|
+
| 4096 x 4096 uint16 | Mac, 1 reader | Mac, 1 thread | Mac, 8 readers | Linux, 1 reader | Linux, 1 thread | Linux, 8 readers |
|
|
288
|
+
|---|---:|---:|---:|---:|---:|---:|
|
|
289
|
+
| Tiled, deflate + predictor | 3.2x | 1.0x | 4.0x | 5.7x | 1.3x | 9.9x |
|
|
290
|
+
| Tiled, zstd | 4.3x | 1.1x | 5.1x | 7.7x | 1.7x | 10.0x |
|
|
291
|
+
| Tiled, LZW + predictor | 2.7x | 1.3x | 2.8x | 4.0x | 1.3x | 6.5x |
|
|
292
|
+
| Strips, deflate + predictor | 2.0x | 1.0x | 2.0x | 5.2x | 1.3x | 5.1x |
|
|
293
|
+
| Strips, uncompressed | 3.2x | 2.3x | 1.6x | 3.7x | 1.0x | 1.0x |
|
|
294
|
+
| 3072 x 3072 uint8, 144 tiles, deflate | 2.1x | 1.0x | 4.7x | 4.5x | 1.1x | 13.4x |
|
|
295
|
+
|
|
296
|
+
A tiled deflate image with the predictor takes 6.3 ms against 20.4 ms on
|
|
297
|
+
the Mac and 10.1 ms against 57.6 ms on Linux. Most of the gap is how the
|
|
298
|
+
work is spread: a batch of tiles decompresses, has its predictor undone
|
|
299
|
+
and lands in the output in one native call that releases the GIL once,
|
|
300
|
+
so threads spend their time decoding rather than queuing for it, and
|
|
301
|
+
concurrent readers share the machine instead of each taking all of it.
|
|
302
|
+
Uncompressed strips are a copy for both libraries; opencodecs splits it
|
|
303
|
+
into positioned reads on several threads, and for one thread's worth
|
|
304
|
+
does whichever its kernel does faster: macOS copies out of the file
|
|
305
|
+
mapping, Linux reads.
|
|
306
|
+
|
|
276
307
|
### 0.3.0 against 0.2.0
|
|
277
308
|
|
|
278
309
|
0.3.0 is mostly a speed release. Each row below ran both versions in fresh
|
|
@@ -585,7 +616,7 @@ build).
|
|
|
585
616
|
|
|
586
617
|
## Status
|
|
587
618
|
|
|
588
|
-
- **v0.
|
|
619
|
+
- **v0.4.0** on PyPI (September 2026). Every wheel carries the same 40
|
|
589
620
|
compiled extensions, and `ci/check_wheel_contents.py` fails the
|
|
590
621
|
release build if one goes missing.
|
|
591
622
|
- About 4,000 tests locally, including a 40-dataset conformance corpus;
|
|
@@ -39,6 +39,7 @@ VENDOR="$REPO/vendor"
|
|
|
39
39
|
if [ -n "${OPENCODECS_LIBJXL_PREFIX:-}" ]; then
|
|
40
40
|
PREFIX="$OPENCODECS_LIBJXL_PREFIX"
|
|
41
41
|
elif [ "$(uname)" = "Darwin" ]; then
|
|
42
|
+
# The per-user cache, as in build_codec_libs.sh and setup.py.
|
|
42
43
|
PREFIX="${HOME}/Library/Caches/opencodecs/libjxl"
|
|
43
44
|
else
|
|
44
45
|
PREFIX="${XDG_CACHE_HOME:-$HOME/.cache}/opencodecs/libjxl"
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "opencodecs"
|
|
10
|
-
version = "0.
|
|
10
|
+
version = "0.4.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"
|