Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-lfdfiles for openSUSE:Factory
checked in at 2026-10-26 10:05:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-lfdfiles (Old)
and /work/SRC/openSUSE:Factory/.python-lfdfiles.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-lfdfiles"
Mon Oct 26 10:05:13 2026 rev:13 rq:1392652 version:2026.10.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-lfdfiles/python-lfdfiles.changes
2026-06-28 21:08:00.869067006 +0200
+++
/work/SRC/openSUSE:Factory/.python-lfdfiles.new.2252680/python-lfdfiles.changes
2026-10-26 10:06:39.871475502 +0100
@@ -1,0 +2,11 @@
+Mon Oct 26 08:18:58 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 2026.10.15:
+ * Improve reading ISS IFI files.
+ * Use struct.unpack_from where possible.
+ * Fix reading big-endian CCP4 map headers.
+ * Fix convert CLI passing unsupported compress argument to
+ TiffWriter.
+ * Warn about trailing bytes in ISS IFI files.
+
+-------------------------------------------------------------------
Old:
----
lfdfiles-2026.6.24.tar.gz
New:
----
lfdfiles-2026.10.15.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-lfdfiles.spec ++++++
--- /var/tmp/diff_new_pack.SCkKS7/_old 2026-10-26 10:06:41.557546214 +0100
+++ /var/tmp/diff_new_pack.SCkKS7/_new 2026-10-26 10:06:41.558546256 +0100
@@ -23,9 +23,8 @@
%endif
%{?sle15_python_module_pythons}
-%global skip_python311 1
Name: python-lfdfiles
-Version: 2026.6.24
+Version: 2026.10.15
Release: 0
Summary: Laboratory for Fluorescence Dynamics (LFD) file formats
License: BSD-3-Clause
++++++ lfdfiles-2026.6.24.tar.gz -> lfdfiles-2026.10.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/CHANGES.rst
new/lfdfiles-2026.10.15/CHANGES.rst
--- old/lfdfiles-2026.6.24/CHANGES.rst 2026-06-24 20:08:13.000000000 +0200
+++ new/lfdfiles-2026.10.15/CHANGES.rst 2026-10-15 18:07:59.000000000 +0200
@@ -1,6 +1,14 @@
Revisions
=========
+2026.10.15
+
+- Improve reading ISS IFI files.
+- Use struct.unpack_from where possible.
+- Fix reading big-endian CCP4 map headers.
+- Fix convert CLI passing unsupported compress argument to TiffWriter.
+- Warn about trailing bytes in ISS IFI files.
+
2026.6.24
- Add VistaTdflim class for reading ISS Vista TDFLIM files.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/README.rst
new/lfdfiles-2026.10.15/README.rst
--- old/lfdfiles-2026.6.24/README.rst 2026-06-24 20:08:13.000000000 +0200
+++ new/lfdfiles-2026.10.15/README.rst 2026-10-15 18:07:59.000000000 +0200
@@ -20,7 +20,7 @@
:Author: `Christoph Gohlke <https://www.cgohlke.com>`_
:License: BSD-3-Clause
-:Version: 2026.6.24
+:Version: 2026.10.15
:DOI: `10.5281/zenodo.8384166 <https://doi.org/10.5281/zenodo.8384166>`_
Quickstart
@@ -35,9 +35,8 @@
python -m lfdfiles --help
-The lfdfiles library is type annotated and documented via docstrings.
-
-See `Examples`_ for using the programming interface.
+See `Examples`_ and `Documentation <https://www.cgohlke.com/docs/lfdfiles/>`_
+for using the programming interface.
Source code and support are available on
`GitHub <https://github.com/cgohlke/lfdfiles>`_.
@@ -48,17 +47,25 @@
This revision was tested with the following requirements and dependencies
(other versions may work):
-- `CPython <https://www.python.org>`_ 3.12.10, 3.13.14, 3.14.6, 3.15.0b3 64-bit
-- `Numpy <https://pypi.org/project/numpy>`_ 2.5.0
-- `Tifffile <https://pypi.org/project/tifffile/>`_ 2026.6.1
-- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.11.0
+- `CPython <https://www.python.org>`_ 3.12.10, 3.13.16, 3.14.8, 3.15.0 64-bit
+- `Numpy <https://pypi.org/project/numpy>`_ 2.5.4
+- `Tifffile <https://pypi.org/project/tifffile/>`_ 2026.9.20
+- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.11.2
(optional, for plotting)
-- `Click <https://pypi.python.org/pypi/click>`_ 8.4.1
+- `Click <https://pypi.python.org/pypi/click>`_ 8.5.0
(optional, for command line apps)
Revisions
---------
+2026.10.15
+
+- Improve reading ISS IFI files.
+- Use struct.unpack_from where possible.
+- Fix reading big-endian CCP4 map headers.
+- Fix convert CLI passing unsupported compress argument to TiffWriter.
+- Warn about trailing bytes in ISS IFI files.
+
2026.6.24
- Add VistaTdflim class for reading ISS Vista TDFLIM files.
@@ -82,42 +89,6 @@
2026.1.14
-- Improve code quality.
-
-2025.12.12
-
-- Derive LfdFileError from ValueError.
-- Improve code quality.
-
-2025.9.17
-
-- Many breaking changes to FLIMbox functionality (use fbdfile package instead):
-- Discourage use of FlimboxFbd, FlimboxFbf, and FlimboxFbs classes.
-- Use fbdfile package to implement FlimboxFbd, FlimboxFbf, and FlimboxFbs.
-- Remove flimbox_histogram, flimbox_decode, and sflim_decode functions.
-- Remove convert_fbd2b64 function and fbd2b64 command line app.
-- Remove deprecated SimfcsFbf, and SimfcsFbd classes.
-- Remove deprecated simfcsfbd_histogram and simfcsfbd_decode functions.
-
-2025.7.31
-
-- Read variants of SimFCS REF files.
-- Drop support for Python 3.10.
-
-2025.5.10
-
-- Mark Cython extension free-threading compatible.
-- Remove doctest command line option.
-- Support Python 3.14.
-
-2025.3.16
-
-- Replace deprecated tifffile.stripnull function.
-- Fix misspelled VistaIfli.header keys.
-- Drop support for Python 3.9.
-
-2024.10.24
-
- …
Refer to the CHANGES file for older revisions.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/lfdfiles/lfdfiles.py
new/lfdfiles-2026.10.15/lfdfiles/lfdfiles.py
--- old/lfdfiles-2026.6.24/lfdfiles/lfdfiles.py 2026-06-24 20:08:13.000000000
+0200
+++ new/lfdfiles-2026.10.15/lfdfiles/lfdfiles.py 2026-10-15
18:07:59.000000000 +0200
@@ -47,7 +47,7 @@
:Author: `Christoph Gohlke <https://www.cgohlke.com>`_
:License: BSD-3-Clause
-:Version: 2026.6.24
+:Version: 2026.10.15
:DOI: `10.5281/zenodo.8384166 <https://doi.org/10.5281/zenodo.8384166>`_
Quickstart
@@ -62,9 +62,8 @@
python -m lfdfiles --help
-The lfdfiles library is type annotated and documented via docstrings.
-
-See `Examples`_ for using the programming interface.
+See `Examples`_ and `Documentation <https://www.cgohlke.com/docs/lfdfiles/>`_
+for using the programming interface.
Source code and support are available on
`GitHub <https://github.com/cgohlke/lfdfiles>`_.
@@ -75,17 +74,25 @@
This revision was tested with the following requirements and dependencies
(other versions may work):
-- `CPython <https://www.python.org>`_ 3.12.10, 3.13.14, 3.14.6, 3.15.0b3 64-bit
-- `Numpy <https://pypi.org/project/numpy>`_ 2.5.0
-- `Tifffile <https://pypi.org/project/tifffile/>`_ 2026.6.1
-- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.11.0
+- `CPython <https://www.python.org>`_ 3.12.10, 3.13.16, 3.14.8, 3.15.0 64-bit
+- `Numpy <https://pypi.org/project/numpy>`_ 2.5.4
+- `Tifffile <https://pypi.org/project/tifffile/>`_ 2026.9.20
+- `Matplotlib <https://pypi.org/project/matplotlib/>`_ 3.11.2
(optional, for plotting)
-- `Click <https://pypi.python.org/pypi/click>`_ 8.4.1
+- `Click <https://pypi.python.org/pypi/click>`_ 8.5.0
(optional, for command line apps)
Revisions
---------
+2026.10.15
+
+- Improve reading ISS IFI files.
+- Use struct.unpack_from where possible.
+- Fix reading big-endian CCP4 map headers.
+- Fix convert CLI passing unsupported compress argument to TiffWriter.
+- Warn about trailing bytes in ISS IFI files.
+
2026.6.24
- Add VistaTdflim class for reading ISS Vista TDFLIM files.
@@ -109,42 +116,6 @@
2026.1.14
-- Improve code quality.
-
-2025.12.12
-
-- Derive LfdFileError from ValueError.
-- Improve code quality.
-
-2025.9.17
-
-- Many breaking changes to FLIMbox functionality (use fbdfile package instead):
-- Discourage use of FlimboxFbd, FlimboxFbf, and FlimboxFbs classes.
-- Use fbdfile package to implement FlimboxFbd, FlimboxFbf, and FlimboxFbs.
-- Remove flimbox_histogram, flimbox_decode, and sflim_decode functions.
-- Remove convert_fbd2b64 function and fbd2b64 command line app.
-- Remove deprecated SimfcsFbf, and SimfcsFbd classes.
-- Remove deprecated simfcsfbd_histogram and simfcsfbd_decode functions.
-
-2025.7.31
-
-- Read variants of SimFCS REF files.
-- Drop support for Python 3.10.
-
-2025.5.10
-
-- Mark Cython extension free-threading compatible.
-- Remove doctest command line option.
-- Support Python 3.14.
-
-2025.3.16
-
-- Replace deprecated tifffile.stripnull function.
-- Fix misspelled VistaIfli.header keys.
-- Drop support for Python 3.9.
-
-2024.10.24
-
- …
Refer to the CHANGES file for older revisions.
@@ -238,7 +209,7 @@
from __future__ import annotations
-__version__ = '2026.6.24'
+__version__ = '2026.10.15'
__all__ = [
'FILE_EXTENSIONS',
@@ -2588,8 +2559,7 @@
"""Read file header."""
self._skip = 8 if doubleheader else 0
header = self._decompress_header(self._skip + 8)
- header = header[self._skip : self._skip + 8]
- size, inum = struct.unpack('<ii', header)[:2]
+ size, inum = struct.unpack_from('<ii', header, self._skip)[:2]
if not 2 <= size <= maxsize[-1] or not 2 <= inum <= maxsize[0]:
msg = 'image size out of range'
raise LfdFileError(self, msg)
@@ -3139,8 +3109,8 @@
VistaVision IFI files contain multi-dimensional confocal intensity images.
- After a header of 256 bytes, the images are stored as float32 in CZYX
- order.
+ After a header of 256 bytes, the images are stored as float32 in
+ TCZYX order. Singleton leading dimensions are omitted.
Parameters:
filename: Name of file to open.
@@ -3168,11 +3138,20 @@
[
# undocumented file header
('signature', 'S10'), # 'VISTAIMAGE'
- ('version', 'u2'),
- ('channel_bits', 'u2'),
+ ('version', 'u1'),
+ ('image_type', 'u1'),
+ ('channel_bits', 'u1'),
+ ('compression', 'u1'),
('dimensions', 'u2', 3), # XYZ
- ('boundaries', 'f4', 6),
+ ('boundaries', 'f4', 6), # x0, x1, y0, y1, z0, z1
('dwelltime', 'f4'),
+ ('_padding', 'u1', 45), # bytes 48-92
+ ('n_channels', 'u2'),
+ ('n_time_series', 'u2'),
+ ('pixel_interval', 'f4'),
+ ('line_interval', 'f4'),
+ ('frame_interval', 'f4'),
+ ('n_frames_integrated', 'u2'),
]
)
@@ -3189,16 +3168,50 @@
logger().warning(
f'unrecognized VistaIfi file version {h["version"]}'
)
- self.shape = tuple(int(i) for i in reversed(h['dimensions']))
- if self.shape[0] == 1:
- self.shape = self.shape[1:]
- self.axes = 'YX'
+ sizex, sizey, sizez = (int(i) for i in h['dimensions'])
+
+ sizec = int(h['n_channels'])
+ if sizec <= 0:
+ sizec = len(self.channel_indices)
+ sizec = max(sizec, 1)
+
+ # calculate number of time points from data size
+ spatial = max(sizez, 1) * sizey * sizex
+ data_bytes = self._filesize - 256
+ frame_bytes = sizec * spatial * 4
+ if frame_bytes > 0:
+ sizet, remainder = divmod(data_bytes, frame_bytes)
+ if sizet < 1:
+ msg = (
+ f'data size {data_bytes} is smaller than '
+ f'frame size {frame_bytes}'
+ )
+ raise LfdFileError(self, msg)
+ if remainder != 0:
+ logger().warning(
+ f'VistaIfi data size {data_bytes} is not a multiple of '
+ f'frame size {frame_bytes}; '
+ f'ignoring {remainder} trailing bytes'
+ )
else:
- self.axes = 'ZYX'
- indices = self.channel_indices
- if len(indices) > 1:
- self.shape = (len(indices), *self.shape)
- self.axes = 'C' + self.axes
+ sizet = 1
+
+ shape: list[int] = []
+ axes = ''
+ if sizet > 1:
+ shape.append(sizet)
+ axes += 'T'
+ if sizec > 1:
+ shape.append(sizec)
+ axes += 'C'
+ if sizez > 1:
+ shape.append(sizez)
+ axes += 'Z'
+ shape.extend([sizey, sizex])
+ axes += 'YX'
+
+ self.shape = tuple(shape)
+ self.axes = axes
self.dtype = numpy.dtype(numpy.float32)
def __getitem__(self, key: str, /) -> Any:
@@ -4674,6 +4687,14 @@
if header[208:212] not in {b'MAP ', b'PAM\x00', b'MAP\x00'}:
msg = f' {header[:32]}'
raise LfdFileError(self, msg)
+ machst = header[212:216]
+ try:
+ byteorder = {b'DA\x00\x00': '<', b'\x11\x11\x00\x00': '>'}[machst]
+ except KeyError:
+ byteorder = '='
+ warnings.warn(
+ f'Ccp4Map: unknown machine stamp: {machst!r}', stacklevel=2
+ )
try:
(
nc,
@@ -4729,21 +4750,13 @@
L8,
L9,
) = struct.unpack(
- '3ii3i3i3f3f3i3fiii9f3f60x4s4sfi'
+ byteorder + '3ii3i3i3f3f3i3fiii9f3f60x4s4sfi'
'80s80s80s80s80s80s80s80s80s80s',
header,
)
except struct.error as exc:
raise LfdFileError(self) from exc
try:
- # machst = header[212:216]
- byteorder = {b'DA\x00\x00': '<', b'\x11\x11\x00\x00': '>'}[machst]
- except KeyError:
- byteorder = '='
- warnings.warn(
- f'Ccp4Map: unknown machine stamp: {machst}', stacklevel=2
- )
- try:
self.dtype = numpy.dtype(byteorder + Ccp4Map._dtypes[mode])
except KeyError as exc:
msg = f'invalid {mode=}'
@@ -4984,16 +4997,17 @@
# next byte is byte order
byteorder = {b'B': '>', b'L': '<'}[header[24:25]]
# next two bytes are data itemsize and dtype
- itemsize = struct.unpack(byteorder + 'h', header[25:27])[0]
+ itemsize = struct.unpack_from(byteorder + 'h', header, 25)[0]
self.dtype = numpy.dtype(
byteorder + {1: 'u1', 2: 'u2', 4: 'f4'}[itemsize]
)
# next 8 or 16 bytes are data shape
- self.shape = struct.unpack(byteorder + 'hhhh', header[27:])[::-1]
+ self.shape = struct.unpack_from(byteorder + 'hhhh', header, 27)[::-1]
if self._filesize != len(header) + product(self.shape) * itemsize:
# 4 byte format
header += self._fh.read(8)
- self.shape = struct.unpack(byteorder + 'IIII', header[27:])[::-1]
+ self.shape = struct.unpack_from(byteorder + 'IIII', header, 27)
+ self.shape = self.shape[::-1]
if self._filesize != len(header) + product(self.shape) * itemsize:
msg = 'file size mismatch'
raise LfdFileError(self, msg)
@@ -5447,7 +5461,14 @@
filetypes=[('All files', '*')],
)
if files:
- convert2tiff(files, compress=compress)
+ if compress:
+ convert2tiff(
+ files,
+ compression='zlib',
+ compressionargs={'level': compress},
+ )
+ else:
+ convert2tiff(files)
@cli.command(help='View data in file.')
@click.argument('files', nargs=-1, type=click.Path(dir_okay=False))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/pyproject.toml
new/lfdfiles-2026.10.15/pyproject.toml
--- old/lfdfiles-2026.6.24/pyproject.toml 2026-06-24 20:08:13.000000000
+0200
+++ new/lfdfiles-2026.10.15/pyproject.toml 2026-10-15 18:07:59.000000000
+0200
@@ -4,7 +4,7 @@
[tool.black]
line-length = 79
-target-version = ["py312", "py313", "py314"]
+target-version = ["py312", "py313", "py314", "py315"]
skip-string-normalization = true
[tool.isort]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/setup.py
new/lfdfiles-2026.10.15/setup.py
--- old/lfdfiles-2026.6.24/setup.py 2026-06-24 20:08:13.000000000 +0200
+++ new/lfdfiles-2026.10.15/setup.py 2026-10-15 18:07:59.000000000 +0200
@@ -96,7 +96,7 @@
project_urls={
'Bug Tracker': 'https://github.com/cgohlke/lfdfiles/issues',
'Source Code': 'https://github.com/cgohlke/lfdfiles',
- 'Documentation': 'https://www.cgohlke.com/docs/lfdfiles',
+ 'Documentation': 'https://www.cgohlke.com/docs/lfdfiles/',
},
packages=['lfdfiles'],
package_data={'lfdfiles': ['py.typed']},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lfdfiles-2026.6.24/tests/test_lfdfiles.py
new/lfdfiles-2026.10.15/tests/test_lfdfiles.py
--- old/lfdfiles-2026.6.24/tests/test_lfdfiles.py 2026-06-24
20:08:13.000000000 +0200
+++ new/lfdfiles-2026.10.15/tests/test_lfdfiles.py 2026-10-15
18:07:59.000000000 +0200
@@ -29,7 +29,7 @@
"""Unittests for the lfdfiles package.
-:Version: 2026.6.24
+:Version: 2026.10.15
"""