Add numpy v2 support
This MR makes small changes for the code to run with numpy v2:
- One fix made by the ruff tool (cmd:
ruff check . --select NPY201 --fix
) - Added support for
np.array
'scopy
argument behavior change
This MR does NOT address changes to numpy data type promotion, so the code should run fine but results might be stored with a different precision (eventually leading to overflows...).
For more details, see numpy 2 migration guide.
I've tested this in an environment with:
- numpy2 "release candidate" wheel
- "nightly build" wheels of scipy, h5py, matplotlib
- other packages (e.g., fabio, pyfai, silx) installed from git repository if needed (eventually from the branch with numpy2 support)
All those packages should be released with numpy2 support before the effective release of numpy2.
I tested it through the GUI and run the tests with pytest
.
Some tests fails (they also fail with numpy v1):
- Due to missing files in the repo:
mask.edf
-which I took from an older version- and.log
file - Not getting the same sum when reading EDF and bliss files
Test errors
_____________________________________________________________ test_edf_datared _____________________________________________________________
edf_data_path = '/users/tvincent/src/txs/txs/tests/sample_data/edf/'
def test_edf_datared(edf_data_path):
azav = integrate1d_dataset(edf_data_path, **_TEST_KEYWORDS)
> red = datared(azav, 'auto', norm=(2.1, 2.2), red_chi2_max=5)
txs/tests/test_datared.py:25:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
txs/datared.py:74: in datared
log = read_id09_log_file(data['folder'])
txs/datasets.py:344: in read_id09_log_file
return read_id09_log_file(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
fname = '/users/tvincent/src/txs/txs/tests/sample_data/edf', skip = None, format = 'waxscollect', out_format = 'datastorage'
get_info = False
def read_id09_log_file(fname, skip=None, format='auto',
out_format='datastorage', get_info=False):
"""Read ID09 log file associated to a tr-waxs dataset.
Parameters
----------
fname : str
Name of log file or folder. If 'fname' is a folder, the file name
will be guessed automatically.
skip : int or tuple or None, optional
First/last lines to be skipped. Default is None.
format : str {'waxscollect', 'bliss', 'auto'}, optional
Log file format. Default is 'waxscollect'.
out_format : str, optional
Can be 'ndarray', 'dict' or 'datastorage'. Default is 'datastorage'.
get_info : boot, optional
If True, extra info (parameters value) is also returned.
Default is False.
Returns
-------
data : ndarray or dict or DataStorage
Retrieved data from id09 log file.
Use 'out_format' to choose between np.genfromtxt() ndarray or dict.
info : dict
Retrieved info from id09 log file comment section. Returned only
if 'get_info' is True.
"""
if format == 'waxscollect':
if os.path.isdir(fname):
fnames = get_fnames("*.log", folder=fname)
if len(fnames) == 0:
full_path = os.path.join(os.getcwd(), fname)
> raise Exception("No *.log file found in '%s'." % full_path)
E Exception: No *.log file found in '/users/tvincent/src/txs/txs/tests/sample_data/edf'.
txs/datasets.py:247: Exception
----------------------------------------------------------- Captured stdout call -----------------------------------------------------------
Loading results from previously stored analysis: /users/tvincent/src/txs/txs/tests/sample_data/edf/id09_azav.h5
Loading time: 0.032 s
Reading ID09 log file...
___________________________________________________________ test_load_edf_images ___________________________________________________________
edf_data_path = '/users/tvincent/src/txs/txs/tests/sample_data/edf/'
def test_load_edf_images(edf_data_path):
imgs, fnames = load_images(
edf_data_path,
extension='edf',
exclude=["run01_0004.edf"],
return_fnames=True
)
> assert np.sum(imgs) == 1082970310
E assert np.uint64(18052713070) == 1082970310
E + where np.uint64(18052713070) = <function sum at 0x7f4fb43c28f0>(<txs.datasets.ImageIteratorEDF object at 0x7f4f3c3b11f0>)
E + where <function sum at 0x7f4fb43c28f0> = np.sum
txs/tests/test_datasets.py:19: AssertionError
__________________________________________________________ test_bliss_scan_slice ___________________________________________________________
bliss_scan = <txs.datasets.ImageIteratorHDF5 object at 0x7f4f3c3b0e30>
def test_bliss_scan_slice(bliss_scan):
> assert bliss_scan[:10].sum() == 1478169543
E assert np.uint64(10068104135) == 1478169543
E + where np.uint64(10068104135) = <built-in method sum of numpy.ndarray object at 0x7f4f3c2d3150>()
E + where <built-in method sum of numpy.ndarray object at 0x7f4f3c2d3150> = array([[[ 0, 0, 0, ..., 12, 13, 12],\n [ 0, 34, 36, ..., 28, 32, 13],\n [ 0, 36, 34, ..., 35, 36, 0],\n ...36, 34, ..., 32, 34, 12],\n [12, 33, 33, ..., 24, 34, 12],\n [12, 12, 0, ..., 0, 0, 0]]], dtype=uint16).sum
txs/tests/test_datasets.py:56: AssertionError