From e055c1366d98368c18ce6e1a9f976c2f5b82219b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 21 Apr 2024 20:41:31 +0200 Subject: [PATCH 01/21] Rebuilt for blosc2 2.14.4 --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index ee9b366..c3ef1b1 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -4,7 +4,7 @@ Name: python-imagecodecs # Imagecodecs 2023.3.16 requires libjpeg-turbo 3, which is currently in beta: # Imagecodecs 2023.1.23-2022.12.22 requires libtiff 4.5.0 Version: 2022.9.26 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -169,6 +169,9 @@ export CPPFLAGS=-I%{_includedir}/cfitsio %changelog +* Sun Apr 21 2024 Zbigniew Jędrzejewski-Szmek - 2022.9.26-6 +- Rebuilt for blosc2 2.14.4 + * Wed Jan 31 2024 František Zatloukal - 2022.9.26-5 - Rebuilt for libavif 1.0.3 From 422d0bdfff52637bfe1c05678f4be0283df5cca2 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Sun, 4 Feb 2024 21:43:48 -0700 Subject: [PATCH 02/21] Update to 2023.1.23 Add more test dependencies We also need a rebuild for blosc2-2.14.4 which changes the SONAME of libblosc2, which this update handles. --- .gitignore | 1 + imagecodecs_distributor_setup.py | 2 + python-imagecodecs-noexcept.patch | 248 ++++++++++++++++++++++++++++++ python-imagecodecs.spec | 122 +++++++++++++-- sources | 2 +- 5 files changed, 365 insertions(+), 10 deletions(-) create mode 100644 python-imagecodecs-noexcept.patch diff --git a/.gitignore b/.gitignore index c397312..6da5a21 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /imagecodecs-2022.9.26.tar.gz +/imagecodecs-2023.1.23.tar.gz diff --git a/imagecodecs_distributor_setup.py b/imagecodecs_distributor_setup.py index a4ef910..c2ed243 100644 --- a/imagecodecs_distributor_setup.py +++ b/imagecodecs_distributor_setup.py @@ -7,10 +7,12 @@ def customize_build(EXTENSIONS, OPTIONS): del EXTENSIONS['jetraw'] # commercial del EXTENSIONS['jpeg12'] # jpeg12 requires custom build del EXTENSIONS['jpegls'] # Fedora's charls is too old at the moment + del EXTENSIONS['jpegsof3'] # Uses 3rdparty source del EXTENSIONS['jpegxl'] # requires static linking? del EXTENSIONS['ljpeg'] # Uses 3rdparty source del EXTENSIONS['lz4f'] # requires static linking del EXTENSIONS['lzf'] # Uses 3rdparty source + del EXTENSIONS['lzham'] # Uses 3rdparty source del EXTENSIONS['mozjpeg'] # Win32 only del EXTENSIONS['pglz'] # Uses 3rdparty source del EXTENSIONS['qoi'] # Uses 3rdparty source diff --git a/python-imagecodecs-noexcept.patch b/python-imagecodecs-noexcept.patch new file mode 100644 index 0000000..c61fbfe --- /dev/null +++ b/python-imagecodecs-noexcept.patch @@ -0,0 +1,248 @@ +diff -up imagecodecs-2023.1.23/imagecodecs/_cms.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_cms.pyx +--- imagecodecs-2023.1.23/imagecodecs/_cms.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_cms.pyx 2024-02-04 14:46:24.874770321 -0700 +@@ -956,5 +956,5 @@ cdef void _cms_log_error_handler( + cmsContext ContextID, + cmsUInt32Number ErrorCode, + const char *Text +-) with gil: +- _log_warning('CMS error: %s', Text.decode().strip()) +\ No newline at end of file ++) noexcept with gil: ++ _log_warning('CMS error: %s', Text.decode().strip()) +diff -up imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_gif.pyx +--- imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_gif.pyx 2024-02-04 15:39:31.174619739 -0700 +@@ -514,7 +514,7 @@ cdef int gif_output_func( + GifFileType* gif, + const GifByteType* src, + int size +-) nogil: ++) noexcept nogil: + """GIF write callback function.""" + cdef: + memgif_t* memgif = gif.UserData +diff -up imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_gif.pyx +--- imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept 2024-02-04 15:40:40.707246956 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_gif.pyx 2024-02-04 15:46:25.793373376 -0700 +@@ -489,7 +489,7 @@ cdef int gif_input_func( + GifFileType* gif, + GifByteType* dst, + int size +-) nogil: ++) noexcept nogil: + """GIF read callback function.""" + cdef: + memgif_t* memgif = gif.UserData +diff -up imagecodecs-2023.1.23/imagecodecs/_heif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_heif.pyx +--- imagecodecs-2023.1.23/imagecodecs/_heif.pyx.noexcept 2023-01-08 01:14:08.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_heif.pyx 2024-02-04 15:49:04.754813538 -0700 +@@ -769,7 +769,7 @@ cdef heif_error heif_write_callback( + const void* data, + size_t size, + void* userdata +-) nogil: ++) noexcept nogil: + """heif_writer callback function.""" + cdef: + output_t* output = userdata +diff -up imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx +--- imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx 2024-02-04 15:51:39.046211391 -0700 +@@ -393,14 +393,14 @@ ctypedef struct my_error_mgr: + jmp_buf setjmp_buffer + + +-cdef void my_error_exit(jpeg_common_struct* cinfo) nogil: ++cdef void my_error_exit(jpeg_common_struct* cinfo) noexcept nogil: + cdef: + my_error_mgr* error = deref(cinfo).err + + longjmp(deref(error).setjmp_buffer, 1) + + +-cdef void my_output_message(jpeg_common_struct* cinfo) nogil: ++cdef void my_output_message(jpeg_common_struct* cinfo) noexcept nogil: + pass + + +diff -up imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx +--- imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx.noexcept 2023-01-08 01:16:31.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx 2024-02-04 15:58:24.138871893 -0700 +@@ -378,7 +378,7 @@ def jpegxr_decode(data, index=None, fp2i + return out + + +-cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) nogil: ++cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: + """Replacement for WriteWS_Memory to keep track of bytes written.""" + if pWS.state.buf.cbCur + cb < pWS.state.buf.cbCur: + return WMP_errBufferOverflow +@@ -395,7 +395,7 @@ cdef ERR WriteWS_Memory(WMPStream* pWS, + return WMP_errSuccess + + +-cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) nogil: ++cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: + """Replacement for WriteWS_Memory to realloc buffers on overflow. + + Only use with buffers allocated by malloc. +@@ -431,7 +431,7 @@ cdef ERR WriteWS_Realloc(WMPStream* pWS, + return WMP_errSuccess + + +-cdef Bool EOSWS_Realloc(WMPStream* pWS) nogil: ++cdef Bool EOSWS_Realloc(WMPStream* pWS) noexcept nogil: + """Replacement for EOSWS_Memory.""" + # return pWS.state.buf.cbBuf <= pWS.state.buf.cbCur + return 1 +diff -up imagecodecs-2023.1.23/imagecodecs/_png.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_png.pyx +--- imagecodecs-2023.1.23/imagecodecs/_png.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_png.pyx 2024-02-04 16:09:47.113978112 -0700 +@@ -382,7 +382,7 @@ def png_decode(data, index=None, numthre + cdef void png_error_callback( + png_structp png_ptr, + png_const_charp msg +-) nogil: ++) noexcept nogil: + cdef: + mempng_t* mempng = png_get_io_ptr(png_ptr) + +@@ -395,7 +395,7 @@ cdef void png_error_callback( + cdef void png_warn_callback( + png_structp png_ptr, + png_const_charp msg +-) with gil: ++) noexcept with gil: + _log_warning('PNG warning: %s', msg.decode().strip()) + + +@@ -411,7 +411,7 @@ cdef void png_read_data_fn( + png_structp png_ptr, + png_bytep dst, + png_size_t size +-) nogil: ++) noexcept nogil: + """PNG read callback function.""" + cdef: + mempng_t* mempng = png_get_io_ptr(png_ptr) +@@ -436,7 +436,7 @@ cdef void png_write_data_fn( + png_structp png_ptr, + png_bytep src, + png_size_t size +-) nogil: ++) noexcept nogil: + """PNG write callback function.""" + cdef: + mempng_t* mempng = png_get_io_ptr(png_ptr) +@@ -470,7 +470,7 @@ cdef void png_write_data_fn( + mempng.offset += size + + +-cdef void png_output_flush_fn(png_structp png_ptr) nogil: ++cdef void png_output_flush_fn(png_structp png_ptr) noexcept nogil: + """PNG flush callback function.""" + pass + +diff -up imagecodecs-2023.1.23/imagecodecs/_tiff.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_tiff.pyx +--- imagecodecs-2023.1.23/imagecodecs/_tiff.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 ++++ imagecodecs-2023.1.23/imagecodecs/_tiff.pyx 2024-02-04 16:19:07.467291854 -0700 +@@ -842,7 +842,7 @@ cdef memtif_t* memtif_open( + return memtif + + +-cdef memtif_t* memtif_new(toff_t size, toff_t inc) nogil: ++cdef memtif_t* memtif_new(toff_t size, toff_t inc) noexcept nogil: + """Return new memtif with new buffer for writing.""" + cdef: + memtif_t* memtif = malloc(sizeof(memtif_t)) +@@ -864,7 +864,7 @@ cdef memtif_t* memtif_new(toff_t size, t + return memtif + + +-cdef void memtif_del(memtif_t* memtif) nogil: ++cdef void memtif_del(memtif_t* memtif) noexcept nogil: + """Delete memtif.""" + if memtif != NULL: + if memtif.owner: +@@ -876,7 +876,7 @@ cdef tsize_t memtif_TIFFReadProc( + thandle_t handle, + void* buf, + tmsize_t size +-) nogil: ++) noexcept nogil: + """Callback function to read from memtif.""" + cdef: + memtif_t* memtif = handle +@@ -892,7 +892,7 @@ cdef tmsize_t memtif_TIFFWriteProc( + thandle_t handle, + void* buf, + tmsize_t size +-) nogil: ++) noexcept nogil: + """Callback function to write to memtif.""" + cdef: + memtif_t* memtif = handle +@@ -919,7 +919,7 @@ cdef toff_t memtif_TIFFSeekProc( + thandle_t handle, + toff_t off, + int whence +-) nogil: ++) noexcept nogil: + """Callback function to seek to memtif.""" + cdef: + memtif_t* memtif = handle +@@ -968,7 +968,7 @@ cdef toff_t memtif_TIFFSeekProc( + return memtif.fpos + + +-cdef int memtif_TIFFCloseProc(thandle_t handle) nogil: ++cdef int memtif_TIFFCloseProc(thandle_t handle) noexcept nogil: + """Callback function to close memtif.""" + cdef: + memtif_t* memtif = handle +@@ -977,7 +977,7 @@ cdef int memtif_TIFFCloseProc(thandle_t + return 0 + + +-cdef toff_t memtif_TIFFSizeProc(thandle_t handle) nogil: ++cdef toff_t memtif_TIFFSizeProc(thandle_t handle) noexcept nogil: + """Callback function to return size of memtif.""" + cdef: + memtif_t* memtif = handle +@@ -989,7 +989,7 @@ cdef int memtif_TIFFMapFileProc( + thandle_t handle, + void** base, + toff_t* size +-) nogil: ++) noexcept nogil: + """Callback function to map memtif.""" + cdef: + memtif_t* memtif = handle +@@ -1003,7 +1003,7 @@ cdef void memtif_TIFFUnmapFileProc( + thandle_t handle, + void* base, + toff_t size +-) nogil: ++) noexcept nogil: + """Callback function to unmap memtif.""" + return + +@@ -1014,7 +1014,7 @@ cdef int tif_error_handler( + const char* module, + const char* fmt, + va_list args +-) nogil: ++) noexcept nogil: + """Callback function to write libtiff error message to memtif.""" + cdef: + memtif_t* memtif +@@ -1036,7 +1036,7 @@ cdef int tif_warning_handler( + const char* module, + const char* fmt, + va_list args +-) with gil: ++) noexcept with gil: + """Callback function to output libtiff warning message to logging.""" + cdef: + char msg[80] diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index c3ef1b1..16f7a7b 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -1,10 +1,8 @@ %global srcname imagecodecs Name: python-imagecodecs -# Imagecodecs 2023.3.16 requires libjpeg-turbo 3, which is currently in beta: -# Imagecodecs 2023.1.23-2022.12.22 requires libtiff 4.5.0 -Version: 2022.9.26 -Release: 6%{?dist} +Version: 2023.1.23 +Release: 1%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -12,6 +10,7 @@ URL: https://pypi.org/project/imagecodecs/ Source: %{pypi_source} # Build configuration Source1: imagecodecs_distributor_setup.py +Patch0: python-imagecodecs-noexcept.patch BuildRequires: python3-devel BuildRequires: python3-Cython @@ -28,12 +27,13 @@ BuildRequires: libaec-devel BuildRequires: libavif-devel BuildRequires: libdeflate-devel BuildRequires: libheif-devel -BuildRequires: libjpeg-turbo-devel +BuildRequires: libjpeg-turbo-devel >= 3 BuildRequires: liblerc-devel BuildRequires: libpng-devel -BuildRequires: libtiff-devel +BuildRequires: libtiff-devel >= 4.5.0 BuildRequires: libzstd-devel BuildRequires: lz4-devel +BuildRequires: lzfse-devel # Uses 3rdparty source to use private function - https://github.com/cgohlke/imagecodecs/issues/77 #BuildRequires: openjpeg2-devel BuildRequires: snappy-devel @@ -42,7 +42,16 @@ BuildRequires: zfp-devel BuildRequires: zlib-ng-devel BuildRequires: zopfli-devel # Tests -BuildRequires: pytest +BuildRequires: %{py3_dist pytest} +BuildRequires: %{py3_dist blosc} +BuildRequires: %{py3_dist blosc2} +BuildRequires: %{py3_dist lz4} +BuildRequires: %{py3_dist numcodecs} +BuildRequires: %{py3_dist pyliblzfse} +BuildRequires: %{py3_dist python-snappy} +BuildRequires: %{py3_dist tifffile} +BuildRequires: %{py3_dist zarr} +BuildRequires: %{py3_dist zstd} %global _description %{expand: Imagecodecs is a Python library that provides block-oriented, in-memory @@ -78,11 +87,15 @@ rm -f $(grep -rl '/\* Generated by Cython') rm -r 3rdparty %generate_buildrequires +# We need to import the local imagecodecs_distributor_setup.py file +export PYTHONPATH=. %pyproject_buildrequires %build export CPPFLAGS=-I%{_includedir}/cfitsio +# We need to import the local imagecodecs_distributor_setup.py file +export PYTHONPATH=. %pyproject_wheel @@ -92,11 +105,26 @@ export CPPFLAGS=-I%{_includedir}/cfitsio %check -# tifffile is too old at this point to run the tifffile tests +# TODO - tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-H-f] segfaults +# TODO - investigae blosc2 test failues - value differences # spng_encode appears to not be available with openjpeg2 disabled, but the test still tries to run # Other deselected tests seem to be related to unsupported compression types # A number of tests fail on s390x, ignore that for now -%pytest -v --deselect tests/test_imagecodecs.py::test_tifffile \ +%pytest -v \ + --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-f-B]" \ + --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-H-f]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-new]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-bytearray]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-out]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-size]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-new]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-bytearray]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-out]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-size]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-new]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-bytearray]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-out]" \ + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-size]" \ --deselect tests/test_imagecodecs.py::test_spng_encode \ --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-None]" \ --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-5]" \ @@ -158,6 +186,78 @@ export CPPFLAGS=-I%{_includedir}/cfitsio --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-True]" \ --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-gray]" \ --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-rgb]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f8-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.tiled.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f8-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f4-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u4-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c8-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.tiled.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.separate.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f4-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.series.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.tiled.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i4-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.predict.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.contig.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigendian.u2-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigtiff.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.stack.u1-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c16-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i8-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u8-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.f4-False]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_index[0]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_index[3]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_index[None]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_index[list]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_index[slice]" \ + --deselect "tests/test_imagecodecs.py::test_tiff_asrgb" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2->]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4-<]" \ + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4->]" \ %ifarch s390x || exit 0 %endif @@ -169,6 +269,10 @@ export CPPFLAGS=-I%{_includedir}/cfitsio %changelog +* Sun Apr 21 2024 Orion Poplawski - 2023.1.23-1 +- Update to 2023.1.23 +- Add more test dependencies + * Sun Apr 21 2024 Zbigniew Jędrzejewski-Szmek - 2022.9.26-6 - Rebuilt for blosc2 2.14.4 diff --git a/sources b/sources index 6b3cc8e..6bff86b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (imagecodecs-2022.9.26.tar.gz) = 3f1fd8f475e19ec12b52797c58afd49581be495acd59380cd145ed3d60719b55f4cfffaf0a5564595de058b9a3cfb4ff2ec43ed507d0a1cb6c90d7eb7cc9ea48 +SHA512 (imagecodecs-2023.1.23.tar.gz) = 424a09bd86cf376efdd8f1e15175c7ff403860b7ff7289f9685fc949d2e37f59e8fba3793938dffca2dd3eb476f42bcd7e1fcc87f91be17eef37b3c2c1072993 From 82c2ac0d3a49fd29c35a43a00b1b4f29f1c16bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 21 Apr 2024 21:26:28 +0200 Subject: [PATCH 03/21] Fully skip segfaulting test_cms_identity_transforms --- python-imagecodecs.spec | 308 ++++++++++++++++++++-------------------- 1 file changed, 155 insertions(+), 153 deletions(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 16f7a7b..6a4bdc5 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -105,161 +105,163 @@ export PYTHONPATH=. %check -# TODO - tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-H-f] segfaults -# TODO - investigae blosc2 test failues - value differences -# spng_encode appears to not be available with openjpeg2 disabled, but the test still tries to run -# Other deselected tests seem to be related to unsupported compression types +TEST_OPTS=( + # TODO - tests/test_imagecodecs.py::test_cms_identity_transforms segfaults (various cases) + --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms" + # TODO - investigate blosc2 test failues - value differences + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-new]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-bytearray]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-out]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-size]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-new]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-bytearray]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-out]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-size]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-new]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-bytearray]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-out]" + --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-size]" + # spng_encode appears to not be available with openjpeg2 disabled, but the test still tries to run + --deselect tests/test_imagecodecs.py::test_spng_encode + # Other deselected tests seem to be related to unsupported compression types + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.lerc.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.lerc.u1-True]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-True]" + --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-gray]" + --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-rgb]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f8-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.tiled.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f8-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f4-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u4-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c8-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.tiled.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.separate.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f4-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.series.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.tiled.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i4-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.predict.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.contig.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigendian.u2-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigtiff.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.stack.u1-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c16-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i8-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u8-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.f4-False]" + --deselect "tests/test_imagecodecs.py::test_tiff_index[0]" + --deselect "tests/test_imagecodecs.py::test_tiff_index[3]" + --deselect "tests/test_imagecodecs.py::test_tiff_index[None]" + --deselect "tests/test_imagecodecs.py::test_tiff_index[list]" + --deselect "tests/test_imagecodecs.py::test_tiff_index[slice]" + --deselect "tests/test_imagecodecs.py::test_tiff_asrgb" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2->]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4-<]" + --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4->]" +) + # A number of tests fail on s390x, ignore that for now -%pytest -v \ - --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-f-B]" \ - --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms[None-True-False-H-f]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-new]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-bytearray]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-out]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-size]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-new]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-bytearray]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-out]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-2-size]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-new]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-bytearray]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-out]" \ - --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-3069-size]" \ - --deselect tests/test_imagecodecs.py::test_spng_encode \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-out-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-bytearray-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-new-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-out-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-new--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-out--1]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray-None]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray-5]" \ - --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgba-bytearray-bytearray--1]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.lerc.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.lerc.u1-True]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-True]" \ - --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-gray]" \ - --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-rgb]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f8-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.tiled.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f8-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f4-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u4-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c8-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.separate.tiled.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.separate.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.f2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.u2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f4-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.series.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.tiled.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i4-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgba.separate.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.predict.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.contig.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigendian.u2-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.bigtiff.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.stack.u1-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.c16-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i8-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.u8-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.tiled.f4-False]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_index[0]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_index[3]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_index[None]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_index[list]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_index[slice]" \ - --deselect "tests/test_imagecodecs.py::test_tiff_asrgb" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u1->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-u2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-False-f4->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u1->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-u2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[deflate-True-f4->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u1->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-u2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-False-f4->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u1->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-u2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f2->]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4-<]" \ - --deselect "tests/test_imagecodecs.py::test_tifffile[lzma-True-f4->]" \ +%pytest -v "${TEST_OPTS[@]}" \ %ifarch s390x - || exit 0 + || : %endif %files -n python3-imagecodecs -f %{pyproject_files} From a5d427956380a72dfa4f3787fedd9cd34768ea9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 21 Apr 2024 21:44:56 +0200 Subject: [PATCH 04/21] Do not build for i386 and drop unavailable dep on s390x --- imagecodecs_distributor_setup.py | 5 +++++ python-imagecodecs.spec | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/imagecodecs_distributor_setup.py b/imagecodecs_distributor_setup.py index c2ed243..b711920 100644 --- a/imagecodecs_distributor_setup.py +++ b/imagecodecs_distributor_setup.py @@ -1,3 +1,5 @@ +import platform + def customize_build(EXTENSIONS, OPTIONS): """Customize build for Fedora""" @@ -27,3 +29,6 @@ def customize_build(EXTENSIONS, OPTIONS): del EXTENSIONS['jpeg2k'] # Uses 3rdparty source to use private function - https://github.com/cgohlke/imagecodecs/issues/77 EXTENSIONS['jpegxr']['include_dirs'].append('/usr/include/jxrlib') EXTENSIONS['zopfli']['include_dirs'].append('/usr/include/zopfli') + + if platform.machine() == 's390x': + del EXTENSIONS['lzfse'] # Not supported on big-endian diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 6a4bdc5..1a84145 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -12,6 +12,8 @@ Source: %{pypi_source} Source1: imagecodecs_distributor_setup.py Patch0: python-imagecodecs-noexcept.patch +ExcludeArch: %{ix86} + BuildRequires: python3-devel BuildRequires: python3-Cython BuildRequires: gcc-c++ @@ -20,6 +22,7 @@ BuildRequires: blosc2-devel BuildRequires: bzip2-devel BuildRequires: cfitsio-devel BuildRequires: CharLS-devel +BuildRequires: brotli-devel BuildRequires: giflib-devel BuildRequires: jxrlib-devel BuildRequires: lcms2-devel @@ -33,7 +36,9 @@ BuildRequires: libpng-devel BuildRequires: libtiff-devel >= 4.5.0 BuildRequires: libzstd-devel BuildRequires: lz4-devel +%ifnarch s390x BuildRequires: lzfse-devel +%endif # Uses 3rdparty source to use private function - https://github.com/cgohlke/imagecodecs/issues/77 #BuildRequires: openjpeg2-devel BuildRequires: snappy-devel @@ -45,13 +50,16 @@ BuildRequires: zopfli-devel BuildRequires: %{py3_dist pytest} BuildRequires: %{py3_dist blosc} BuildRequires: %{py3_dist blosc2} +BuildRequires: %{py3_dist brotli} BuildRequires: %{py3_dist lz4} BuildRequires: %{py3_dist numcodecs} -BuildRequires: %{py3_dist pyliblzfse} BuildRequires: %{py3_dist python-snappy} BuildRequires: %{py3_dist tifffile} BuildRequires: %{py3_dist zarr} BuildRequires: %{py3_dist zstd} +%ifnarch s390x +BuildRequires: %{py3_dist pyliblzfse} +%endif %global _description %{expand: Imagecodecs is a Python library that provides block-oriented, in-memory From c2178e71d0ddbf97945af88fbabf304d32dbdbd8 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Mon, 17 Jun 2024 22:51:17 +0200 Subject: [PATCH 05/21] Rebuilt for Python 3.13 --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 1a84145..aaa74a3 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2023.1.23 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -279,6 +279,9 @@ TEST_OPTS=( %changelog +* Mon Jun 17 2024 Python Maint - 2023.1.23-2 +- Rebuilt for Python 3.13 + * Sun Apr 21 2024 Orion Poplawski - 2023.1.23-1 - Update to 2023.1.23 - Add more test dependencies From 480c3886823de2fe427f4c4febddc52f5707dcf0 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jul 2024 12:17:47 +0000 Subject: [PATCH 06/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index aaa74a3..8241d9b 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2023.1.23 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -279,6 +279,9 @@ TEST_OPTS=( %changelog +* Fri Jul 19 2024 Fedora Release Engineering - 2023.1.23-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Mon Jun 17 2024 Python Maint - 2023.1.23-2 - Rebuilt for Python 3.13 From b70ae6db0ac9619e95c72b16e6324d7a64d359ae Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Tue, 3 Sep 2024 22:26:25 -0600 Subject: [PATCH 07/21] Add patch to fix FTBFS Ignore test segfault for now --- python-imagecodecs-nobcn.patch | 141 +++++++++++++++++ python-imagecodecs-noexcept.patch | 251 ++++++++++++++++++++++++++++++ python-imagecodecs.spec | 9 +- 3 files changed, 400 insertions(+), 1 deletion(-) create mode 100644 python-imagecodecs-nobcn.patch create mode 100644 python-imagecodecs-noexcept.patch diff --git a/python-imagecodecs-nobcn.patch b/python-imagecodecs-nobcn.patch new file mode 100644 index 0000000..3623ce8 --- /dev/null +++ b/python-imagecodecs-nobcn.patch @@ -0,0 +1,141 @@ +diff -up imagecodecs-2024.1.1/imagecodecs/imagecodecs.py.nobcn imagecodecs-2024.1.1/imagecodecs/imagecodecs.py +--- imagecodecs-2024.1.1/imagecodecs/imagecodecs.py.nobcn 2023-12-28 21:05:16.000000000 -0700 ++++ imagecodecs-2024.1.1/imagecodecs/imagecodecs.py 2024-02-12 21:32:54.460164389 -0700 +@@ -710,20 +710,6 @@ _MODULES: dict[str, list[str]] = { + 'cms_check', + 'cms_version', + ], +- '_bcn': [ +- 'BCN', +- 'BcnError', +- 'bcn_encode', +- 'bcn_decode', +- 'bcn_check', +- 'bcn_version', +- 'DDS', +- 'DdsError', +- 'dds_encode', +- 'dds_decode', +- 'dds_check', +- 'dds_version', +- ], + '_deflate': [ + 'DEFLATE', + 'DeflateError', +diff -up imagecodecs-2024.1.1/setup.py.nobcn imagecodecs-2024.1.1/setup.py +diff -up imagecodecs-2024.1.1/imagecodecs/__init__.pyi.nobcn imagecodecs-2024.1.1/imagecodecs/__init__.pyi +--- imagecodecs-2024.1.1/imagecodecs/__init__.pyi.nobcn 2023-12-28 13:34:01.000000000 -0700 ++++ imagecodecs-2024.1.1/imagecodecs/__init__.pyi 2024-02-12 21:35:34.919824196 -0700 +@@ -378,57 +378,6 @@ def avif_decode( + """Return decoded AVIF image.""" + + +-class BCN: +- """BCn codec constants.""" +- +- available: bool +- """BCn codec is available.""" +- +- class FORMAT(enum.IntEnum): +- """BCn compression format.""" +- +- BC1 = 1 # DXT1 +- BC2 = 2 # DXT3 +- BC3 = 3 # DXT5 +- BC4 = 4 # BC4_UNORM +- BC5 = 5 # BC5_UNORM +- BC6HU = 6 # BC6H_UF16 +- BC6HS = -6 # BC6H_SF16 +- BC7 = 7 # BC7_UNORM +- +- +-class BcnError(RuntimeError): +- """BCn codec exceptions.""" +- +- +-def bcn_version() -> str: +- """Return bcdec library version string.""" +- +- +-def bcn_check(data: BytesLike, /) -> None: +- """Return whether data is BCn encoded.""" +- +- +-def bcn_encode( +- data: BytesLike, +- /, +- *, +- out: int | bytearray | None = None, +-) -> bytes | bytearray: +- """Return BCn encoded data (not implemented).""" +- +- +-def bcn_decode( +- data: BytesLike, +- format: BCN.FORMAT | int, +- /, +- shape: tuple[int, ...] | None = None, +- *, +- out: int | bytearray | memoryview | None = None, +-) -> bytes | bytearray: +- """Return decoded BCn data.""" +- +- + class BITORDER: + """BITORDER codec constants.""" + +diff -up imagecodecs-2024.1.1/setup.py.nobcn imagecodecs-2024.1.1/setup.py +--- imagecodecs-2024.1.1/setup.py.nobcn 2023-12-28 15:06:07.000000000 -0700 ++++ imagecodecs-2024.1.1/setup.py 2024-02-12 21:37:26.229282364 -0700 +@@ -122,10 +122,6 @@ EXTENSIONS = { + 'aec': ext(libraries=['aec']), + 'apng': ext(libraries=['png']), + 'avif': ext(libraries=['avif']), +- 'bcn': ext( +- include_dirs=['3rdparty/bcdec'], +- define_macros=[('BCDEC_STATIC', 1), ('BCDEC_IMPLEMENTATION', 1)], +- ), + 'bitshuffle': ext( + sources=[ + '3rdparty/bitshuffle/bitshuffle_core.c', +diff -up imagecodecs-2024.1.1/setup.py.nobcn imagecodecs-2024.1.1/setup.py +--- imagecodecs-2024.1.1/setup.py.nobcn 2024-02-12 21:44:36.012054859 -0700 ++++ imagecodecs-2024.1.1/setup.py 2024-02-12 21:45:05.113176289 -0700 +@@ -586,6 +586,7 @@ if 'sdist' not in sys.argv: + else: + customize_build = customize_build_default + ++ print(f'customize_build = {customize_build}') + customize_build(EXTENSIONS, OPTIONS) + + +diff -up imagecodecs-2024.1.1/setup.py.nobcn imagecodecs-2024.1.1/setup.py +--- imagecodecs-2024.1.1/setup.py.nobcn 2024-02-12 21:46:16.313473389 -0700 ++++ imagecodecs-2024.1.1/setup.py 2024-02-12 21:46:30.849534044 -0700 +@@ -568,23 +568,9 @@ def customize_build_mingw(EXTENSIONS, OP + + if 'sdist' not in sys.argv: + # customize builds based on environment +- try: +- from imagecodecs_distributor_setup import ( # type: ignore +- customize_build, +- ) +- except ImportError: +- if os.environ.get('COMPUTERNAME', '').startswith('CG-'): +- customize_build = customize_build_cgohlke +- elif os.environ.get('IMAGECODECS_CIBW', ''): +- customize_build = customize_build_cibuildwheel +- elif os.environ.get('CONDA_BUILD', ''): +- customize_build = customize_build_condaforge +- elif shutil.which('port'): +- customize_build = customize_build_macports +- elif os.name == 'nt' and 'GCC' in sys.version: +- customize_build = customize_build_mingw +- else: +- customize_build = customize_build_default ++ from imagecodecs_distributor_setup import ( # type: ignore ++ customize_build, ++ ) + + print(f'customize_build = {customize_build}') + customize_build(EXTENSIONS, OPTIONS) diff --git a/python-imagecodecs-noexcept.patch b/python-imagecodecs-noexcept.patch new file mode 100644 index 0000000..958dc77 --- /dev/null +++ b/python-imagecodecs-noexcept.patch @@ -0,0 +1,251 @@ +diff --git a/imagecodecs/_cms.pyx b/imagecodecs/_cms.pyx +index 37f9f12..dc3e778 100644 +--- a/imagecodecs/_cms.pyx ++++ b/imagecodecs/_cms.pyx +@@ -942,5 +942,5 @@ cdef void _cms_log_error_handler( + cmsContext ContextID, + cmsUInt32Number ErrorCode, + const char *Text +-) with gil: +- _log_warning('CMS error: %s', Text.decode().strip()) +\ No newline at end of file ++) noexcept with gil: ++ _log_warning('CMS error: %s', Text.decode().strip()) +diff --git a/imagecodecs/_gif.pyx b/imagecodecs/_gif.pyx +index 82f023f..000c5bb 100644 +--- a/imagecodecs/_gif.pyx ++++ b/imagecodecs/_gif.pyx +@@ -489,7 +489,7 @@ cdef int gif_input_func( + GifFileType* gif, + GifByteType* dst, + int size +-) nogil: ++) noexcept nogil: + """GIF read callback function.""" + cdef: + memgif_t* memgif = gif.UserData +@@ -514,7 +514,7 @@ cdef int gif_output_func( + GifFileType* gif, + const GifByteType* src, + int size +-) nogil: ++) noexcept nogil: + """GIF write callback function.""" + cdef: + memgif_t* memgif = gif.UserData +diff --git a/imagecodecs/_heif.pyx b/imagecodecs/_heif.pyx +index 408e36c..41acb6d 100644 +--- a/imagecodecs/_heif.pyx ++++ b/imagecodecs/_heif.pyx +@@ -771,7 +771,7 @@ cdef heif_error heif_write_callback( + const void* data, + size_t size, + void* userdata +-) nogil: ++) noexcept nogil: + """heif_writer callback function.""" + cdef: + output_t* output = userdata +diff --git a/imagecodecs/_jpeg8.pyx b/imagecodecs/_jpeg8.pyx +index 19b1ce8..5f8bc4e 100644 +--- a/imagecodecs/_jpeg8.pyx ++++ b/imagecodecs/_jpeg8.pyx +@@ -393,14 +393,14 @@ ctypedef struct my_error_mgr: + jmp_buf setjmp_buffer + + +-cdef void my_error_exit(jpeg_common_struct* cinfo) nogil: ++cdef void my_error_exit(jpeg_common_struct* cinfo) noexcept nogil: + cdef: + my_error_mgr* error = deref(cinfo).err + + longjmp(deref(error).setjmp_buffer, 1) + + +-cdef void my_output_message(jpeg_common_struct* cinfo) nogil: ++cdef void my_output_message(jpeg_common_struct* cinfo) noexcept nogil: + pass + + +diff --git a/imagecodecs/_jpegxr.pyx b/imagecodecs/_jpegxr.pyx +index 548fcdf..b0cb11f 100644 +--- a/imagecodecs/_jpegxr.pyx ++++ b/imagecodecs/_jpegxr.pyx +@@ -378,7 +378,7 @@ def jpegxr_decode(data, index=None, fp2int=False, numthreads=None, out=None): + return out + + +-cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) nogil: ++cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: + """Relpacement for WriteWS_Memory to keep track of bytes written.""" + if pWS.state.buf.cbCur + cb < pWS.state.buf.cbCur: + return WMP_errBufferOverflow +@@ -395,7 +395,7 @@ cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) nogil: + return WMP_errSuccess + + +-cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) nogil: ++cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: + """Relpacement for WriteWS_Memory to realloc buffers on overflow. + + Only use with buffers allocated by malloc. +@@ -431,7 +431,7 @@ cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) nogil: + return WMP_errSuccess + + +-cdef Bool EOSWS_Realloc(WMPStream* pWS) nogil: ++cdef Bool EOSWS_Realloc(WMPStream* pWS) noexcept nogil: + """Relpacement for EOSWS_Memory.""" + # return pWS.state.buf.cbBuf <= pWS.state.buf.cbCur + return 1 +diff --git a/imagecodecs/_png.pyx b/imagecodecs/_png.pyx +index ce2b597..bdb0f23 100644 +--- a/imagecodecs/_png.pyx ++++ b/imagecodecs/_png.pyx +@@ -328,14 +328,14 @@ def png_decode(data, index=None, numthreads=None, out=None): + cdef void png_error_callback( + png_structp png_ptr, + png_const_charp msg +-) with gil: ++) noexcept with gil: + raise PngError(msg.decode().strip()) + + + cdef void png_warn_callback( + png_structp png_ptr, + png_const_charp msg +-) with gil: ++) noexcept with gil: + _log_warning('PNG warning: %s', msg.decode().strip()) + + +@@ -350,7 +350,7 @@ cdef void png_read_data_fn( + png_structp png_ptr, + png_bytep dst, + png_size_t size +-) nogil: ++) noexcept nogil: + """PNG read callback function.""" + cdef: + mempng_t* mempng = png_get_io_ptr(png_ptr) +@@ -373,7 +373,7 @@ cdef void png_write_data_fn( + png_structp png_ptr, + png_bytep src, + png_size_t size +-) nogil: ++) noexcept nogil: + """PNG write callback function.""" + cdef: + mempng_t* mempng = png_get_io_ptr(png_ptr) +@@ -404,7 +404,7 @@ cdef void png_write_data_fn( + mempng.offset += size + + +-cdef void png_output_flush_fn(png_structp png_ptr) nogil: ++cdef void png_output_flush_fn(png_structp png_ptr) noexcept nogil: + """PNG flush callback function.""" + pass + +diff --git a/imagecodecs/_tiff.pyx b/imagecodecs/_tiff.pyx +index 488e8f5..32fc847 100644 +--- a/imagecodecs/_tiff.pyx ++++ b/imagecodecs/_tiff.pyx +@@ -821,7 +821,7 @@ cdef memtif_t* memtif_open( + return memtif + + +-cdef memtif_t* memtif_new(toff_t size, toff_t inc) nogil: ++cdef memtif_t* memtif_new(toff_t size, toff_t inc) noexcept nogil: + """Return new memtif with new buffer for writing.""" + cdef: + memtif_t* memtif = malloc(sizeof(memtif_t)) +@@ -842,7 +842,7 @@ cdef memtif_t* memtif_new(toff_t size, toff_t inc) nogil: + return memtif + + +-cdef void memtif_del(memtif_t* memtif) nogil: ++cdef void memtif_del(memtif_t* memtif) noexcept nogil: + """Delete memtif.""" + if memtif != NULL: + if memtif.owner: +@@ -854,7 +854,7 @@ cdef tsize_t memtif_TIFFReadProc( + thandle_t handle, + void* buf, + tmsize_t size +-) nogil: ++) noexcept nogil: + """Callback function to read from memtif.""" + cdef: + memtif_t* memtif = handle +@@ -870,7 +870,7 @@ cdef tmsize_t memtif_TIFFWriteProc( + thandle_t handle, + void* buf, + tmsize_t size +-) nogil: ++) noexcept nogil: + """Callback function to write to memtif.""" + cdef: + memtif_t* memtif = handle +@@ -897,7 +897,7 @@ cdef toff_t memtif_TIFFSeekProc( + thandle_t handle, + toff_t off, + int whence +-) nogil: ++) noexcept nogil: + """Callback function to seek to memtif.""" + cdef: + memtif_t* memtif = handle +@@ -946,7 +946,7 @@ cdef toff_t memtif_TIFFSeekProc( + return memtif.fpos + + +-cdef int memtif_TIFFCloseProc(thandle_t handle) nogil: ++cdef int memtif_TIFFCloseProc(thandle_t handle) noexcept nogil: + """Callback function to close memtif.""" + cdef: + memtif_t* memtif = handle +@@ -955,7 +955,7 @@ cdef int memtif_TIFFCloseProc(thandle_t handle) nogil: + return 0 + + +-cdef toff_t memtif_TIFFSizeProc(thandle_t handle) nogil: ++cdef toff_t memtif_TIFFSizeProc(thandle_t handle) noexcept nogil: + """Callback function to return size of memtif.""" + cdef: + memtif_t* memtif = handle +@@ -967,7 +967,7 @@ cdef int memtif_TIFFMapFileProc( + thandle_t handle, + void** base, + toff_t* size +-) nogil: ++) noexcept nogil: + """Callback function to map memtif.""" + cdef: + memtif_t* memtif = handle +@@ -981,7 +981,7 @@ cdef void memtif_TIFFUnmapFileProc( + thandle_t handle, + void* base, + toff_t size +-) nogil: ++) noexcept nogil: + """Callback function to unmap memtif.""" + return + +@@ -991,7 +991,7 @@ cdef void tif_error_handler( + const char* module, + const char* fmt, + va_list args +-) nogil: ++) noexcept nogil: + """Callback function to write libtiff error message to memtif.""" + cdef: + memtif_t* memtif +@@ -1010,7 +1010,7 @@ cdef void tif_warning_handler( + const char* module, + const char* fmt, + va_list args +-) with gil: ++) noexcept with gil: + """Callback function to output libtiff warning message to logging.""" + cdef: + char msg[80] diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index ee9b366..0291ba9 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -4,7 +4,7 @@ Name: python-imagecodecs # Imagecodecs 2023.3.16 requires libjpeg-turbo 3, which is currently in beta: # Imagecodecs 2023.1.23-2022.12.22 requires libtiff 4.5.0 Version: 2022.9.26 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -12,6 +12,7 @@ URL: https://pypi.org/project/imagecodecs/ Source: %{pypi_source} # Build configuration Source1: imagecodecs_distributor_setup.py +Patch0: python-imagecodecs-noexcept.patch BuildRequires: python3-devel BuildRequires: python3-Cython @@ -96,8 +97,10 @@ export CPPFLAGS=-I%{_includedir}/cfitsio # spng_encode appears to not be available with openjpeg2 disabled, but the test still tries to run # Other deselected tests seem to be related to unsupported compression types # A number of tests fail on s390x, ignore that for now +# TODO - tests/test_imagecodecs.py::test_cms_identity_transforms segfaults (various cases) %pytest -v --deselect tests/test_imagecodecs.py::test_tifffile \ --deselect tests/test_imagecodecs.py::test_spng_encode \ + --deselect tests/test_imagecodecs.py::test_cms_identity_transforms \ --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-None]" \ --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-5]" \ --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new--1]" \ @@ -169,6 +172,10 @@ export CPPFLAGS=-I%{_includedir}/cfitsio %changelog +* Wed Sep 04 2024 Orion Poplawski - 2022.9.26-6 +- Add patch to fix FTBFS +- Ignore test segfault for now + * Wed Jan 31 2024 František Zatloukal - 2022.9.26-5 - Rebuilt for libavif 1.0.3 From 6e76669e4b5b551e6a54266c1c9b2db3cdf05c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Sep 2024 12:27:31 +0200 Subject: [PATCH 08/21] Rebuilt for blosc2-2.15.1-1 From 6d3e8893c87806b639ca8c65acc979e7fc80cd5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Sep 2024 12:31:37 +0200 Subject: [PATCH 09/21] Add manual changelog entry --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 8241d9b..7c03543 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2023.1.23 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -279,6 +279,9 @@ TEST_OPTS=( %changelog +* Tue Sep 10 2024 Zbigniew Jedrzejewski-Szmek - 2023.1.23-4 +- Rebuilt for blosc2-2.15.1-1 + * Fri Jul 19 2024 Fedora Release Engineering - 2023.1.23-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 430a462944a6a2cb308b67d681d32253d341fc0a Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 18 Jan 2025 15:08:22 +0000 Subject: [PATCH 10/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 7c03543..28aa4b4 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2023.1.23 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -279,6 +279,9 @@ TEST_OPTS=( %changelog +* Sat Jan 18 2025 Fedora Release Engineering - 2023.1.23-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Tue Sep 10 2024 Zbigniew Jedrzejewski-Szmek - 2023.1.23-4 - Rebuilt for blosc2-2.15.1-1 From 8327bbdad62517d7229023d9d3a8e80d5065a95b Mon Sep 17 00:00:00 2001 From: Sandro Date: Wed, 22 Jan 2025 23:27:16 +0100 Subject: [PATCH 11/21] Update to 2024.9.22 - Add support for NumPy 2.x --- .gitignore | 1 + python-imagecodecs.spec | 9 +++++++-- sources | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6da5a21..661de5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /imagecodecs-2022.9.26.tar.gz /imagecodecs-2023.1.23.tar.gz +/imagecodecs-2024.9.22.tar.gz diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 28aa4b4..b44281a 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -1,8 +1,8 @@ %global srcname imagecodecs Name: python-imagecodecs -Version: 2023.1.23 -Release: 5%{?dist} +Version: 2024.9.22 +Release: 1%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -279,6 +279,11 @@ TEST_OPTS=( %changelog +* Wed Jan 22 2025 Sandro - 2024.9.22-1 +- Update to 2024.9.22 +- Add support for NumPy 2.x +- Close RHBZ#2341164 + * Sat Jan 18 2025 Fedora Release Engineering - 2023.1.23-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild diff --git a/sources b/sources index 6bff86b..9e931e9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (imagecodecs-2023.1.23.tar.gz) = 424a09bd86cf376efdd8f1e15175c7ff403860b7ff7289f9685fc949d2e37f59e8fba3793938dffca2dd3eb476f42bcd7e1fcc87f91be17eef37b3c2c1072993 +SHA512 (imagecodecs-2024.9.22.tar.gz) = 4de94d77827c95c82fb625b0e60431f2f884cb17edc44d290d93dddc942ea180ba86f9494d6dd6d483f42112eb0357689430a3f32643ece2e8930d013d3e8446 From 7a525cb6204bd57e400ac31ece4b1f39d39852b1 Mon Sep 17 00:00:00 2001 From: Sandro Date: Wed, 22 Jan 2025 23:27:30 +0100 Subject: [PATCH 12/21] Adjust build for latest release --- imagecodecs_distributor_setup.py | 13 +- python-imagecodecs-noexcept.patch | 248 ------------------------------ python-imagecodecs.spec | 4 +- 3 files changed, 15 insertions(+), 250 deletions(-) delete mode 100644 python-imagecodecs-noexcept.patch diff --git a/imagecodecs_distributor_setup.py b/imagecodecs_distributor_setup.py index b711920..ab093ab 100644 --- a/imagecodecs_distributor_setup.py +++ b/imagecodecs_distributor_setup.py @@ -7,7 +7,6 @@ def customize_build(EXTENSIONS, OPTIONS): del EXTENSIONS['bitshuffle'] # Uses 3rdparty source del EXTENSIONS['brunsli'] # not available on Fedora del EXTENSIONS['jetraw'] # commercial - del EXTENSIONS['jpeg12'] # jpeg12 requires custom build del EXTENSIONS['jpegls'] # Fedora's charls is too old at the moment del EXTENSIONS['jpegsof3'] # Uses 3rdparty source del EXTENSIONS['jpegxl'] # requires static linking? @@ -32,3 +31,15 @@ def customize_build(EXTENSIONS, OPTIONS): if platform.machine() == 's390x': del EXTENSIONS['lzfse'] # Not supported on big-endian + # New or changed in 2024.9.22 + del EXTENSIONS['bcn'] # not available in Fedora + del EXTENSIONS['h5checksum'] # uses 3rdparty source + EXTENSIONS['jpeg8']['sources'] = [] # requires libjpeg-turbo v3 + del EXTENSIONS['jpegxs'] # not available on Fedora + del EXTENSIONS['lzo'] # Uses 3rdparty source + del EXTENSIONS['pcodec'] # Uses 3rdparty source + del EXTENSIONS['quantize'] # Uses 3rdparty source + del EXTENSIONS['rcomp'] # Uses 3rdparty source + del EXTENSIONS['sperr'] # Uses 3rdparty source + del EXTENSIONS['sz3'] # Uses 3rdparty source + del EXTENSIONS['ultrahdr'] # Uses 3rdparty source diff --git a/python-imagecodecs-noexcept.patch b/python-imagecodecs-noexcept.patch deleted file mode 100644 index c61fbfe..0000000 --- a/python-imagecodecs-noexcept.patch +++ /dev/null @@ -1,248 +0,0 @@ -diff -up imagecodecs-2023.1.23/imagecodecs/_cms.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_cms.pyx ---- imagecodecs-2023.1.23/imagecodecs/_cms.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_cms.pyx 2024-02-04 14:46:24.874770321 -0700 -@@ -956,5 +956,5 @@ cdef void _cms_log_error_handler( - cmsContext ContextID, - cmsUInt32Number ErrorCode, - const char *Text --) with gil: -- _log_warning('CMS error: %s', Text.decode().strip()) -\ No newline at end of file -+) noexcept with gil: -+ _log_warning('CMS error: %s', Text.decode().strip()) -diff -up imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_gif.pyx ---- imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_gif.pyx 2024-02-04 15:39:31.174619739 -0700 -@@ -514,7 +514,7 @@ cdef int gif_output_func( - GifFileType* gif, - const GifByteType* src, - int size --) nogil: -+) noexcept nogil: - """GIF write callback function.""" - cdef: - memgif_t* memgif = gif.UserData -diff -up imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_gif.pyx ---- imagecodecs-2023.1.23/imagecodecs/_gif.pyx.noexcept 2024-02-04 15:40:40.707246956 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_gif.pyx 2024-02-04 15:46:25.793373376 -0700 -@@ -489,7 +489,7 @@ cdef int gif_input_func( - GifFileType* gif, - GifByteType* dst, - int size --) nogil: -+) noexcept nogil: - """GIF read callback function.""" - cdef: - memgif_t* memgif = gif.UserData -diff -up imagecodecs-2023.1.23/imagecodecs/_heif.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_heif.pyx ---- imagecodecs-2023.1.23/imagecodecs/_heif.pyx.noexcept 2023-01-08 01:14:08.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_heif.pyx 2024-02-04 15:49:04.754813538 -0700 -@@ -769,7 +769,7 @@ cdef heif_error heif_write_callback( - const void* data, - size_t size, - void* userdata --) nogil: -+) noexcept nogil: - """heif_writer callback function.""" - cdef: - output_t* output = userdata -diff -up imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx ---- imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_jpeg8.pyx 2024-02-04 15:51:39.046211391 -0700 -@@ -393,14 +393,14 @@ ctypedef struct my_error_mgr: - jmp_buf setjmp_buffer - - --cdef void my_error_exit(jpeg_common_struct* cinfo) nogil: -+cdef void my_error_exit(jpeg_common_struct* cinfo) noexcept nogil: - cdef: - my_error_mgr* error = deref(cinfo).err - - longjmp(deref(error).setjmp_buffer, 1) - - --cdef void my_output_message(jpeg_common_struct* cinfo) nogil: -+cdef void my_output_message(jpeg_common_struct* cinfo) noexcept nogil: - pass - - -diff -up imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx ---- imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx.noexcept 2023-01-08 01:16:31.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_jpegxr.pyx 2024-02-04 15:58:24.138871893 -0700 -@@ -378,7 +378,7 @@ def jpegxr_decode(data, index=None, fp2i - return out - - --cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) nogil: -+cdef ERR WriteWS_Memory(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: - """Replacement for WriteWS_Memory to keep track of bytes written.""" - if pWS.state.buf.cbCur + cb < pWS.state.buf.cbCur: - return WMP_errBufferOverflow -@@ -395,7 +395,7 @@ cdef ERR WriteWS_Memory(WMPStream* pWS, - return WMP_errSuccess - - --cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) nogil: -+cdef ERR WriteWS_Realloc(WMPStream* pWS, const void* pv, size_t cb) noexcept nogil: - """Replacement for WriteWS_Memory to realloc buffers on overflow. - - Only use with buffers allocated by malloc. -@@ -431,7 +431,7 @@ cdef ERR WriteWS_Realloc(WMPStream* pWS, - return WMP_errSuccess - - --cdef Bool EOSWS_Realloc(WMPStream* pWS) nogil: -+cdef Bool EOSWS_Realloc(WMPStream* pWS) noexcept nogil: - """Replacement for EOSWS_Memory.""" - # return pWS.state.buf.cbBuf <= pWS.state.buf.cbCur - return 1 -diff -up imagecodecs-2023.1.23/imagecodecs/_png.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_png.pyx ---- imagecodecs-2023.1.23/imagecodecs/_png.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_png.pyx 2024-02-04 16:09:47.113978112 -0700 -@@ -382,7 +382,7 @@ def png_decode(data, index=None, numthre - cdef void png_error_callback( - png_structp png_ptr, - png_const_charp msg --) nogil: -+) noexcept nogil: - cdef: - mempng_t* mempng = png_get_io_ptr(png_ptr) - -@@ -395,7 +395,7 @@ cdef void png_error_callback( - cdef void png_warn_callback( - png_structp png_ptr, - png_const_charp msg --) with gil: -+) noexcept with gil: - _log_warning('PNG warning: %s', msg.decode().strip()) - - -@@ -411,7 +411,7 @@ cdef void png_read_data_fn( - png_structp png_ptr, - png_bytep dst, - png_size_t size --) nogil: -+) noexcept nogil: - """PNG read callback function.""" - cdef: - mempng_t* mempng = png_get_io_ptr(png_ptr) -@@ -436,7 +436,7 @@ cdef void png_write_data_fn( - png_structp png_ptr, - png_bytep src, - png_size_t size --) nogil: -+) noexcept nogil: - """PNG write callback function.""" - cdef: - mempng_t* mempng = png_get_io_ptr(png_ptr) -@@ -470,7 +470,7 @@ cdef void png_write_data_fn( - mempng.offset += size - - --cdef void png_output_flush_fn(png_structp png_ptr) nogil: -+cdef void png_output_flush_fn(png_structp png_ptr) noexcept nogil: - """PNG flush callback function.""" - pass - -diff -up imagecodecs-2023.1.23/imagecodecs/_tiff.pyx.noexcept imagecodecs-2023.1.23/imagecodecs/_tiff.pyx ---- imagecodecs-2023.1.23/imagecodecs/_tiff.pyx.noexcept 2022-12-29 13:17:33.000000000 -0700 -+++ imagecodecs-2023.1.23/imagecodecs/_tiff.pyx 2024-02-04 16:19:07.467291854 -0700 -@@ -842,7 +842,7 @@ cdef memtif_t* memtif_open( - return memtif - - --cdef memtif_t* memtif_new(toff_t size, toff_t inc) nogil: -+cdef memtif_t* memtif_new(toff_t size, toff_t inc) noexcept nogil: - """Return new memtif with new buffer for writing.""" - cdef: - memtif_t* memtif = malloc(sizeof(memtif_t)) -@@ -864,7 +864,7 @@ cdef memtif_t* memtif_new(toff_t size, t - return memtif - - --cdef void memtif_del(memtif_t* memtif) nogil: -+cdef void memtif_del(memtif_t* memtif) noexcept nogil: - """Delete memtif.""" - if memtif != NULL: - if memtif.owner: -@@ -876,7 +876,7 @@ cdef tsize_t memtif_TIFFReadProc( - thandle_t handle, - void* buf, - tmsize_t size --) nogil: -+) noexcept nogil: - """Callback function to read from memtif.""" - cdef: - memtif_t* memtif = handle -@@ -892,7 +892,7 @@ cdef tmsize_t memtif_TIFFWriteProc( - thandle_t handle, - void* buf, - tmsize_t size --) nogil: -+) noexcept nogil: - """Callback function to write to memtif.""" - cdef: - memtif_t* memtif = handle -@@ -919,7 +919,7 @@ cdef toff_t memtif_TIFFSeekProc( - thandle_t handle, - toff_t off, - int whence --) nogil: -+) noexcept nogil: - """Callback function to seek to memtif.""" - cdef: - memtif_t* memtif = handle -@@ -968,7 +968,7 @@ cdef toff_t memtif_TIFFSeekProc( - return memtif.fpos - - --cdef int memtif_TIFFCloseProc(thandle_t handle) nogil: -+cdef int memtif_TIFFCloseProc(thandle_t handle) noexcept nogil: - """Callback function to close memtif.""" - cdef: - memtif_t* memtif = handle -@@ -977,7 +977,7 @@ cdef int memtif_TIFFCloseProc(thandle_t - return 0 - - --cdef toff_t memtif_TIFFSizeProc(thandle_t handle) nogil: -+cdef toff_t memtif_TIFFSizeProc(thandle_t handle) noexcept nogil: - """Callback function to return size of memtif.""" - cdef: - memtif_t* memtif = handle -@@ -989,7 +989,7 @@ cdef int memtif_TIFFMapFileProc( - thandle_t handle, - void** base, - toff_t* size --) nogil: -+) noexcept nogil: - """Callback function to map memtif.""" - cdef: - memtif_t* memtif = handle -@@ -1003,7 +1003,7 @@ cdef void memtif_TIFFUnmapFileProc( - thandle_t handle, - void* base, - toff_t size --) nogil: -+) noexcept nogil: - """Callback function to unmap memtif.""" - return - -@@ -1014,7 +1014,7 @@ cdef int tif_error_handler( - const char* module, - const char* fmt, - va_list args --) nogil: -+) noexcept nogil: - """Callback function to write libtiff error message to memtif.""" - cdef: - memtif_t* memtif -@@ -1036,7 +1036,7 @@ cdef int tif_warning_handler( - const char* module, - const char* fmt, - va_list args --) with gil: -+) noexcept with gil: - """Callback function to output libtiff warning message to logging.""" - cdef: - char msg[80] diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index b44281a..dbc4a75 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -10,7 +10,6 @@ URL: https://pypi.org/project/imagecodecs/ Source: %{pypi_source} # Build configuration Source1: imagecodecs_distributor_setup.py -Patch0: python-imagecodecs-noexcept.patch ExcludeArch: %{ix86} @@ -116,6 +115,8 @@ export PYTHONPATH=. TEST_OPTS=( # TODO - tests/test_imagecodecs.py::test_cms_identity_transforms segfaults (various cases) --deselect "tests/test_imagecodecs.py::test_cms_identity_transforms" + # TODO AssertionError + --deselect "tests/test_imagecodecs.py::test_cms" # TODO - investigate blosc2 test failues - value differences --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-new]" --deselect "tests/test_imagecodecs.py::test_compressors[blosc2-encode-0-bytearray]" @@ -192,6 +193,7 @@ TEST_OPTS=( --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.tiled.lerc.u1-True]" --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-gray]" --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-rgb]" + --deselect "tests/test_imagecodecs.py::test_numcodecs[heif-stack]" --deselect "tests/test_imagecodecs.py::test_tiff_files[rgb.u1-False]" --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.i2-False]" --deselect "tests/test_imagecodecs.py::test_tiff_files[gray.one.f8-False]" From 00f357ba2cf17a4d5ad29203f52936642af31c4a Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 6 Jun 2025 16:26:38 +0200 Subject: [PATCH 13/21] Rebuilt for Python 3.14 --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index dbc4a75..835fc26 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2024.9.22 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -281,6 +281,9 @@ TEST_OPTS=( %changelog +* Fri Jun 06 2025 Python Maint - 2024.9.22-2 +- Rebuilt for Python 3.14 + * Wed Jan 22 2025 Sandro - 2024.9.22-1 - Update to 2024.9.22 - Add support for NumPy 2.x From aec925fe8a964ce0b3f1829c11702d362b13ca58 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 08:19:57 +0000 Subject: [PATCH 14/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- python-imagecodecs.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 835fc26..d36007e 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2024.9.22 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -281,6 +281,9 @@ TEST_OPTS=( %changelog +* Fri Jul 25 2025 Fedora Release Engineering - 2024.9.22-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Fri Jun 06 2025 Python Maint - 2024.9.22-2 - Rebuilt for Python 3.14 From f05456d78293b73c07f7c79a5c1e8a6286068ff2 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Wed, 6 Aug 2025 07:59:25 -0600 Subject: [PATCH 15/21] Update to 2024.12.30 --- .gitignore | 1 + python-imagecodecs.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 661de5c..1cc8b1b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /imagecodecs-2022.9.26.tar.gz /imagecodecs-2023.1.23.tar.gz /imagecodecs-2024.9.22.tar.gz +/imagecodecs-2024.12.30.tar.gz diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index d36007e..4be192d 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -1,8 +1,8 @@ %global srcname imagecodecs Name: python-imagecodecs -Version: 2024.9.22 -Release: 3%{?dist} +Version: 2024.12.30 +Release: 1%{?dist} Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -281,6 +281,9 @@ TEST_OPTS=( %changelog +* Wed Aug 06 2025 Orion Poplawski - 2024.12.30-1 +- Update to 2024.12.30 + * Fri Jul 25 2025 Fedora Release Engineering - 2024.9.22-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild diff --git a/sources b/sources index 9e931e9..fc5174e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (imagecodecs-2024.9.22.tar.gz) = 4de94d77827c95c82fb625b0e60431f2f884cb17edc44d290d93dddc942ea180ba86f9494d6dd6d483f42112eb0357689430a3f32643ece2e8930d013d3e8446 +SHA512 (imagecodecs-2024.12.30.tar.gz) = 353813b4809f0e7ae7d406f79693588c6f1e6eafdf7bf7626e95e29e3bcb64b50aa5b59c900ee32d2370abd8a592143799884e196b716e6a63f9066e161aa226 From a8f22f1896f5a83884ee5c693a783050994ba5a1 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Wed, 6 Aug 2025 11:15:53 -0600 Subject: [PATCH 16/21] Update to 2025.3.30 --- .gitignore | 1 + python-imagecodecs.spec | 5 ++++- sources | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1cc8b1b..bc12470 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /imagecodecs-2023.1.23.tar.gz /imagecodecs-2024.9.22.tar.gz /imagecodecs-2024.12.30.tar.gz +/imagecodecs-2025.3.30.tar.gz diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 4be192d..3c1f52f 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -1,7 +1,7 @@ %global srcname imagecodecs Name: python-imagecodecs -Version: 2024.12.30 +Version: 2025.3.30 Release: 1%{?dist} Summary: Image transformation, compression, and decompression codecs @@ -281,6 +281,9 @@ TEST_OPTS=( %changelog +* Wed Aug 06 2025 Orion Poplawski - 2025.3.30-1 +- Update to 2025.3.30 + * Wed Aug 06 2025 Orion Poplawski - 2024.12.30-1 - Update to 2024.12.30 diff --git a/sources b/sources index fc5174e..9dbc1ca 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (imagecodecs-2024.12.30.tar.gz) = 353813b4809f0e7ae7d406f79693588c6f1e6eafdf7bf7626e95e29e3bcb64b50aa5b59c900ee32d2370abd8a592143799884e196b716e6a63f9066e161aa226 +SHA512 (imagecodecs-2025.3.30.tar.gz) = 77d998e8d623890497c735597843916a038bc84b6b10f92cb4339dc0d9de1cbd2e593201b42f64cf2f48f5c751a7162ef1a8e3e84bc2c083839942d377d78b15 From 5e563f70abc26ab2d1e8883317f53fc07dd731c2 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Wed, 6 Aug 2025 11:16:24 -0600 Subject: [PATCH 17/21] Convert to %autorelease and %autochangelog [skip changelog] --- changelog | 50 ++++++++++++++++++++++++++++++++++++++ python-imagecodecs.spec | 53 ++--------------------------------------- 2 files changed, 52 insertions(+), 51 deletions(-) create mode 100644 changelog diff --git a/changelog b/changelog new file mode 100644 index 0000000..0883896 --- /dev/null +++ b/changelog @@ -0,0 +1,50 @@ +* Wed Aug 06 2025 Orion Poplawski - 2025.3.30-1 +- Update to 2025.3.30 + +* Wed Aug 06 2025 Orion Poplawski - 2024.12.30-1 +- Update to 2024.12.30 + +* Fri Jul 25 2025 Fedora Release Engineering - 2024.9.22-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jun 06 2025 Python Maint - 2024.9.22-2 +- Rebuilt for Python 3.14 + +* Wed Jan 22 2025 Sandro - 2024.9.22-1 +- Update to 2024.9.22 +- Add support for NumPy 2.x +- Close RHBZ#2341164 + +* Sat Jan 18 2025 Fedora Release Engineering - 2023.1.23-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Tue Sep 10 2024 Zbigniew Jedrzejewski-Szmek - 2023.1.23-4 +- Rebuilt for blosc2-2.15.1-1 + +* Fri Jul 19 2024 Fedora Release Engineering - 2023.1.23-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Mon Jun 17 2024 Python Maint - 2023.1.23-2 +- Rebuilt for Python 3.13 + +* Sun Apr 21 2024 Orion Poplawski - 2023.1.23-1 +- Update to 2023.1.23 +- Add more test dependencies + +* Sun Apr 21 2024 Zbigniew Jędrzejewski-Szmek - 2022.9.26-6 +- Rebuilt for blosc2 2.14.4 + +* Wed Jan 31 2024 František Zatloukal - 2022.9.26-5 +- Rebuilt for libavif 1.0.3 + +* Fri Jan 26 2024 Fedora Release Engineering - 2022.9.26-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 22 2024 Fedora Release Engineering - 2022.9.26-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jul 21 2023 Fedora Release Engineering - 2022.9.26-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jun 02 2023 Orion Poplawski - 2022.9.26-1 +- Initial Fedora package diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 3c1f52f..959785c 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -2,7 +2,7 @@ Name: python-imagecodecs Version: 2025.3.30 -Release: 1%{?dist} +Release: %autorelease Summary: Image transformation, compression, and decompression codecs License: BSD-3-Clause @@ -281,53 +281,4 @@ TEST_OPTS=( %changelog -* Wed Aug 06 2025 Orion Poplawski - 2025.3.30-1 -- Update to 2025.3.30 - -* Wed Aug 06 2025 Orion Poplawski - 2024.12.30-1 -- Update to 2024.12.30 - -* Fri Jul 25 2025 Fedora Release Engineering - 2024.9.22-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Fri Jun 06 2025 Python Maint - 2024.9.22-2 -- Rebuilt for Python 3.14 - -* Wed Jan 22 2025 Sandro - 2024.9.22-1 -- Update to 2024.9.22 -- Add support for NumPy 2.x -- Close RHBZ#2341164 - -* Sat Jan 18 2025 Fedora Release Engineering - 2023.1.23-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Tue Sep 10 2024 Zbigniew Jedrzejewski-Szmek - 2023.1.23-4 -- Rebuilt for blosc2-2.15.1-1 - -* Fri Jul 19 2024 Fedora Release Engineering - 2023.1.23-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Mon Jun 17 2024 Python Maint - 2023.1.23-2 -- Rebuilt for Python 3.13 - -* Sun Apr 21 2024 Orion Poplawski - 2023.1.23-1 -- Update to 2023.1.23 -- Add more test dependencies - -* Sun Apr 21 2024 Zbigniew Jędrzejewski-Szmek - 2022.9.26-6 -- Rebuilt for blosc2 2.14.4 - -* Wed Jan 31 2024 František Zatloukal - 2022.9.26-5 -- Rebuilt for libavif 1.0.3 - -* Fri Jan 26 2024 Fedora Release Engineering - 2022.9.26-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Jan 22 2024 Fedora Release Engineering - 2022.9.26-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jul 21 2023 Fedora Release Engineering - 2022.9.26-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri Jun 02 2023 Orion Poplawski - 2022.9.26-1 -- Initial Fedora package +%autochangelog From afd10ca9bf2c6345bf2825b1062a432849b6dbe6 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 15 Aug 2025 13:54:56 +0200 Subject: [PATCH 18/21] Rebuilt for Python 3.14.0rc2 bytecode From daf31ab78a495ef13cc991334cf54718a5e2fbd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 12 Sep 2025 15:40:06 +0200 Subject: [PATCH 19/21] Rebuild for blosc2-2.21.2 The tests fail with > raise AvifError('avifEncoderAddImage', res) E imagecodecs.AvifError: avifEncoderAddImage returned 'Encoding of color planes failed' --- python-imagecodecs.spec | 108 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index 959785c..aec0142 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -133,6 +133,114 @@ TEST_OPTS=( # spng_encode appears to not be available with openjpeg2 disabled, but the test still tries to run --deselect tests/test_imagecodecs.py::test_spng_encode # Other deselected tests seem to be related to unsupported compression types + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-gray-bytearray-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint8-graya-bytearray-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-gray-bytearray-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-new-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-out-bytearray--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-new-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-new-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-new--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-out-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-out-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-out--1]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-bytearray-None]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-bytearray-5]" + --deselect "tests/test_imagecodecs.py::test_image_roundtrips[avif-uint16-graya-bytearray-bytearray--1]" --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-None]" --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new-5]" --deselect "tests/test_imagecodecs.py::test_image_roundtrips[heif-uint8-rgb-new-new--1]" From 7bd31f9c20868576a08b25d8fa9ea3fb5d0bc9e3 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 19 Sep 2025 13:28:21 +0200 Subject: [PATCH 20/21] Rebuilt for Python 3.14.0rc3 bytecode From eb86ce9f7b174f5c4eb2461d02bd62a03f91aead Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Wed, 6 Aug 2025 16:09:17 -0600 Subject: [PATCH 21/21] Update to 2025.8.2 --- .gitignore | 1 + python-imagecodecs.spec | 4 ++-- sources | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index bc12470..ff432b8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /imagecodecs-2024.9.22.tar.gz /imagecodecs-2024.12.30.tar.gz /imagecodecs-2025.3.30.tar.gz +/imagecodecs-2025.8.2.tar.gz diff --git a/python-imagecodecs.spec b/python-imagecodecs.spec index aec0142..3392511 100644 --- a/python-imagecodecs.spec +++ b/python-imagecodecs.spec @@ -1,7 +1,7 @@ %global srcname imagecodecs Name: python-imagecodecs -Version: 2025.3.30 +Version: 2025.8.2 Release: %autorelease Summary: Image transformation, compression, and decompression codecs @@ -26,7 +26,7 @@ BuildRequires: giflib-devel BuildRequires: jxrlib-devel BuildRequires: lcms2-devel BuildRequires: libaec-devel -BuildRequires: libavif-devel +BuildRequires: libavif-devel >= 1.3.0 BuildRequires: libdeflate-devel BuildRequires: libheif-devel BuildRequires: libjpeg-turbo-devel >= 3 diff --git a/sources b/sources index 9dbc1ca..7a65506 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (imagecodecs-2025.3.30.tar.gz) = 77d998e8d623890497c735597843916a038bc84b6b10f92cb4339dc0d9de1cbd2e593201b42f64cf2f48f5c751a7162ef1a8e3e84bc2c083839942d377d78b15 +SHA512 (imagecodecs-2025.8.2.tar.gz) = d3daee7ca1d1954541195a5fd4475d1b37ab747ed1b86131ec94013623179182aff09a09a05c6c5989f3e07e089d6e14c9e9084750a21aed4f163441a42b37b4