Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-mrcfile for openSUSE:Factory 
checked in at 2026-09-10 11:49:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-mrcfile (Old)
 and      /work/SRC/openSUSE:Factory/.python-mrcfile.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-mrcfile"

Thu Sep 10 11:49:34 2026 rev:7 rq:1376839 version:1.5.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-mrcfile/python-mrcfile.changes    
2026-03-02 17:39:03.108163062 +0100
+++ /work/SRC/openSUSE:Factory/.python-mrcfile.new.1265/python-mrcfile.changes  
2026-09-10 11:52:16.624819560 +0200
@@ -1,0 +2,6 @@
+Thu Sep 10 06:19:12 UTC 2026 - Steve Kowalik <[email protected]>
+
+- Add patch support-numpy-2.5.patch:
+  * Support changes required for numpy 2.5.
+
+-------------------------------------------------------------------

New:
----
  support-numpy-2.5.patch

----------(New B)----------
  New:
- Add patch support-numpy-2.5.patch:
  * Support changes required for numpy 2.5.
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-mrcfile.spec ++++++
--- /var/tmp/diff_new_pack.1Cc6FJ/_old  2026-09-10 11:52:17.664863181 +0200
+++ /var/tmp/diff_new_pack.1Cc6FJ/_new  2026-09-10 11:52:17.668863349 +0200
@@ -24,6 +24,8 @@
 License:        BSD-3-Clause
 URL:            https://github.com/ccpem/mrcfile
 Source:         
https://github.com/ccpem/mrcfile/archive/refs/tags/v%{version}.tar.gz
+# PATCH-FIX-UPSTREAM Based on gh#ccpem/mrcfile#76
+Patch0:         support-numpy-2.5.patch
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module wheel}
@@ -58,6 +60,11 @@
 %check
 # https://github.com/ccpem/mrcfile/issues/73
 skip="test_data_transposed_in_place_is_written_without_errors"
+# Fails on 32 bit arches
+if [ $(getconf LONG_BIT) = 32 ]; then
+    skip+=" or test_writing_image_mode_6_native_byte_order"
+    skip+=" or test_stats_are_updated_on_request"
+fi
 %pytest -v -k "not ($skip)"
 
 %post

++++++ support-numpy-2.5.patch ++++++
>From a7e0e7a0dcd39685f82866c506ebfab1bbee6d00 Mon Sep 17 00:00:00 2001
From: McHaillet <[email protected]>
Date: Mon, 22 Jun 2026 17:13:23 +0200
Subject: [PATCH] Fix DeprecationWarning when setting header.dtype on NumPy
 2.5+

NumPy 2.5 deprecates assigning to .dtype on an existing array. Replace
in-place dtype mutation with view()-based reinterpretation in
mrcinterpreter.py and mrcobject.py.

In update_header_from_data(), this means a header reference obtained
before calling set_data() with byte-swapped data no longer reflects the
byte-order change in place; callers must re-fetch mrc.header afterwards.
The affected test has been updated accordingly.

Fixes ccpem/mrcfile#75
---
 mrcfile/mrcinterpreter.py | 14 ++++++--------
 mrcfile/mrcobject.py      | 18 +++++++++---------
 tests/test_mrcfile.py         | 11 +++++------
 tests/test_mrcobject.py       |  2 ++
 4 files changed, 22 insertions(+), 23 deletions(-)

Index: mrcfile-1.5.4/mrcfile/mrcinterpreter.py
===================================================================
--- mrcfile-1.5.4.orig/mrcfile/mrcinterpreter.py
+++ mrcfile-1.5.4/mrcfile/mrcinterpreter.py
@@ -218,7 +218,9 @@ class MrcInterpreter(MrcObject):
                 raise
 
         # Create a new dtype with the correct byte order and update the header
-        header.dtype = header.dtype.newbyteorder(byte_order)
+        # by viewing it as the new dtype. (Assigning to .dtype directly is
+        # deprecated since NumPy 2.5.)
+        header = header.view(header.dtype.newbyteorder(byte_order))
 
         # Check mode is valid; if not, try the opposite byte order
         # (Some MRC files have been seen 'in the wild' that are correct except
@@ -231,8 +233,9 @@ class MrcInterpreter(MrcObject):
                     opp_mode = 
header.mode.view(header.mode.dtype.newbyteorder())
                     utils.dtype_from_mode(opp_mode)
                     # If we get here the new byte order is probably correct
-                    # Use it and issue a warning
-                    header.dtype = header.dtype.newbyteorder()
+                    # Use it and issue a warning. (Assigning to .dtype 
directly is
+                    # deprecated since NumPy 2.5.)
+                    header = header.view(header.dtype.newbyteorder())
                     pretty_machst = utils.pretty_machine_stamp(header.machst)
                     msg = "Machine stamp '{0}' does not match the apparent 
byte order '{1}'"
                     warnings.warn(msg.format(pretty_machst, 
header.mode.dtype.byteorder),
Index: mrcfile-1.5.4/mrcfile/mrcobject.py
===================================================================
--- mrcfile-1.5.4.orig/mrcfile/mrcobject.py
+++ mrcfile-1.5.4/mrcfile/mrcobject.py
@@ -213,7 +213,8 @@ class MrcObject(object):
             if self.extended_header.nbytes < dtype.itemsize:
                 raise ValueError
             first = self.extended_header[0:dtype.itemsize]
-            first.dtype = dtype
+            # Assigning to .dtype directly is deprecated since NumPy 2.5
+            first = first.view(dtype)
             if first["Metadata size"][0] != dtype.itemsize:
                 raise ValueError
         except ValueError:
@@ -227,7 +228,8 @@ class MrcObject(object):
             if self.extended_header.nbytes < nbytes:
                 raise ValueError
             full = self.extended_header[0:nbytes]
-            full.dtype = dtype
+            # Assigning to .dtype directly is deprecated since NumPy 2.5
+            full = full.view(dtype)
         except ValueError:
             warnings.warn("The header has exttyp '{}' but the extended header "
                             "cannot be interpreted as that type"
@@ -566,7 +568,11 @@ class MrcObject(object):
         if (data_byte_order != '|'
             and not utils.byte_orders_equal(data_byte_order, 
header_byte_order)):
             header.byteswap(True)
-            header.dtype = header.dtype.newbyteorder(data_byte_order)
+            # Assigning to .dtype directly is deprecated since NumPy 2.5, so 
view the
+            # header as the new dtype instead, and store the result back onto
+            # self._header since the view is a new array, not the original.
+            header = header.view(header.dtype.newbyteorder(data_byte_order))
+            self._header = header
         header.machst = utils.machine_stamp_from_byte_order(header.mode.dtype
                                                             .byteorder)
 
Index: mrcfile-1.5.4/tests/test_mrcfile.py
===================================================================
--- mrcfile-1.5.4.orig/tests/test_mrcfile.py
+++ mrcfile-1.5.4/tests/test_mrcfile.py
@@ -169,8 +169,7 @@ class MrcFileTest(test_mrcobject.MrcObje
             assert mrc.header.nsymbt == 160
             assert mrc.extended_header.nbytes == 160
             assert mrc.extended_header.dtype.kind == 'V'
-            mrc.extended_header.dtype = 'S80'
-            ext = mrc.extended_header
+            ext = mrc.extended_header.view("S80")
             assert ext[0] == (b'X,  Y,  Z                               '
                               b'                                        ')
             assert ext[1] == (b'-X,  Y+1/2,  -Z                         '
@@ -392,8 +391,8 @@ class MrcFileTest(test_mrcobject.MrcObje
             np.testing.assert_array_equal(mrc.data, data)
         with self.newmrc(self.temp_mrc_name, mode='r') as mrc:
             # Change the extended header dtype to a string for comparison
-            mrc.extended_header.dtype = 
'S{}'.format(mrc.extended_header.nbytes)
-            np.testing.assert_array_equal(mrc.extended_header, extended_header)
+            ext = mrc.extended_header.view(f"S{mrc.extended_header.nbytes}")
+            np.testing.assert_array_equal(ext, extended_header)
             np.testing.assert_array_equal(mrc.data, data)
 
     def test_removing_extended_header(self):
@@ -422,8 +421,8 @@ class MrcFileTest(test_mrcobject.MrcObje
                 # Test that the file is still read, and the dtype falls back 
to 'V'
                 assert mrc.extended_header.dtype.kind == 'V'
                 assert mrc.indexed_extended_header is None
-                mrc.extended_header.dtype = 
'S{}'.format(mrc.extended_header.nbytes)
-                np.testing.assert_array_equal(mrc.extended_header, 
extended_header)
+                ext = 
mrc.extended_header.view(f"S{mrc.extended_header.nbytes}")
+                np.testing.assert_array_equal(ext, extended_header)
             assert len(w) == 1
             assert "FEI1" in str(w[0].message)
             assert "extended header" in str(w[0].message)
Index: mrcfile-1.5.4/tests/test_mrcobject.py
===================================================================
--- mrcfile-1.5.4.orig/tests/test_mrcobject.py
+++ mrcfile-1.5.4/tests/test_mrcobject.py
@@ -392,12 +392,14 @@ class MrcObjectTest(AssertRaisesRegexMix
                                        orig_byte_order)
         
         self.mrcobject.set_data(data.view(data.dtype.newbyteorder()))
+        header = self.mrcobject.header
         assert not utils.byte_orders_equal(header.mode.dtype.byteorder,
                                            orig_byte_order)
         assert header.mode == 2
         assert header.mapc == original_mapc
         
         self.mrcobject.set_data(data)
+        header = self.mrcobject.header
         assert utils.byte_orders_equal(header.mode.dtype.byteorder,
                                        orig_byte_order)
         assert header.mode == 2

Reply via email to