opencodecs 0.1.5__tar.gz → 0.1.7__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.5 → opencodecs-0.1.7}/CHANGES.rst +141 -0
- {opencodecs-0.1.5/src/opencodecs.egg-info → opencodecs-0.1.7}/PKG-INFO +1 -1
- {opencodecs-0.1.5 → opencodecs-0.1.7}/pyproject.toml +3 -3
- {opencodecs-0.1.5 → opencodecs-0.1.7}/setup.py +129 -47
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/__init__.py +1 -1
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_bcdec.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_bmp.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_eer.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_hcomp.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_plio.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_png.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_qoi.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_rcomp.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_rgbe.c +152 -152
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/uhdr.py +169 -6
- {opencodecs-0.1.5 → opencodecs-0.1.7/src/opencodecs.egg-info}/PKG-INFO +1 -1
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_uhdr.py +141 -1
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/bcdec/bcdec.h +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/cfitsio/ricecomp.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/imcd_eer/eer.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/imcd_eer/eer.h +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/imcd_lzw/lzw.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/imcd_lzw/lzw.h +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/libspng/spng.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/3rdparty/rgbe/rgbe.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/MANIFEST.in +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/README.md +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/bench/build_libjxl.sh +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/patches/libjxl/README.md +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/setup.cfg +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_aec_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_avif_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_bcn_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_bitshuffle_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_blosc2_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_bmp_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_brotli_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_byteshuffle_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_cms_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_czi_reader.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_czi_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_deflate_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_dicomrle_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_dicomweb.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_eer_reader.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_gif_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_gzip_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_heif_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_htj2k_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_jpeg2k_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_jpeg_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_jpegls_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_lerc_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_lz4_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_mozjpeg_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ndtiff.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ndtiff_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_numpy_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_omezarr.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_omezarr_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_packints_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_pcodec_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_png_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_predictor_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_qoi_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_quantize_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_rcomp_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_rgbe.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_rgbe_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_snappy_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_sperr_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_sz3_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_tiff_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_tiff_http.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_tiff_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_webp_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/_zstd_codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/__init__.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_bitshuffle.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_bytetools.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_deflate.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_lz4.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_ndtiff.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_registry.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_tiff.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/codecs/_zstd.c +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/io.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/core/segment_compression.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/parallel.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/tiff_reader.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/tifffile_patch.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs.egg-info/SOURCES.txt +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_bcdec.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_brunsli.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_charls.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus_codec_decode.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus_png.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_coverage_final.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_coverage_push.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_data_source.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_deflate.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_eer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_encode_comprehensive.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_error_handling.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_fits.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_gif.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_http_unified.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_isal.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_jxl.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_lif_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_live_archives.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_mozjpeg.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_native_parity.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_oib_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_omezarr.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_omezarr_sharded_range.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_openjph.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_phase4_filters.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_phase6_codecs.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_rgbe.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_snappy.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tier1_scientific.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_codec_encode.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_native.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_tifffile_patch.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_unified_api.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.1.5 → opencodecs-0.1.7}/tests/test_zarr_adapters.py +0 -0
|
@@ -10,6 +10,147 @@ 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.7 (2026-06-02)
|
|
14
|
+
------------------
|
|
15
|
+
|
|
16
|
+
**Patched libultrahdr bundle**
|
|
17
|
+
|
|
18
|
+
Since v0.1.6 we build libuhdr ourselves; v0.1.7 starts carrying
|
|
19
|
+
local patches via ``patches/libultrahdr/*.patch``, applied by
|
|
20
|
+
``bench/build_codec_libs.sh::build_libultrahdr`` after the source
|
|
21
|
+
fetch. Five upstream post-v1.4.0 cherry-picks land first:
|
|
22
|
+
|
|
23
|
+
* ``5ed39d6`` — fix ``CLIP3`` parameter order in libuhdr's own
|
|
24
|
+
``applyGainMap``. The bug clamped a constant ``0.0f`` instead of
|
|
25
|
+
the gainmap weight whenever ``display_boost ≠ hdr_capacity_max``,
|
|
26
|
+
silently producing wrong HDR output on libuhdr's wrapped
|
|
27
|
+
``decode()`` path. ``opencodecs.uhdr.decode_native`` is unaffected
|
|
28
|
+
(it uses our own Cython gain-application kernel).
|
|
29
|
+
* ``7088ca7`` — error-message typo in ``jpegr.cpp``.
|
|
30
|
+
* ``13a058f`` — ``icc.h`` Endian_Swap macros now respect actual
|
|
31
|
+
host endianness instead of an unconditionally-true ``USE_BIG_ENDIAN_IN_ICC``.
|
|
32
|
+
No effect on x86_64/aarch64 (little-endian); fixes PowerPC/s390x.
|
|
33
|
+
* ``5fa99b5`` — add missing ``<cstdint>`` include for GCC 15.
|
|
34
|
+
* ``8cbc983`` — same ``CLIP3`` fix as ``5ed39d6`` in the GPU path
|
|
35
|
+
(we don't link the GPU path; carried for hygiene).
|
|
36
|
+
|
|
37
|
+
**New API: ``opencodecs.uhdr.probe(data) -> dict``**
|
|
38
|
+
|
|
39
|
+
Parse an Ultra-HDR container's MPF metadata without any pixel
|
|
40
|
+
decode. Returns base + gainmap dimensions plus the gainmap
|
|
41
|
+
metadata block (``max_content_boost`` / ``min_content_boost`` /
|
|
42
|
+
``gamma`` / capacity). Wraps libuhdr's existing ``uhdr_dec_probe``
|
|
43
|
+
+ accessors. ~180× faster than ``decode()`` for any HDR-aware
|
|
44
|
+
flow that only needs dimensions or capacity — image indexing,
|
|
45
|
+
thumbnail generation, HTTP HEAD-style inspection, routing batches
|
|
46
|
+
by content-boost.
|
|
47
|
+
|
|
48
|
+
**Gain-map tunables on ``encode_native``: ``gain_quality`` + ``gain_scale``**
|
|
49
|
+
|
|
50
|
+
Two new kwargs let callers shrink the gain-map layer
|
|
51
|
+
independently of the SDR base:
|
|
52
|
+
|
|
53
|
+
* ``gain_quality`` — JPEG quality for the gain-map layer only
|
|
54
|
+
(defaults to track ``quality``). The gain map is heavily
|
|
55
|
+
band-limited so ``gain_quality=70`` is visually equivalent to
|
|
56
|
+
``q95`` and cuts ~30% off the gain-map bytes.
|
|
57
|
+
* ``gain_scale`` — integer power-of-2 downsample factor for the
|
|
58
|
+
gain-map raster (``1`` keeps full resolution, ``2`` halves both
|
|
59
|
+
axes for quarter-area, etc.). Stride decimation; ~5 ms on a 2k²
|
|
60
|
+
uint8 gain map. Round-trips through ``probe`` / ``decode_native``
|
|
61
|
+
cleanly — the container records the actual gain-map dimensions
|
|
62
|
+
and the decoder upscales on apply.
|
|
63
|
+
|
|
64
|
+
**True streaming encode: ``encode_native(..., out=fp)``**
|
|
65
|
+
|
|
66
|
+
The old ``encode_to(fp, hdr, ...)`` was a forward-compatible
|
|
67
|
+
``fp.write(encode_native(hdr, **kw))`` wrapper. v0.1.7 makes both
|
|
68
|
+
genuinely streaming: ``encode_assembled`` (and by extension
|
|
69
|
+
``encode_native`` / ``encode_to``) now accept an ``out=`` file-
|
|
70
|
+
like, and when given they hand a zero-copy ``memoryview`` over
|
|
71
|
+
libuhdr's internal output buffer to ``out.write()``. Skips the
|
|
72
|
+
final ``PyBytes_FromStringAndSize`` allocation + memcpy. Saves
|
|
73
|
+
~1× output-size peak memory and ~3 ms wall-clock on a 5 MB encode.
|
|
74
|
+
``encode_to`` now returns ``None`` instead of the byte count.
|
|
75
|
+
|
|
76
|
+
0.1.6 (2026-06-01)
|
|
77
|
+
------------------
|
|
78
|
+
|
|
79
|
+
**libultrahdr now bundled (fixes missing ``_uhdr`` on PyPI wheels)**
|
|
80
|
+
|
|
81
|
+
* ``bench/build_codec_libs.sh::build_libultrahdr`` builds libuhdr
|
|
82
|
+
v1.4.0 (Apache-2.0) into ``$OPENCODECS_LIBS_PREFIX/{include,lib}``
|
|
83
|
+
alongside the other source-built codec libs. The Linux + Windows
|
|
84
|
+
CI ``--only=...`` lists pick it up; the macOS ``before-all`` brew
|
|
85
|
+
install now includes ``libultrahdr`` as well.
|
|
86
|
+
* setup.py's ``_uhdr`` Extension is now built by a probe
|
|
87
|
+
(``_maybe_build_uhdr_ext``) that finds the cached prefix, sets
|
|
88
|
+
``library_dirs``, and bakes the rpath into the resulting ``.so``
|
|
89
|
+
so delocate / auditwheel / delvewheel can bundle ``libuhdr``'s
|
|
90
|
+
dylib/.so/.dll into the wheel.
|
|
91
|
+
* ``_uhdr`` is now in ``MUST_SHIP_ALL_PLATFORMS`` in
|
|
92
|
+
``ci/check_wheel_contents.py``; a wheel without the Ultra-HDR
|
|
93
|
+
extension fails the wheel-coverage step.
|
|
94
|
+
* The stale ``_ultrahdr.pyx`` source file (orphaned in commit
|
|
95
|
+
``c9347f5`` when the direct libuhdr binding shipped as ``_uhdr``)
|
|
96
|
+
is removed.
|
|
97
|
+
|
|
98
|
+
**New API: ``opencodecs.uhdr.decode_native``**
|
|
99
|
+
|
|
100
|
+
Fused-Cython fast-path Ultra-HDR decoder. Uses libuhdr's parser to
|
|
101
|
+
pull out the compressed SDR base + gain-map JPEGs + metadata (no
|
|
102
|
+
pixel decode), then decodes both JPEGs in parallel via
|
|
103
|
+
``imagecodecs.jpeg_decode`` (libjpeg-turbo SIMD, GIL released) and
|
|
104
|
+
applies the gain map in a Cython kernel that uses the same sRGB
|
|
105
|
+
EOTF LUT + IEEE-754 polynomial ``exp2`` the encoder uses. ~1.4×
|
|
106
|
+
faster than libuhdr's reference decode on a 2k² float HDR (M-series
|
|
107
|
+
Mac: ~52 ms vs ~72 ms). Output matches libuhdr's decode to within
|
|
108
|
+
JPEG-q95 + 8-bit gain-quantisation noise. ``display_boost`` kwarg
|
|
109
|
+
exposes the ISO 21496-1 headroom scaler — default is full HDR
|
|
110
|
+
(``hdr_capacity_max``), pass ``1.0`` to match libuhdr's default
|
|
111
|
+
SDR-equivalent decode.
|
|
112
|
+
|
|
113
|
+
Backed by two new Cython helpers exposed for advanced callers:
|
|
114
|
+
|
|
115
|
+
* ``opencodecs.codecs._uhdr.extract_layers(data)`` — parse the
|
|
116
|
+
container, return ``{base_jpeg, gainmap_jpeg, gainmap_metadata,
|
|
117
|
+
width, height, gainmap_{width,height}}`` without decoding pixels.
|
|
118
|
+
* ``opencodecs.codecs._uhdr.apply_gainmap_fp32(sdr_u8, gain_u8,
|
|
119
|
+
metadata, display_boost=...)`` — the per-pixel gain-application
|
|
120
|
+
kernel.
|
|
121
|
+
|
|
122
|
+
**New API: ``opencodecs.uhdr.encode_to``**
|
|
123
|
+
|
|
124
|
+
Streaming variant of :func:`encode_native` — writes Ultra-HDR bytes
|
|
125
|
+
directly to a file-like (anything with ``write(bytes)``: open file,
|
|
126
|
+
``io.BytesIO``, HTTP upload streamer). Returns the byte count.
|
|
127
|
+
Forward-compatible alias: the libuhdr api-4 path we currently use
|
|
128
|
+
for container assembly doesn't expose a streaming writer, so the
|
|
129
|
+
function is ``fp.write(encode_native(...))`` today; the API exists
|
|
130
|
+
so callers can adopt it now and pick up any future libuhdr
|
|
131
|
+
streaming write-out without changing their code.
|
|
132
|
+
|
|
133
|
+
**CI / build robustness**
|
|
134
|
+
|
|
135
|
+
* ``_uhdr`` extension's ``-ffast-math`` is now narrowed to
|
|
136
|
+
``-ffast-math -fno-finite-math-only
|
|
137
|
+
-fno-unsafe-math-optimizations -fno-math-errno
|
|
138
|
+
-fno-trapping-math``. The ``-funsafe-math-optimizations``
|
|
139
|
+
sub-flag is what tells GCC to replace libm calls with libmvec's
|
|
140
|
+
vectorised ``_ZGV*`` variants, which link-fail on Ubuntu (Ubuntu's
|
|
141
|
+
default gcc doesn't auto-link libmvec like manylinux_2_28 does)
|
|
142
|
+
and aren't available at all on aarch64. Same flag set the edt
|
|
143
|
+
extension uses for the same reason. Keeps FMA + reordering
|
|
144
|
+
perf; eliminates the libmvec dependency entirely.
|
|
145
|
+
* The libaec source URL moved from ``gitlab.dkrz.de`` (now
|
|
146
|
+
auth-gated; anonymous requests redirect to ``/users/sign_in``)
|
|
147
|
+
to DKRZ's GitHub mirror at
|
|
148
|
+
``github.com/Deutsches-Klimarechenzentrum/libaec``.
|
|
149
|
+
* ``fetch_tar`` now has a 4-attempt shell retry loop with empty-
|
|
150
|
+
extract detection — covers transient mirror outages that
|
|
151
|
+
curl's own ``--retry`` doesn't see (e.g. 200 OK with a
|
|
152
|
+
truncated body).
|
|
153
|
+
|
|
13
154
|
0.1.5 (2026-05-31)
|
|
14
155
|
------------------
|
|
15
156
|
|
|
@@ -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.7"
|
|
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"
|
|
@@ -142,7 +142,7 @@ before-all = [
|
|
|
142
142
|
# bench/build_codec_libs.sh into the cached /cibw-jxl-prefix mount.
|
|
143
143
|
# Skips encoders (aom, x265) — wheel ships decode-only AVIF/HEIF to
|
|
144
144
|
# keep build < 12 min cold + avoid GPL x265.
|
|
145
|
-
"bash -c 'PATH=$HOME/.cargo/bin:$PATH bash bench/build_codec_libs.sh --only=libjpeg-turbo,c-blosc2,libde265,dav1d,libavif,libheif,libaec,lerc,zfp,SZ3,pcodec,SPERR,brunsli,mozjpeg'",
|
|
145
|
+
"bash -c 'PATH=$HOME/.cargo/bin:$PATH bash bench/build_codec_libs.sh --only=libjpeg-turbo,c-blosc2,libde265,dav1d,libavif,libheif,libaec,lerc,zfp,SZ3,pcodec,SPERR,brunsli,mozjpeg,libultrahdr'",
|
|
146
146
|
"bash bench/build_libjxl.sh",
|
|
147
147
|
]
|
|
148
148
|
# Don't set OPENCODECS_*_PREFIX here — build_wheels.yml's
|
|
@@ -162,7 +162,7 @@ before-all = [
|
|
|
162
162
|
# mozjpeg removed from this brew install — the formula ships libjpeg
|
|
163
163
|
# only, not libturbojpeg, so the _mozjpeg probe couldn't find what it
|
|
164
164
|
# needed. Source-build via build_codec_libs.sh produces both libs.
|
|
165
|
-
"brew install jpeg-xl libavif libheif webp libpng jpeg-turbo openjpeg zstd brotli c-blosc2 lz4 libdeflate libaec liblerc zfp rust cmake ninja",
|
|
165
|
+
"brew install jpeg-xl libavif libheif webp libpng jpeg-turbo openjpeg zstd brotli c-blosc2 lz4 libdeflate libaec liblerc zfp rust cmake ninja libultrahdr",
|
|
166
166
|
"bash bench/build_codec_libs.sh --only=SZ3,pcodec,SPERR,brunsli,mozjpeg",
|
|
167
167
|
]
|
|
168
168
|
# macos-latest is now macOS 15 (Sequoia) on arm64. Homebrew formulas are
|
|
@@ -626,6 +626,123 @@ def _maybe_build_ext_simple(
|
|
|
626
626
|
return []
|
|
627
627
|
|
|
628
628
|
|
|
629
|
+
def _maybe_build_uhdr_ext() -> list[Extension]:
|
|
630
|
+
"""Build the ``_uhdr`` (libultrahdr / Ultra-HDR JPEG) extension when
|
|
631
|
+
libuhdr is on the system. Probes the cibuildwheel cached prefix,
|
|
632
|
+
the per-user opencodecs cache (from ``build_codec_libs.sh``),
|
|
633
|
+
homebrew's keg, and the standard system prefixes. Bakes an rpath
|
|
634
|
+
into the resulting ``.so`` so the linked ``libuhdr`` dylib is
|
|
635
|
+
findable at import time without ``LD_LIBRARY_PATH``.
|
|
636
|
+
|
|
637
|
+
Apache-2.0; bundled into the wheel by the standard
|
|
638
|
+
delocate/auditwheel/delvewheel repair step.
|
|
639
|
+
"""
|
|
640
|
+
candidates: list[Path] = []
|
|
641
|
+
# 1. Explicit codec-libs prefix wins (set in CI to /cibw-jxl-prefix
|
|
642
|
+
# on Linux, $CONDA_PREFIX on Windows).
|
|
643
|
+
_libs_prefix_env = os.environ.get("OPENCODECS_CODEC_LIBS_PREFIX")
|
|
644
|
+
if _libs_prefix_env:
|
|
645
|
+
candidates.append(Path(_libs_prefix_env))
|
|
646
|
+
# Conda's Windows layout puts headers under <prefix>/Library/.
|
|
647
|
+
candidates.append(Path(_libs_prefix_env) / "Library")
|
|
648
|
+
# 2. Standalone CMake-built libuhdr from build_codec_libs.sh on a
|
|
649
|
+
# dev machine (installs into the per-user `libs` cache root).
|
|
650
|
+
candidates.append(_OC_USER_CACHE / "libs")
|
|
651
|
+
# 3. Homebrew keg (macOS).
|
|
652
|
+
candidates.extend([
|
|
653
|
+
Path("/opt/homebrew/opt/libultrahdr"),
|
|
654
|
+
Path("/usr/local/opt/libultrahdr"),
|
|
655
|
+
])
|
|
656
|
+
# 4. Generic system prefixes.
|
|
657
|
+
candidates.extend([Path("/usr/local"), Path("/usr")])
|
|
658
|
+
|
|
659
|
+
prefix = None
|
|
660
|
+
lib_subdir = None # "lib" or "lib64" or "Library/lib"
|
|
661
|
+
lib_filename = None
|
|
662
|
+
lib_candidates = [
|
|
663
|
+
("lib", "libuhdr.dylib"),
|
|
664
|
+
("lib", "libuhdr.so"),
|
|
665
|
+
("lib", "libuhdr.so.1"),
|
|
666
|
+
("lib64", "libuhdr.so"),
|
|
667
|
+
("lib64", "libuhdr.so.1"),
|
|
668
|
+
("lib", "libuhdr.1.dylib"),
|
|
669
|
+
# Windows (conda-forge / build_codec_libs.sh layout): the
|
|
670
|
+
# CMake build emits uhdr.lib alongside uhdr.dll under bin/.
|
|
671
|
+
("lib", "uhdr.lib"),
|
|
672
|
+
("Library/lib", "uhdr.lib"),
|
|
673
|
+
]
|
|
674
|
+
for c in candidates:
|
|
675
|
+
if not (c / "include" / "ultrahdr_api.h").is_file() \
|
|
676
|
+
and not (c / "Library" / "include" / "ultrahdr_api.h").is_file():
|
|
677
|
+
continue
|
|
678
|
+
# If Library/ subdir holds the headers, that's the real prefix.
|
|
679
|
+
if (c / "Library" / "include" / "ultrahdr_api.h").is_file():
|
|
680
|
+
c = c / "Library"
|
|
681
|
+
for subdir, name in lib_candidates:
|
|
682
|
+
if (c / subdir / name).is_file():
|
|
683
|
+
prefix = c
|
|
684
|
+
lib_subdir = subdir
|
|
685
|
+
lib_filename = name
|
|
686
|
+
break
|
|
687
|
+
if prefix is not None:
|
|
688
|
+
break
|
|
689
|
+
if prefix is None:
|
|
690
|
+
return []
|
|
691
|
+
|
|
692
|
+
extra_link_args: list[str] = []
|
|
693
|
+
if sys.platform == "darwin":
|
|
694
|
+
# Absolute-path link + rpath fallback. libuhdr's
|
|
695
|
+
# install_name is @rpath/libuhdr.X.dylib, so delocate needs
|
|
696
|
+
# the rpath to be present to resolve LC_LOAD_DYLIB.
|
|
697
|
+
extra_link_args = [
|
|
698
|
+
str(prefix / lib_subdir / lib_filename),
|
|
699
|
+
f"-Wl,-rpath,{prefix / lib_subdir}",
|
|
700
|
+
]
|
|
701
|
+
libraries = []
|
|
702
|
+
else:
|
|
703
|
+
libraries = ["uhdr"]
|
|
704
|
+
if sys.platform == "linux":
|
|
705
|
+
extra_link_args = [f"-Wl,-rpath,{prefix / lib_subdir}"]
|
|
706
|
+
|
|
707
|
+
return [Extension(
|
|
708
|
+
name="opencodecs.codecs._uhdr",
|
|
709
|
+
sources=["src/opencodecs/codecs/_uhdr.pyx"],
|
|
710
|
+
include_dirs=[
|
|
711
|
+
str(PKG_CODECS),
|
|
712
|
+
numpy.get_include(),
|
|
713
|
+
str(prefix / "include"),
|
|
714
|
+
],
|
|
715
|
+
library_dirs=[str(prefix / lib_subdir)],
|
|
716
|
+
libraries=libraries,
|
|
717
|
+
extra_link_args=extra_link_args,
|
|
718
|
+
define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")],
|
|
719
|
+
# Aggressive optimisation for the gain-map / SDR-base kernels
|
|
720
|
+
# to auto-vectorise (NEON on Apple Silicon, AVX2 on x86). The
|
|
721
|
+
# polynomial log2 in _gain_map_kernel only beats numpy's
|
|
722
|
+
# vectorised log2 when the compiler turns it into SIMD.
|
|
723
|
+
#
|
|
724
|
+
# The fno-finite-math-only / fno-unsafe-math-optimizations pair
|
|
725
|
+
# subtracts back the two sub-flags of -ffast-math that bite us:
|
|
726
|
+
# ``-funsafe-math-optimizations`` is what tells GCC to replace
|
|
727
|
+
# libm calls with libmvec's vectorised ``_ZGV*`` variants, which
|
|
728
|
+
# link-fail on Ubuntu and aren't present at all on aarch64.
|
|
729
|
+
# ``-ffinite-math-only`` breaks our clip-to-[0,1] paths by
|
|
730
|
+
# assuming no NaN/Inf can appear. Same flag set that the edt
|
|
731
|
+
# extension uses for the same reason — keeps FMA + reordering
|
|
732
|
+
# speed without the libmvec dependency.
|
|
733
|
+
extra_compile_args=(
|
|
734
|
+
[
|
|
735
|
+
"-O3", "-ffast-math",
|
|
736
|
+
"-fno-finite-math-only",
|
|
737
|
+
"-fno-unsafe-math-optimizations",
|
|
738
|
+
"-fno-math-errno", "-fno-trapping-math",
|
|
739
|
+
]
|
|
740
|
+
if sys.platform != "win32" else ["/O2"]
|
|
741
|
+
),
|
|
742
|
+
language="c",
|
|
743
|
+
)]
|
|
744
|
+
|
|
745
|
+
|
|
629
746
|
def _maybe_build_mozjpeg_ext() -> list[Extension]:
|
|
630
747
|
"""Build the optional ``_mozjpeg`` extension when MozJPEG is
|
|
631
748
|
installed. MozJPEG ships its libturbojpeg under a keg-only prefix
|
|
@@ -1125,36 +1242,14 @@ extensions = [
|
|
|
1125
1242
|
extra_link_args=extra_link_args,
|
|
1126
1243
|
language="c",
|
|
1127
1244
|
),
|
|
1128
|
-
# libultrahdr (Ultra-HDR / ISO 21496-1).
|
|
1129
|
-
#
|
|
1130
|
-
#
|
|
1131
|
-
#
|
|
1132
|
-
#
|
|
1133
|
-
#
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
sources=["src/opencodecs/codecs/_uhdr.pyx"],
|
|
1137
|
-
include_dirs=[
|
|
1138
|
-
str(PKG_CODECS),
|
|
1139
|
-
numpy.get_include(),
|
|
1140
|
-
*_resolve_include_dirs("ultrahdr_api.h"),
|
|
1141
|
-
],
|
|
1142
|
-
library_dirs=[],
|
|
1143
|
-
libraries=["uhdr"],
|
|
1144
|
-
define_macros=[
|
|
1145
|
-
("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION"),
|
|
1146
|
-
],
|
|
1147
|
-
# Aggressive optimisation is critical for the gain-map kernel
|
|
1148
|
-
# to auto-vectorise (NEON on Apple Silicon, AVX2 on x86). The
|
|
1149
|
-
# polynomial log2 in _gain_map_kernel only beats numpy's
|
|
1150
|
-
# vectorised log2 when the compiler turns it into SIMD.
|
|
1151
|
-
extra_compile_args=[
|
|
1152
|
-
"-O3",
|
|
1153
|
-
"-ffast-math", # fine for gain-map output (uint8, ~1% tolerance)
|
|
1154
|
-
"-fno-math-errno",
|
|
1155
|
-
],
|
|
1156
|
-
language="c",
|
|
1157
|
-
),
|
|
1245
|
+
# libultrahdr (Ultra-HDR / ISO 21496-1). Bundled via
|
|
1246
|
+
# bench/build_codec_libs.sh::build_libultrahdr (Apache-2.0). The
|
|
1247
|
+
# _maybe_build_uhdr_ext probe finds the cached install prefix
|
|
1248
|
+
# (homebrew keg, $OPENCODECS_LIBS_PREFIX, per-user cache, or the
|
|
1249
|
+
# cibuildwheel mount) and bakes in the matching rpath so delocate /
|
|
1250
|
+
# auditwheel / delvewheel can bundle libuhdr's dylib/.so/.dll into
|
|
1251
|
+
# the wheel.
|
|
1252
|
+
*_maybe_build_uhdr_ext(),
|
|
1158
1253
|
# QOI: vendored single-header (3rdparty/qoi/qoi.h). Compile the impl
|
|
1159
1254
|
# via QOI_IMPLEMENTATION; no external library needed.
|
|
1160
1255
|
Extension(
|
|
@@ -1410,23 +1505,10 @@ extensions = [
|
|
|
1410
1505
|
)]
|
|
1411
1506
|
if _has_header("isa-l/igzip_lib.h") else []
|
|
1412
1507
|
),
|
|
1413
|
-
# Ultra HDR
|
|
1414
|
-
#
|
|
1415
|
-
#
|
|
1416
|
-
#
|
|
1417
|
-
# our ABI.
|
|
1418
|
-
*_maybe_build_ext_simple(
|
|
1419
|
-
name="opencodecs.codecs._ultrahdr",
|
|
1420
|
-
source="src/opencodecs/codecs/_ultrahdr.pyx",
|
|
1421
|
-
prefixes=[
|
|
1422
|
-
str(_OC_USER_CACHE / "libs"),
|
|
1423
|
-
"/opt/homebrew/opt/libultrahdr",
|
|
1424
|
-
"/usr/local/opt/libultrahdr",
|
|
1425
|
-
"/usr/local", "/usr",
|
|
1426
|
-
],
|
|
1427
|
-
probe_header="ultrahdr_api.h",
|
|
1428
|
-
libname="uhdr",
|
|
1429
|
-
),
|
|
1508
|
+
# Ultra HDR is now wired via _maybe_build_uhdr_ext() above (see
|
|
1509
|
+
# the `_uhdr` extension probe). The old stale `_ultrahdr` block
|
|
1510
|
+
# was orphaned when commit c9347f5 replaced the Python wrapper
|
|
1511
|
+
# with the direct libuhdr binding.
|
|
1430
1512
|
# EER (Thermo Fisher Electron Event Representation) — cryo-EM
|
|
1431
1513
|
# event-list decoder, vendored from imagecodecs imcd.c (BSD-3).
|
|
1432
1514
|
# No external deps; always built.
|