opencodecs 0.1.6__tar.gz → 0.1.8__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.1.6 → opencodecs-0.1.8}/CHANGES.rst +108 -6
- {opencodecs-0.1.6/src/opencodecs.egg-info → opencodecs-0.1.8}/PKG-INFO +1 -1
- {opencodecs-0.1.6 → opencodecs-0.1.8}/pyproject.toml +1 -1
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/__init__.py +1 -1
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_bcdec.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_bmp.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_eer.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_hcomp.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_plio.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_png.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_qoi.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_rcomp.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_rgbe.c +152 -152
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/uhdr.py +97 -26
- {opencodecs-0.1.6 → opencodecs-0.1.8/src/opencodecs.egg-info}/PKG-INFO +1 -1
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_uhdr.py +95 -5
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/bcdec/bcdec.h +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/cfitsio/ricecomp.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/imcd_eer/eer.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/imcd_eer/eer.h +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/imcd_lzw/lzw.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/imcd_lzw/lzw.h +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/libspng/spng.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/3rdparty/rgbe/rgbe.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/MANIFEST.in +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/README.md +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/bench/build_libjxl.sh +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/patches/libjxl/README.md +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/setup.cfg +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/setup.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_aec_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_avif_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_bcn_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_bitshuffle_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_blosc2_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_bmp_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_brotli_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_byteshuffle_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_cms_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_czi_reader.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_czi_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_deflate_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_dicomrle_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_dicomweb.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_eer_reader.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_gif_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_gzip_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_heif_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_htj2k_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_jpeg2k_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_jpeg_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_jpegls_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_lerc_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_lz4_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_mozjpeg_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ndtiff.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ndtiff_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_numpy_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_omezarr.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_omezarr_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_packints_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_pcodec_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_png_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_predictor_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_qoi_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_quantize_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_rcomp_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_rgbe.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_rgbe_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_snappy_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_sperr_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_sz3_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_tiff_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_tiff_http.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_tiff_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_webp_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/_zstd_codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/__init__.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_bitshuffle.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_bytetools.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_deflate.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_lz4.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_ndtiff.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_registry.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_tiff.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/codecs/_zstd.c +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/io.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/core/segment_compression.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/parallel.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/tiff_reader.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/tifffile_patch.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs.egg-info/SOURCES.txt +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_bcdec.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_brunsli.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_charls.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus_codec_decode.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus_png.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_coverage_final.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_coverage_push.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_data_source.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_deflate.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_eer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_encode_comprehensive.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_error_handling.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_fits.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_gif.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_http_unified.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_isal.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_jxl.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_lif_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_live_archives.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_mozjpeg.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_native_parity.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_oib_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_omezarr.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_omezarr_sharded_range.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_openjph.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_phase4_filters.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_phase6_codecs.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_rgbe.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_snappy.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tier1_scientific.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_codec_encode.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_native.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_tifffile_patch.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_unified_api.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.1.6 → opencodecs-0.1.8}/tests/test_zarr_adapters.py +0 -0
|
@@ -10,6 +10,104 @@ Versions follow the same ``YYYY.M.D`` cadence as upstream when we
|
|
|
10
10
|
publish; the entries below cluster work by date rather than by
|
|
11
11
|
release because most of it has shipped continuously to ``main``.
|
|
12
12
|
|
|
13
|
+
0.1.8 (2026-06-02)
|
|
14
|
+
------------------
|
|
15
|
+
|
|
16
|
+
**DCT-domain decode-time scale on JPEG + decode_native**
|
|
17
|
+
|
|
18
|
+
``opencodecs.codecs._jpeg.decode`` now exposes libjpeg-turbo's
|
|
19
|
+
``tj3SetScalingFactor`` knob via a new ``scale=`` kwarg (plus
|
|
20
|
+
explicit ``scale_num`` / ``scale_denom`` for advanced callers). The
|
|
21
|
+
decoder skips the inverse-DCT work for high-frequency coefficients
|
|
22
|
+
when the caller requests a downsampled output, so a 1/8 decode runs
|
|
23
|
+
~2× faster than a full decode and produces a 64× smaller raster.
|
|
24
|
+
|
|
25
|
+
Supported factors are libjpeg-turbo's full set of 16 ratios N/8 for
|
|
26
|
+
N ∈ {1, 2, …, 16} — i.e. anywhere between 1/8 and 2/1. The new
|
|
27
|
+
``opencodecs.codecs._jpeg.supported_scaling_factors()`` returns them
|
|
28
|
+
as ``(num, denom)`` pairs. ``scale=`` accepts:
|
|
29
|
+
|
|
30
|
+
* an integer N (interpreted as ``1/N``)
|
|
31
|
+
* a float (snapped to the closest supported ratio)
|
|
32
|
+
* a tuple ``(num, denom)`` verbatim
|
|
33
|
+
|
|
34
|
+
``opencodecs.uhdr.decode_native(..., scale=...)`` threads the same
|
|
35
|
+
knob through both the SDR base and the gain-map JPEG decodes. The
|
|
36
|
+
gain-application kernel runs on the smaller rasters, so the whole
|
|
37
|
+
pipeline scales — a 2k² Ultra-HDR decode at ``scale=8`` returns a
|
|
38
|
+
``(250, 250, 3)`` fp16 raster in ~25 ms vs ~53 ms for the full
|
|
39
|
+
decode. Useful for thumbnail / preview pipelines that want real
|
|
40
|
+
HDR pixels off cloud-stored Ultra-HDR without paying the megapixel
|
|
41
|
+
JPEG decode cost. Lossless source not required — the JPEG file is
|
|
42
|
+
unchanged on disk; the savings come from skipping IDCT work.
|
|
43
|
+
|
|
44
|
+
(libuhdr lossless support is unchanged: ISO 21496-1's SDR base layer
|
|
45
|
+
is required to be baseline DCT JPEG, so lossless-mode JPEG would
|
|
46
|
+
not be a conforming Ultra-HDR file.)
|
|
47
|
+
|
|
48
|
+
0.1.7 (2026-06-02)
|
|
49
|
+
------------------
|
|
50
|
+
|
|
51
|
+
**Patched libultrahdr bundle**
|
|
52
|
+
|
|
53
|
+
Since v0.1.6 we build libuhdr ourselves; v0.1.7 starts carrying
|
|
54
|
+
local patches via ``patches/libultrahdr/*.patch``, applied by
|
|
55
|
+
``bench/build_codec_libs.sh::build_libultrahdr`` after the source
|
|
56
|
+
fetch. Five upstream post-v1.4.0 cherry-picks land first:
|
|
57
|
+
|
|
58
|
+
* ``5ed39d6`` — fix ``CLIP3`` parameter order in libuhdr's own
|
|
59
|
+
``applyGainMap``. The bug clamped a constant ``0.0f`` instead of
|
|
60
|
+
the gainmap weight whenever ``display_boost ≠ hdr_capacity_max``,
|
|
61
|
+
silently producing wrong HDR output on libuhdr's wrapped
|
|
62
|
+
``decode()`` path. ``opencodecs.uhdr.decode_native`` is unaffected
|
|
63
|
+
(it uses our own Cython gain-application kernel).
|
|
64
|
+
* ``7088ca7`` — error-message typo in ``jpegr.cpp``.
|
|
65
|
+
* ``13a058f`` — ``icc.h`` Endian_Swap macros now respect actual
|
|
66
|
+
host endianness instead of an unconditionally-true ``USE_BIG_ENDIAN_IN_ICC``.
|
|
67
|
+
No effect on x86_64/aarch64 (little-endian); fixes PowerPC/s390x.
|
|
68
|
+
* ``5fa99b5`` — add missing ``<cstdint>`` include for GCC 15.
|
|
69
|
+
* ``8cbc983`` — same ``CLIP3`` fix as ``5ed39d6`` in the GPU path
|
|
70
|
+
(we don't link the GPU path; carried for hygiene).
|
|
71
|
+
|
|
72
|
+
**New API: ``opencodecs.uhdr.probe(data) -> dict``**
|
|
73
|
+
|
|
74
|
+
Parse an Ultra-HDR container's MPF metadata without any pixel
|
|
75
|
+
decode. Returns base + gainmap dimensions plus the gainmap
|
|
76
|
+
metadata block (``max_content_boost`` / ``min_content_boost`` /
|
|
77
|
+
``gamma`` / capacity). Wraps libuhdr's existing ``uhdr_dec_probe``
|
|
78
|
+
+ accessors. ~180× faster than ``decode()`` for any HDR-aware
|
|
79
|
+
flow that only needs dimensions or capacity — image indexing,
|
|
80
|
+
thumbnail generation, HTTP HEAD-style inspection, routing batches
|
|
81
|
+
by content-boost.
|
|
82
|
+
|
|
83
|
+
**Gain-map tunables on ``encode_native``: ``gain_quality`` + ``gain_scale``**
|
|
84
|
+
|
|
85
|
+
Two new kwargs let callers shrink the gain-map layer
|
|
86
|
+
independently of the SDR base:
|
|
87
|
+
|
|
88
|
+
* ``gain_quality`` — JPEG quality for the gain-map layer only
|
|
89
|
+
(defaults to track ``quality``). The gain map is heavily
|
|
90
|
+
band-limited so ``gain_quality=70`` is visually equivalent to
|
|
91
|
+
``q95`` and cuts ~30% off the gain-map bytes.
|
|
92
|
+
* ``gain_scale`` — integer power-of-2 downsample factor for the
|
|
93
|
+
gain-map raster (``1`` keeps full resolution, ``2`` halves both
|
|
94
|
+
axes for quarter-area, etc.). Stride decimation; ~5 ms on a 2k²
|
|
95
|
+
uint8 gain map. Round-trips through ``probe`` / ``decode_native``
|
|
96
|
+
cleanly — the container records the actual gain-map dimensions
|
|
97
|
+
and the decoder upscales on apply.
|
|
98
|
+
|
|
99
|
+
**True streaming encode: ``encode_native(..., out=fp)``**
|
|
100
|
+
|
|
101
|
+
The old ``encode_to(fp, hdr, ...)`` was a forward-compatible
|
|
102
|
+
``fp.write(encode_native(hdr, **kw))`` wrapper. v0.1.7 makes both
|
|
103
|
+
genuinely streaming: ``encode_assembled`` (and by extension
|
|
104
|
+
``encode_native`` / ``encode_to``) now accept an ``out=`` file-
|
|
105
|
+
like, and when given they hand a zero-copy ``memoryview`` over
|
|
106
|
+
libuhdr's internal output buffer to ``out.write()``. Skips the
|
|
107
|
+
final ``PyBytes_FromStringAndSize`` allocation + memcpy. Saves
|
|
108
|
+
~1× output-size peak memory and ~3 ms wall-clock on a 5 MB encode.
|
|
109
|
+
``encode_to`` now returns ``None`` instead of the byte count.
|
|
110
|
+
|
|
13
111
|
0.1.6 (2026-06-01)
|
|
14
112
|
------------------
|
|
15
113
|
|
|
@@ -69,12 +167,16 @@ streaming write-out without changing their code.
|
|
|
69
167
|
|
|
70
168
|
**CI / build robustness**
|
|
71
169
|
|
|
72
|
-
* ``_uhdr`` extension
|
|
73
|
-
``-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
170
|
+
* ``_uhdr`` extension's ``-ffast-math`` is now narrowed to
|
|
171
|
+
``-ffast-math -fno-finite-math-only
|
|
172
|
+
-fno-unsafe-math-optimizations -fno-math-errno
|
|
173
|
+
-fno-trapping-math``. The ``-funsafe-math-optimizations``
|
|
174
|
+
sub-flag is what tells GCC to replace libm calls with libmvec's
|
|
175
|
+
vectorised ``_ZGV*`` variants, which link-fail on Ubuntu (Ubuntu's
|
|
176
|
+
default gcc doesn't auto-link libmvec like manylinux_2_28 does)
|
|
177
|
+
and aren't available at all on aarch64. Same flag set the edt
|
|
178
|
+
extension uses for the same reason. Keeps FMA + reordering
|
|
179
|
+
perf; eliminates the libmvec dependency entirely.
|
|
78
180
|
* The libaec source URL moved from ``gitlab.dkrz.de`` (now
|
|
79
181
|
auth-gated; anonymous requests redirect to ``/users/sign_in``)
|
|
80
182
|
to DKRZ's GitHub mirror at
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "opencodecs"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.8"
|
|
8
8
|
description = "Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|