looks like I managed to patch numba

- Update to 2.2.2
  * New functions matvec and vecmat
  * Many improved annotations
  * Improved support for the new StringDType
  * Improved support for free threaded Python
  * Fixes for f2py
  ## Deprecations
  * _add_newdoc_ufunc is now deprecated. ufunc.__doc__ = newdoc should 
    be used instead.
  ## Expired deprecations
  * bool(np.array([])) and other empty arrays will now raise an error. 
    Use arr.size > 0 instead to check whether an array has no elements.
  ## Compatibility notes
  * numpy.cov now properly transposes single-row (2d array) design 
    matrices when rowvar=False. Previously, single-row design matrices 
    would return a scalar in this scenario, which is not correct, so 
    this is a behavior change and an array of the appropriate shape 
    will now be returned.
  ## New Features
  * New functions for matrix-vector and vector-matrix products
  * np.complexfloating[T, T] can now also be written as np.complexfloating[T]
  * UFuncs now support __dict__ attribute and allow overriding __doc__ 
    (either directly or via ufunc.__dict__["__doc__"]). __dict__ can be 
    used to also override other properties, such as __module__ or 
    __qualname__.
  * The “nbit” type parameter of np.number and its subtypes now defaults 
    to typing.Any. This way, type-checkers will infer annotations such 
    as x: np.floating as x: np.floating[Any], even in strict mode.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:numeric/python-numpy?expand=0&rev=182
This commit is contained in:
2025-03-18 13:28:14 +00:00
committed by Git OBS Bridge
commit 8fc76b3557
18 changed files with 4909 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.osc

View File

@@ -0,0 +1,64 @@
From bf50761dee8f0670542bcdc1fd9bff5cdb0448d4 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fvogt@suse.de>
Date: Thu, 28 Mar 2024 14:39:45 +0100
Subject: [PATCH] BUG: Fix test_impossible_feature_enable failing without
BASELINE_FEAT
If the build has no baseline features set, the test ended up setting
e.g. NPY_ENABLE_CPU_FEATURES="ASIMDHP, None". This actually made the
execution succeed, as the warning for decoding "None" overrode the
error for the real feature. Fix the error handling there by removing
the errorneous "return 0;", add a test for this, and avoid passing
"None" by accident.
---
numpy/core/src/common/npy_cpu_features.c | 1 -
numpy/core/tests/test_cpu_features.py | 14 ++++++++++++--
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/numpy/core/src/common/npy_cpu_features.c b/numpy/core/src/common/npy_cpu_features.c
index bd149f8b4..f4d25cc50 100644
--- a/numpy/core/src/common/npy_cpu_features.c
+++ b/numpy/core/src/common/npy_cpu_features.c
@@ -324,7 +324,6 @@ npy__cpu_check_env(int disable, const char *env) {
) < 0) {
return -1;
}
- return 0;
}
#define NOTSUPP_BODY \
diff --git a/numpy/core/tests/test_cpu_features.py b/numpy/core/tests/test_cpu_features.py
index 48ab30a4a..88e4ad185 100644
--- a/numpy/core/tests/test_cpu_features.py
+++ b/numpy/core/tests/test_cpu_features.py
@@ -308,8 +308,8 @@ def test_impossible_feature_enable(self):
err_type = "RuntimeError"
self._expect_error(msg, err_type)
- # Ensure that only the bad feature gets reported
- feats = f"{bad_feature}, {self.BASELINE_FEAT}"
+ # Ensure that it fails even when providing garbage in addition
+ feats = f"{bad_feature}, Foobar"
self.env['NPY_ENABLE_CPU_FEATURES'] = feats
msg = (
f"You cannot enable CPU features \\({bad_feature}\\), since they "
@@ -317,6 +317,16 @@ def test_impossible_feature_enable(self):
)
self._expect_error(msg, err_type)
+ if self.BASELINE_FEAT is not None:
+ # Ensure that only the bad feature gets reported
+ feats = f"{bad_feature}, {self.BASELINE_FEAT}"
+ self.env['NPY_ENABLE_CPU_FEATURES'] = feats
+ msg = (
+ f"You cannot enable CPU features \\({bad_feature}\\), since "
+ "they are not supported by your machine."
+ )
+ self._expect_error(msg, err_type)
+
is_linux = sys.platform.startswith('linux')
is_cygwin = sys.platform.startswith('cygwin')
machine = platform.machine()
--
2.44.0

View File

@@ -0,0 +1,46 @@
From 79e7c3c3262374de778145946b612135fb7cd581 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fvogt@suse.de>
Date: Thu, 28 Mar 2024 13:15:54 +0100
Subject: [PATCH] feature module: Fix handling of multiple conflicts per
attribute
- Attributes without match were never actually added to the list
- Only the last conflict actually had an effect, earlier results were
discarded
---
vendored-meson/meson/mesonbuild/modules/features/module.py | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/vendored-meson/meson/mesonbuild/modules/features/module.py b/vendored-meson/meson/mesonbuild/modules/features/module.py
index 0be6af06c..a6f357b3f 100644
--- a/vendored-meson/meson/mesonbuild/modules/features/module.py
+++ b/vendored-meson/meson/mesonbuild/modules/features/module.py
@@ -371,15 +371,12 @@ class Module(NewExtensionModule):
values: List[ConflictAttr] = getattr(fet, attr)
accumulate_values = test_result[attr] # type: ignore
for conflict in values:
- if not conflict.match:
- accumulate_values.append(conflict.val)
- continue
conflict_vals: List[str] = []
# select the acc items based on the match
new_acc: List[str] = []
for acc in accumulate_values:
# not affected by the match so we keep it
- if not conflict.match.match(acc):
+ if not (conflict.match and conflict.match.match(acc)):
new_acc.append(acc)
continue
# no filter so we totaly escape it
@@ -396,7 +393,7 @@ class Module(NewExtensionModule):
continue
conflict_vals.append(conflict.mjoin.join(filter_val))
new_acc.append(conflict.val + conflict.mjoin.join(conflict_vals))
- test_result[attr] = new_acc # type: ignore
+ accumulate_values = test_result[attr] = new_acc # type: ignore
test_args = compiler.has_multi_arguments
args = test_result['args']
--
2.44.0

10
_constraints Normal file
View File

@@ -0,0 +1,10 @@
<constraints>
<hardware>
<physicalmemory>
<size unit="G">8</size>
</physicalmemory>
<disk>
<size unit="G">9</size>
</disk>
</hardware>
</constraints>

3
_multibuild Normal file
View File

@@ -0,0 +1,3 @@
<multibuild>
<package>gnu-hpc</package>
</multibuild>

View File

@@ -0,0 +1,53 @@
From 59694be29a71b17ad1ce58c865a5524c50bfedee Mon Sep 17 00:00:00 2001
From: Ralf Gommers <ralf.gommers@gmail.com>
Date: Fri, 16 Feb 2024 22:18:43 +0100
Subject: [PATCH] TST: fix Cython compile test which invokes `meson`
Closes gh-24956
[skip circle]
---
numpy/core/tests/test_cython.py | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
Index: numpy-1.26.4/numpy/core/tests/test_cython.py
===================================================================
--- numpy-1.26.4.orig/numpy/core/tests/test_cython.py
+++ numpy-1.26.4/numpy/core/tests/test_cython.py
@@ -37,6 +37,13 @@ def install_temp(tmpdir_factory):
srcdir = os.path.join(os.path.dirname(__file__), 'examples', 'cython')
build_dir = tmpdir_factory.mktemp("cython_test") / "build"
os.makedirs(build_dir, exist_ok=True)
+ # Ensure we use the correct Python interpreter even when `meson` is
+ # installed in a different Python environment (see gh-24956)
+ native_file = str(build_dir / 'interpreter-native-file.ini')
+ with open(native_file, 'w') as f:
+ f.write("[binaries]\n")
+ f.write(f"python = '{sys.executable}'")
+
try:
subprocess.check_call(["meson", "--version"])
except FileNotFoundError:
@@ -44,17 +51,20 @@ def install_temp(tmpdir_factory):
if sys.platform == "win32":
subprocess.check_call(["meson", "setup",
"--buildtype=release",
- "--vsenv", str(srcdir)],
+ "--vsenv", "--native-file", native_file,
+ str(srcdir)],
cwd=build_dir,
)
else:
- subprocess.check_call(["meson", "setup", str(srcdir)],
+ subprocess.check_call(["meson", "setup",
+ "--native-file", native_file, str(srcdir)],
cwd=build_dir
)
subprocess.check_call(["meson", "compile", "-vv"], cwd=build_dir)
sys.path.append(str(build_dir))
+
def test_is_timedelta64_object(install_temp):
import checks

3
numpy-1.26.4.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010
size 15786129

View File

@@ -0,0 +1,28 @@
From: toddrme2178@gmail.com
Date: 2014-09-09 04:45:00 +0000
Subject: Remove windows-specific function
Upstream: openSUSE Fix
References:
http://lists.opensuse.org/opensuse-packaging/2014-09/msg00004.html
http://lists.opensuse.org/opensuse-packaging/2014-09/msg00005.html
__declspec(thread) is a windows-specific function that is causing
spurious compiler warnings. These warnings can be safely ignored,
but are being falsely flagged as serious problems that cause the
build to fail. Since this is windows-specific, it can be
safely removed.
Index: numpy-1.24.0/numpy/core/setup_common.py
===================================================================
--- numpy-1.24.0.orig/numpy/core/setup_common.py
+++ numpy-1.24.0/numpy/core/setup_common.py
@@ -141,7 +141,7 @@ OPTIONAL_FILE_FUNCS = ["ftello", "fseeko
OPTIONAL_MISC_FUNCS = ["backtrace", "madvise"]
# variable attributes tested via "int %s a" % attribute
-OPTIONAL_VARIABLE_ATTRIBUTES = ["__thread", "__declspec(thread)"]
+OPTIONAL_VARIABLE_ATTRIBUTES = ["__thread"]
# Subset of OPTIONAL_*_FUNCS which may already have HAVE_* defined by Python.h
OPTIONAL_FUNCS_MAYBE = [

3
numpy-2.0.0.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864
size 18326228

3
numpy-2.1.1.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd
size 18874860

BIN
numpy-2.1.3.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
numpy-2.2.2.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

26
numpy-buildfix.patch Normal file
View File

@@ -0,0 +1,26 @@
Index: numpy-1.19.5/numpy/distutils/command/autodist.py
===================================================================
--- numpy-1.19.5.orig/numpy/distutils/command/autodist.py
+++ numpy-1.19.5/numpy/distutils/command/autodist.py
@@ -51,7 +51,7 @@ def check_compiler_gcc(cmd):
cmd._check_compiler()
body = textwrap.dedent("""
- int
+ void
main()
{
#if (! defined __GNUC__)
Index: numpy-1.19.5/numpy/distutils/command/install.py
===================================================================
--- numpy-1.19.5.orig/numpy/distutils/command/install.py
+++ numpy-1.19.5/numpy/distutils/command/install.py
@@ -67,7 +67,7 @@ class install(old_install):
need_rewrite = False
for l in f:
l = l.rstrip()
- if ' ' in l:
+ if ' ' in l and '%dir ' not in l:
need_rewrite = True
l = '"%s"' % (l)
lines.append(l)

7
python-numpy-rpmlintrc Normal file
View File

@@ -0,0 +1,7 @@
# These files are required for testing (and testing the package on a live system)
addFilter("devel-file-in-non-devel-package .*numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c")
addFilter("devel-file-in-non-devel-package .*numpy/_core/tests/examples")
addFilter("devel-file-in-non-devel-package .*numpy/_core/tests/data")
addFilter("hidden-file-or-dir .*numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap")
addFilter("hidden-file-or-dir .*numpy/f2py/tests/src/f2cmap/.f2py_f2cmap")
addFilter("zero-length .*numpy/core/__init__.pyi")

3561
python-numpy.changes Normal file

File diff suppressed because it is too large Load Diff

460
python-numpy.spec Normal file
View File

@@ -0,0 +1,460 @@
#
# spec file for package python-numpy
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%global flavor @BUILD_FLAVOR@%{nil}
%define ver 2.2.2
%define _ver 2_2_2
%define pname python-numpy
%define plainpython python
%define hpc_upcase_trans_hyph() %(echo %{**} | tr [a-z] [A-Z] | tr '-' '_')
%if "%{flavor}" == ""
%bcond_with hpc
%bcond_with openblas
%endif
%if "%{flavor}" == "gnu-hpc"
%bcond_without hpc
%endif
%if "%{flavor}" == "gnu7-hpc"
%define c_f_ver 7
%bcond_without hpc
%endif
%if %{with hpc}
%bcond_without openblas
%endif
%if 0%{?sle_version} == 120300
%{?with_openblas:ExclusiveArch: do_not_build}
%endif
%{?with_hpc:%{hpc_requires}}
#
%if 0%{?suse_version} > 1500
%bcond_without libalternatives
%bcond_without cblas
%else
%bcond_with libalternatives
%bcond_with cblas
%endif
#
%bcond_with ringdisabled
#
%if %{without hpc}
%define package_name %{pname}
%define p_python_sitearch %{python_sitearch}
%define p_prefix %{_prefix}
%define p_bindir %{_bindir}
%else
%{!?compiler_family:%global compiler_family gnu}
%{hpc_init -c %{compiler_family} %{?c_f_ver:-v %{c_f_ver}} %{?mpi_ver:-V %{mpi_ver}}}
%define package_name %{hpc_package_name %{_ver}}
%define p_python_sitearch %{hpc_python_sitearch}
%define p_prefix %{hpc_prefix}
%define p_bindir %{hpc_bindir}
# Magic for OBS Staging. Only build the flavors required by
# other packages in the ring.
%if %{with ringdisabled}
ExclusiveArch: do_not_build
%endif
%endif
%{?sle15_python_module_pythons}
Name: %{package_name}
# set %%ver and %%_ver instead above
Version: %{ver}
Release: 0
Summary: NumPy array processing for numbers, strings, records and objects
License: BSD-3-Clause
URL: http://www.numpy.org/
Source: https://files.pythonhosted.org/packages/source/n/numpy/numpy-%{version}.tar.gz
Source99: python-numpy-rpmlintrc
# PATCH-FIX-OPENSUSE numpy-buildfix.patch -- openSUSE-specific build fixes
Patch0: numpy-buildfix.patch
# PATCH-FIX-UPSTREAM update-meson-1_5_2.patch gh#numpy/numpy#27531 mcepl@suse.com
# update vendored meson
Patch1: update-meson-1_5_2.patch
BuildRequires: %{python_module Cython >= 3.0}
BuildRequires: %{python_module base >= 3.10}
BuildRequires: %{python_module devel}
BuildRequires: %{python_module meson-python >= 0.15}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module pyproject-metadata >= 0.7.1}
BuildRequires: cmake
%if 0%{?suse_version} < 1600
BuildRequires: gcc12
BuildRequires: gcc12-c++
%else
BuildRequires: gcc
BuildRequires: gcc-c++
%endif
BuildRequires: ninja >= 1.8.2
BuildRequires: patchelf
BuildRequires: python-rpm-macros >= 20210929
BuildConflicts: gcc11 < 11.2
%if 0%{?suse_version}
BuildRequires: fdupes
%endif
# SECTION test requirements
BuildRequires: %{python_module pytest >= 7.4.0}
BuildRequires: %{python_module hypothesis >= 6.75.0}
BuildRequires: %{python_module pytest-xdist}
BuildRequires: %{python_module testsuite}
BuildRequires: %{python_module typing-extensions >= 4.2.0}
# /SECTION
%if %{without hpc}
# Last version which packaged %%{_bindir}/f2py without update-alternatives
Conflicts: %{plainpython}-numpy <= 1.12.0
%if 0%{?suse_version}
BuildRequires: gcc-fortran
%else
BuildRequires: gcc-gfortran
%endif
%if %{with openblas}
BuildRequires: openblas-devel > 0.3.20
%else
BuildRequires: blas-devel
BuildRequires: lapack-devel
%if %{with cblas}
# openblas has significantly better performance for some operations
BuildRequires: cblas-devel
Recommends: libopenblas_pthreads0
%endif
%endif
%if %{with libalternatives}
BuildRequires: alts
Requires: alts
%else
Requires(post): update-alternatives
Requires(postun): update-alternatives
%endif
%else
BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel
BuildRequires: libopenblas%{?hpc_ext}-%{compiler_family}%{?c_f_ver}-hpc-devel
%ifnarch %ix86 %arm
BuildRequires: lua-lmod
%endif
BuildRequires: suse-hpc
Requires: libopenblas%{?hpc_ext}-%{compiler_family}%{?c_f_ver}-hpc
%endif
%python_subpackages
%description
NumPy is a general-purpose array-processing package designed to
efficiently manipulate large multi-dimensional arrays of arbitrary
records without sacrificing too much speed for small multi-dimensional
arrays. NumPy is built on the Numeric code base and adds features
introduced by numarray as well as an extended C-API and the ability to
create arrays of arbitrary type which also makes NumPy suitable for
interfacing with general-purpose data-base applications.
There are also basic facilities for discrete fourier transform,
basic linear algebra and random number generation.
%{?with_hpc:%{hpc_python_master_package -L -a }}
%package devel
Summary: Development files for numpy applications
Requires: %{name} = %{version}
Requires: python-devel
Requires: %plainpython(abi) = %{python_version}
%if %{without hpc}
%if %{with openblas}
Requires: openblas-devel
%else
Requires: blas-devel
%if %{with cblas}
Requires: cblas-devel
%endif
Requires: lapack-devel
%endif
%else
Requires: libopenblas%{?hpc_ext}-%{compiler_family}%{?c_f_ver}-hpc-devel
%{hpc_requires_devel}
%endif
%description devel
This package contains files for developing applications using numpy.
%{?with_hpc:%{hpc_python_master_package devel -a }}
%prep
%autosetup -p1 -n numpy-%{version}
# Fix non-executable scripts
sed -i '1{/^#!/d}'\
numpy/distutils/{conv_template,cpuinfo,from_template,system_info}.py \
numpy/f2py/{__init__,cfuncs,diagnose,crackfortran,f2py2e,rules}.py \
numpy/random/_examples/cython/extending{,_distributions}.pyx \
numpy/testing/print_coercion_tables.py
chmod -x \
numpy/f2py/{crackfortran,f2py2e,rules}.py \
numpy/testing/print_coercion_tables.py
# force cythonization
rm -f PKG-INFO
%build
export PYTHONDONTWRITEBYTECODE=1
%define _lto_cflags %{nil}
%if %{with hpc}
%hpc_setup
module load openblas
export CFLAGS="$(pkg-config --cflags openblas) %{optflags} -fno-strict-aliasing" LIBS="$(pkg-config --libs openblas)"
cat > site.cfg <<EOF
[openblas]
libraries = openblas
library_dirs = $OPENBLAS_LIB
include_dirs = $OPENBLAS_INC
EOF
%else
export CFLAGS="%{optflags} -fno-strict-aliasing"
%endif
%if 0%{?suse_version} < 1600
export CC=gcc-12
export CXX=g++-12
%endif
%pyproject_wheel
%install
%{?with_hpc:%hpc_setup}
%{?with_hpc:module load openblas}
%pyproject_install --prefix %{p_prefix} --root %{buildroot}
%if !%{with hpc}
%python_clone -a %{buildroot}%{_bindir}/f2py
%python_clone -a %{buildroot}%{_bindir}/numpy-config
%endif
%if 0%{?suse_version}
%fdupes %{buildroot}%{p_prefix}
%endif
%if %{with hpc}
%define hpc_module_pname ${python_flavor}-numpy
%{python_expand # Don't package testsuite
python_flavor=`cat _current_flavor`
sitesearch_path=`$python -c "import sysconfig as s; print(s.get_paths(vars={'platbase':'%{hpc_prefix}','base':'%{hpc_prefix}'}).get('platlib'))"`
rm -rf %{buildroot}${sitesearch_path}/numpy/{,_core,distutils,f2py,fft,lib,linalg,ma,matrixlib,oldnumeric,polynomial,random,testing}/tests
%hpc_write_modules_files
#%%Module1.0#####################################################################
proc ModulesHelp { } {
puts stderr " "
puts stderr "This module loads the %{pname} library built with the %{compiler_family} compiler"
puts stderr "toolchain."
puts stderr "\nVersion %{version}\n"
}
module-whatis "Name: %{pname} built with %{compiler_family} compiler"
module-whatis "Version: %{version}"
module-whatis "Category: python module"
module-whatis "Description: %{SUMMARY:0}"
module-whatis "URL %{url}"
set version %{version}
if [ expr [ module-info mode load ] || [module-info mode display ] ] {
if { ![is-loaded intel] && ![is-loaded openblas] } {
module load openblas
}
}
prepend-path PATH %{hpc_bindir}
prepend-path PYTHONPATH ${sitesearch_path}
setenv %{hpc_upcase_trans_hyph %{pname}}_DIR %{hpc_prefix}
setenv %{hpc_upcase_trans_hyph %{pname}}_BIN %{hpc_bindir}
family "NumPy"
EOF
}
%endif
%check
# https://numpy.org/doc/stable/dev/development_environment.html#running-tests
%if %{without hpc}
mkdir -p testing
cp pytest.ini testing/
pushd testing
%python_flavored_alternatives
%if %{with libalternatives}
%{python_expand #
for b in f2py numpy-config; do
ln -s %{buildroot}%{_bindir}/$b-%{$python_bin_suffix} build/flavorbin/$b
done
}
%endif
# flaky tests
test_failok+=" or test_structured_object_indexing"
test_failok+=" or test_structured_object_item_setting"
# flaky due to memory consumption
test_failok+=" or test_big_arrays"
# gh#numpy/numpy#22825
test_failok+=" or TestPrintOptions"
# gh#numpy/numpy#22835
test_failok+=" or test_keepdims_out"
# boo#1148173 gh#numpy/numpy#14438
%ifarch ppc64 ppc64le
test_failok+=" or test_generalized_sq"
# situation with IBM and double numbers is ... complicated
# gh#numpy/numpy#21094
test_failok+=" or test_ppc64_ibm_double_double128"
%endif
# these tests fail on big endian gh#numpy/numpy#11831
%ifarch s390x ppc ppc64
test_failok+=" or TestFReturnCharacter"
%endif
# missing instruction set
%ifarch s390x
test_failok+=" or test_truncate_f32"
%endif
%ifarch %{ix86}
# (arm 32-bit seems okay here)
# gh#numpy/numpy#18387
test_failok+=" or test_pareto"
# gh#numpy/numpy#18388
test_failok+=" or test_float_remainder_overflow"
%endif
%ifarch %{ix86} %{arm32}
# too much memory for 32bit
test_failok+=" or test_identityless_reduction_huge_array"
test_failok+=" or test_huge_vectordot"
# invalid int type for 32bit
test_failok+=" or (test_kind and test_quad_precision)"
test_failok+=" or (test_kind and test_int)"
test_failok+=" or (test_kind and test_real)"
test_failok+=" or (test_multinomial_pvals_float32)"
%endif
%ifarch %{arm}
# https://github.com/numpy/numpy/issues/24001
test_failok+=" or (test_cpu_features and test_features)"
test_failok+=" or (test_umath and test_unary_spurious_fpexception)"
%endif
%ifarch riscv64
# These tests fail due to non-portable assumptions about the signbit of NaN
# gh#numpy/numpy#8213
test_failok+=" or (test_umath and test_fpclass)"
test_failok+=" or (test_numeric and TestBoolCmp and test_float)"
test_failok+=" or (test_umath and test_fp_noncontiguous)"
%endif
# The meson command is always on the primary python and wants to import numpy from there
test_failok+=" or test_limited_api"
# gh#numpy/numpy#27531
test_failok+=" or test_api_importable"
echo "
import sys
import numpy
r = numpy.test(label='full', verbose=2,
extra_argv=['-v', '-n', 'auto', '-k'] + sys.argv[1:])
sys.exit(0 if r else 1)
" > runobstest.py
%{python_expand # for all python3 flavors
export PYTHONPATH=%{buildroot}%{$python_sitearch}
export PYTHONDONTWRITEBYTECODE=1
[ -n "$test_failok" ] && $python runobstest.py "${test_failok:4}" ||:
# test_new_policy: duplicates test runs and output and does not follow our deselection
$python runobstest.py "not (test_new_policy ${test_failok} or slow)"
}
popd
%endif
%if %{without hpc}
%pre
# If libalternatives is used: Removing old update-alternatives entries.
%python_libalternatives_reset_alternative f2py
%post
%python_install_alternative f2py numpy-config
%postun
%python_uninstall_alternative f2py
%endif
%files %{python_files}
%doc README.md THANKS.txt
%license LICENSE.txt
%if %{without hpc}
%python_alternative %{_bindir}/f2py
%python_alternative %{_bindir}/numpy-config
%{python_sitearch}/numpy/
%{python_sitearch}/numpy-%{version}.dist-info
%exclude %{python_sitearch}/numpy/_core/include
%exclude %{python_sitearch}/numpy/_core/lib/libnpymath.a
%exclude %{python_sitearch}/numpy/_core/lib/pkgconfig/numpy.pc
%exclude %{python_sitearch}/numpy/distutils/mingw/*.c
%exclude %{python_sitearch}/numpy/distutils/checks/*.c
%exclude %{python_sitearch}/numpy/f2py/src/
%exclude %{python_sitearch}/numpy/random/lib/libnpyrandom.a
%else
%if "%{python_flavor}" == "python3" || "%{python_provides}" == "python3"
%{p_bindir}/f2py
%{p_bindir}/numpy-config
%else
%exclude %{p_bindir}/f2py
%exclude %{p_bindir}/numpy-config
%endif
%{p_python_sitearch}/numpy/
%{p_python_sitearch}/numpy-%{version}.dist-info
%exclude %{p_python_sitearch}/numpy/_core/include/
%exclude %{p_python_sitearch}/numpy/_core/lib/libnpymath.a
%exclude %{p_python_sitearch}/numpy/_core/lib/pkgconfig/numpy.pc
%exclude %{p_python_sitearch}/numpy/random/lib/libnpyrandom.a
%exclude %{p_python_sitearch}/numpy/distutils/mingw/*.c
%exclude %{p_python_sitearch}/numpy/distutils/checks/*.c
%exclude %{p_python_sitearch}/numpy/f2py/src/
%endif
%if %{with hpc}
%define hpc_module_pname %{python_flavor}-numpy
%{hpc_modules_files}
%{hpc_dirs}
%dir %{hpc_bindir}
%dir %{hpc_libdir}/python%{hpc_python_version}
%dir %{p_python_sitearch}
%endif
%files %{python_files devel}
%license LICENSE.txt
%if %{without hpc}
%{python_sitearch}/numpy/_core/include/
%if 0%{python_version_nodots} < 312
%{python_sitearch}/numpy/distutils/mingw/*.c
%{python_sitearch}/numpy/distutils/checks/*.c
%endif
%{python_sitearch}/numpy/f2py/src/
%{python_sitearch}/numpy/_core/lib/libnpymath.a
%{python_sitearch}/numpy/_core/lib/pkgconfig/numpy.pc
%{python_sitearch}/numpy/random/lib/libnpyrandom.a
%else
%{p_python_sitearch}/numpy/_core/include/
%{p_python_sitearch}/numpy/_core/lib/pkgconfig/numpy.pc
%{p_python_sitearch}/numpy/_core/lib/libnpymath.a
%{p_python_sitearch}/numpy/random/lib/libnpyrandom.a
%if 0%{python_version_nodots} < 312
%{p_python_sitearch}/numpy/distutils/mingw/*.c
%{p_python_sitearch}/numpy/distutils/checks/*.c
%endif
%{p_python_sitearch}/numpy/f2py/src/
%endif
%changelog

612
update-meson-1_5_2.patch Normal file
View File

@@ -0,0 +1,612 @@
diff -uNr numpy-2.1.3.orig/vendored-meson/meson/ci/ciimage/.gitignore numpy-2.1.3/vendored-meson/meson/ci/ciimage/.gitignore
--- numpy-2.1.3.orig/vendored-meson/meson/ci/ciimage/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ numpy-2.1.3/vendored-meson/meson/ci/ciimage/.gitignore 2024-11-22 23:52:31.819240220 +0100
@@ -0,0 +1,3 @@
+/build_*
+/test_*
+/user.sh
diff -uNr numpy-2.1.3.orig/vendored-meson/meson/.git numpy-2.1.3/vendored-meson/meson/.git
--- numpy-2.1.3.orig/vendored-meson/meson/.git 1970-01-01 01:00:00.000000000 +0100
+++ numpy-2.1.3/vendored-meson/meson/.git 2024-11-22 23:52:31.599238818 +0100
@@ -0,0 +1 @@
+gitdir: ../../.git/modules/vendored-meson/meson
diff -uNr numpy-2.1.3.orig/vendored-meson/meson/.gitattributes numpy-2.1.3/vendored-meson/meson/.gitattributes
--- numpy-2.1.3.orig/vendored-meson/meson/.gitattributes 1970-01-01 01:00:00.000000000 +0100
+++ numpy-2.1.3/vendored-meson/meson/.gitattributes 2024-11-22 23:52:31.815906865 +0100
@@ -0,0 +1,7 @@
+.gitignore export-ignore
+.gitattributes export-ignore
+* text eol=lf
+*.png binary
+*.icns binary
+data/shell-completions/bash/meson linguist-language=Shell
+data/shell-completions/zsh/_meson linguist-language=Shell
diff -uNr numpy-2.1.3.orig/vendored-meson/meson/.gitignore numpy-2.1.3/vendored-meson/meson/.gitignore
--- numpy-2.1.3.orig/vendored-meson/meson/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ numpy-2.1.3/vendored-meson/meson/.gitignore 2024-11-22 23:52:31.815906865 +0100
@@ -0,0 +1,34 @@
+.mypy_cache/
+.pytest_cache/
+/.project
+/.pydevproject
+/.settings
+/.cproject
+/.idea
+/.vscode
+
+__pycache__
+/.coverage/
+/.coveragerc
+/install dir
+/work area
+
+/meson-test-run.txt
+/meson-test-run.xml
+/meson-cross-test-run.txt
+/meson-cross-test-run.xml
+
+.DS_Store
+*~
+*.swp
+packagecache
+/MANIFEST
+/build
+/dist
+/meson.egg-info
+
+/docs/built_docs
+/docs/hotdoc-private*
+
+*.pyc
+/*venv*
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/common/153 wrap file should not failed/subprojects/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/common/153 wrap file should not failed/subprojects/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/common/153 wrap file should not failed/subprojects/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/common/153 wrap file should not failed/subprojects/.gitignore" 2024-11-22 23:52:31.892574021 +0100
@@ -0,0 +1,3 @@
+/foo-1.0
+/bar-1.0
+/foo-1.0-patchdir
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/common/234 get_file_contents/.gitattributes" "numpy-2.1.3/vendored-meson/meson/test cases/common/234 get_file_contents/.gitattributes"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/common/234 get_file_contents/.gitattributes" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/common/234 get_file_contents/.gitattributes" 2024-11-22 23:52:31.905907439 +0100
@@ -0,0 +1 @@
+utf-16-text binary
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/d/11 dub/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/d/11 dub/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/d/11 dub/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/d/11 dub/.gitignore" 2024-11-22 23:52:31.819240220 +0100
@@ -0,0 +1 @@
+dub.json
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_asimd.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_asimd.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_asimd.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_asimd.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,27 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]), v2 = vdupq_n_f32(src[1]);
+ /* MAXMIN */
+ int ret = (int)vgetq_lane_f32(vmaxnmq_f32(v1, v2), 0);
+ ret += (int)vgetq_lane_f32(vminnmq_f32(v1, v2), 0);
+ /* ROUNDING */
+ ret += (int)vgetq_lane_f32(vrndq_f32(v1), 0);
+#ifdef __aarch64__
+ {
+ double *src2 = (double*)argv[argc-1];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]), vd2 = vdupq_n_f64(src2[1]);
+ /* MAXMIN */
+ ret += (int)vgetq_lane_f64(vmaxnmq_f64(vd1, vd2), 0);
+ ret += (int)vgetq_lane_f64(vminnmq_f64(vd1, vd2), 0);
+ /* ROUNDING */
+ ret += (int)vgetq_lane_f64(vrndq_f64(vd1), 0);
+ }
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,19 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ // passing from untraced pointers to avoid optimizing out any constants
+ // so we can test against the linker.
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]), v2 = vdupq_n_f32(src[1]);
+ int ret = (int)vgetq_lane_f32(vmulq_f32(v1, v2), 0);
+#ifdef __aarch64__
+ double *src2 = (double*)argv[argc-2];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]), vd2 = vdupq_n_f64(src2[1]);
+ ret += (int)vgetq_lane_f64(vmulq_f64(vd1, vd2), 0);
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_fp16.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_fp16.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_fp16.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_fp16.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,11 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ short *src = (short*)argv[argc-1];
+ float32x4_t v_z4 = vcvt_f32_f16((float16x4_t)vld1_s16(src));
+ return (int)vgetq_lane_f32(v_z4, 0);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_vfpv4.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_vfpv4.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_vfpv4.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_neon_vfpv4.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,21 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]);
+ float32x4_t v2 = vdupq_n_f32(src[1]);
+ float32x4_t v3 = vdupq_n_f32(src[2]);
+ int ret = (int)vgetq_lane_f32(vfmaq_f32(v1, v2, v3), 0);
+#ifdef __aarch64__
+ double *src2 = (double*)argv[argc-2];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]);
+ float64x2_t vd2 = vdupq_n_f64(src2[1]);
+ float64x2_t vd3 = vdupq_n_f64(src2[2]);
+ ret += (int)vgetq_lane_f64(vfmaq_f64(vd1, vd2, vd3), 0);
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <xmmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_add_ps(_mm_setzero_ps(), _mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse2.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse2.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse2.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse2.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <emmintrin.h>
+
+int main(void)
+{
+ __m128i a = _mm_add_epi16(_mm_setzero_si128(), _mm_setzero_si128());
+ return _mm_cvtsi128_si32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse3.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse3.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse3.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse3.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <pmmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_hadd_ps(_mm_setzero_ps(), _mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse41.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse41.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse41.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_sse41.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <smmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_floor_ps(_mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_ssse3.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_ssse3.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_ssse3.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/checks/cpu_ssse3.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <tmmintrin.h>
+
+int main(void)
+{
+ __m128i a = _mm_hadd_epi16(_mm_setzero_si128(), _mm_setzero_si128());
+ return (int)_mm_cvtsi128_si32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/meson.build" "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/meson.build"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/1 baseline/init_features/meson.build" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/1 baseline/init_features/meson.build" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,98 @@
+#project('test-features', 'c')
+mod_features = import('features')
+cpu_family = host_machine.cpu_family()
+compiler_id = meson.get_compiler('c').get_id()
+source_root = meson.project_source_root() + '/../init_features/'
+# Basic X86 Features
+# ------------------
+SSE = mod_features.new(
+ 'SSE', 1, args: '-msse',
+ test_code: files(source_root + 'checks/cpu_sse.c')[0]
+)
+SSE2 = mod_features.new(
+ 'SSE2', 2, implies: SSE,
+ args: '-msse2',
+ test_code: files(source_root + 'checks/cpu_sse2.c')[0]
+)
+# enabling SSE without SSE2 is useless also
+# it's non-optional for x86_64
+SSE.update(implies: SSE2)
+SSE3 = mod_features.new(
+ 'SSE3', 3, implies: SSE2,
+ args: '-msse3',
+ test_code: files(source_root + 'checks/cpu_sse3.c')[0]
+)
+SSSE3 = mod_features.new(
+ 'SSSE3', 4, implies: SSE3,
+ args: '-mssse3',
+ test_code: files(source_root + 'checks/cpu_ssse3.c')[0]
+)
+SSE41 = mod_features.new(
+ 'SSE41', 5, implies: SSSE3,
+ args: '-msse4.1',
+ test_code: files(source_root + 'checks/cpu_sse41.c')[0]
+)
+if cpu_family not in ['x86', 'x86_64']
+ # should disable any prevalent features
+ SSE.update(disable: 'not supported by the current platform')
+endif
+# Specializations for non unix-like compilers
+if compiler_id == 'intel-cl'
+ foreach fet : [SSE, SSE2, SSE3, SSSE3]
+ fet.update(args: {'val': '/arch:' + fet.get('name'), 'match': '/arch:.*'})
+ endforeach
+ SSE41.update(args: {'val': '/arch:SSE4.1', 'match': '/arch:.*'})
+elif compiler_id == 'msvc'
+ # only available on 32-bit. Its enabled by default on 64-bit mode
+ foreach fet : [SSE, SSE2]
+ if cpu_family == 'x86'
+ fet.update(args: {'val': '/arch:' + fet.get('name'), 'match': clear_arch})
+ else
+ fet.update(args: '')
+ endif
+ endforeach
+ # The following features don't own private FLAGS still
+ # the compiler provides ISA capability for them.
+ foreach fet : [SSE3, SSSE3, SSE41]
+ fet.update(args: '')
+ endforeach
+endif
+
+# Basic ARM Features
+# ------------------
+NEON = mod_features.new(
+ 'NEON', 200,
+ test_code: files(source_root + 'checks/cpu_neon.c')[0]
+)
+NEON_FP16 = mod_features.new(
+ 'NEON_FP16', 201, implies: NEON,
+ test_code: files(source_root + 'checks/cpu_neon_fp16.c')[0]
+)
+# FMA
+NEON_VFPV4 = mod_features.new(
+ 'NEON_VFPV4', 202, implies: NEON_FP16,
+ test_code: files(source_root + 'checks/cpu_neon_vfpv4.c')[0]
+)
+# Advanced SIMD
+ASIMD = mod_features.new(
+ 'ASIMD', 203, implies: NEON_VFPV4, detect: {'val': 'ASIMD', 'match': 'NEON.*'},
+ test_code: files(source_root + 'checks/cpu_asimd.c')[0]
+)
+if cpu_family == 'aarch64'
+ # hardware baseline, they can't be enabled independently
+ NEON.update(implies: [NEON_FP16, NEON_VFPV4, ASIMD])
+ NEON_FP16.update(implies: [NEON, NEON_VFPV4, ASIMD])
+ NEON_VFPV4.update(implies: [NEON, NEON_FP16, ASIMD])
+elif cpu_family == 'arm'
+ NEON.update(args: '-mfpu=neon')
+ NEON_FP16.update(args: ['-mfp16-format=ieee', {'val': '-mfpu=neon-fp16', 'match': '-mfpu=.*'}])
+ NEON_VFPV4.update(args: {'val': '-mfpu=neon-vfpv4', 'match': '-mfpu=.*'})
+ ASIMD.update(args: [
+ {'val': '-mfpu=neon-fp-armv8', 'match': '-mfpu=.*'},
+ '-march=armv8-a+simd'
+ ])
+else
+ # should disable any prevalent features
+ NEON.update(disable: 'not supported by the current platform')
+endif
+
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_asimd.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_asimd.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_asimd.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_asimd.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,27 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]), v2 = vdupq_n_f32(src[1]);
+ /* MAXMIN */
+ int ret = (int)vgetq_lane_f32(vmaxnmq_f32(v1, v2), 0);
+ ret += (int)vgetq_lane_f32(vminnmq_f32(v1, v2), 0);
+ /* ROUNDING */
+ ret += (int)vgetq_lane_f32(vrndq_f32(v1), 0);
+#ifdef __aarch64__
+ {
+ double *src2 = (double*)argv[argc-1];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]), vd2 = vdupq_n_f64(src2[1]);
+ /* MAXMIN */
+ ret += (int)vgetq_lane_f64(vmaxnmq_f64(vd1, vd2), 0);
+ ret += (int)vgetq_lane_f64(vminnmq_f64(vd1, vd2), 0);
+ /* ROUNDING */
+ ret += (int)vgetq_lane_f64(vrndq_f64(vd1), 0);
+ }
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,19 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ // passing from untraced pointers to avoid optimizing out any constants
+ // so we can test against the linker.
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]), v2 = vdupq_n_f32(src[1]);
+ int ret = (int)vgetq_lane_f32(vmulq_f32(v1, v2), 0);
+#ifdef __aarch64__
+ double *src2 = (double*)argv[argc-2];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]), vd2 = vdupq_n_f64(src2[1]);
+ ret += (int)vgetq_lane_f64(vmulq_f64(vd1, vd2), 0);
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_fp16.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_fp16.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_fp16.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_fp16.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,11 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ short *src = (short*)argv[argc-1];
+ float32x4_t v_z4 = vcvt_f32_f16((float16x4_t)vld1_s16(src));
+ return (int)vgetq_lane_f32(v_z4, 0);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_vfpv4.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_vfpv4.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_vfpv4.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_neon_vfpv4.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,21 @@
+#ifdef _MSC_VER
+ #include <Intrin.h>
+#endif
+#include <arm_neon.h>
+
+int main(int argc, char **argv)
+{
+ float *src = (float*)argv[argc-1];
+ float32x4_t v1 = vdupq_n_f32(src[0]);
+ float32x4_t v2 = vdupq_n_f32(src[1]);
+ float32x4_t v3 = vdupq_n_f32(src[2]);
+ int ret = (int)vgetq_lane_f32(vfmaq_f32(v1, v2, v3), 0);
+#ifdef __aarch64__
+ double *src2 = (double*)argv[argc-2];
+ float64x2_t vd1 = vdupq_n_f64(src2[0]);
+ float64x2_t vd2 = vdupq_n_f64(src2[1]);
+ float64x2_t vd3 = vdupq_n_f64(src2[2]);
+ ret += (int)vgetq_lane_f64(vfmaq_f64(vd1, vd2, vd3), 0);
+#endif
+ return ret;
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <xmmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_add_ps(_mm_setzero_ps(), _mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse2.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse2.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse2.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse2.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <emmintrin.h>
+
+int main(void)
+{
+ __m128i a = _mm_add_epi16(_mm_setzero_si128(), _mm_setzero_si128());
+ return _mm_cvtsi128_si32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse3.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse3.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse3.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse3.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <pmmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_hadd_ps(_mm_setzero_ps(), _mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse41.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse41.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse41.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_sse41.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <smmintrin.h>
+
+int main(void)
+{
+ __m128 a = _mm_floor_ps(_mm_setzero_ps());
+ return (int)_mm_cvtss_f32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_ssse3.c" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_ssse3.c"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_ssse3.c" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/checks/cpu_ssse3.c" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,7 @@
+#include <tmmintrin.h>
+
+int main(void)
+{
+ __m128i a = _mm_hadd_epi16(_mm_setzero_si128(), _mm_setzero_si128());
+ return (int)_mm_cvtsi128_si32(a);
+}
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/meson.build" "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/meson.build"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/features/2 multi_targets/init_features/meson.build" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/features/2 multi_targets/init_features/meson.build" 2024-11-22 23:52:31.835906993 +0100
@@ -0,0 +1,98 @@
+#project('test-features', 'c')
+mod_features = import('features')
+cpu_family = host_machine.cpu_family()
+compiler_id = meson.get_compiler('c').get_id()
+source_root = meson.project_source_root() + '/../init_features/'
+# Basic X86 Features
+# ------------------
+SSE = mod_features.new(
+ 'SSE', 1, args: '-msse',
+ test_code: files(source_root + 'checks/cpu_sse.c')[0]
+)
+SSE2 = mod_features.new(
+ 'SSE2', 2, implies: SSE,
+ args: '-msse2',
+ test_code: files(source_root + 'checks/cpu_sse2.c')[0]
+)
+# enabling SSE without SSE2 is useless also
+# it's non-optional for x86_64
+SSE.update(implies: SSE2)
+SSE3 = mod_features.new(
+ 'SSE3', 3, implies: SSE2,
+ args: '-msse3',
+ test_code: files(source_root + 'checks/cpu_sse3.c')[0]
+)
+SSSE3 = mod_features.new(
+ 'SSSE3', 4, implies: SSE3,
+ args: '-mssse3',
+ test_code: files(source_root + 'checks/cpu_ssse3.c')[0]
+)
+SSE41 = mod_features.new(
+ 'SSE41', 5, implies: SSSE3,
+ args: '-msse4.1',
+ test_code: files(source_root + 'checks/cpu_sse41.c')[0]
+)
+if cpu_family not in ['x86', 'x86_64']
+ # should disable any prevalent features
+ SSE.update(disable: 'not supported by the current platform')
+endif
+# Specializations for non unix-like compilers
+if compiler_id == 'intel-cl'
+ foreach fet : [SSE, SSE2, SSE3, SSSE3]
+ fet.update(args: {'val': '/arch:' + fet.get('name'), 'match': '/arch:.*'})
+ endforeach
+ SSE41.update(args: {'val': '/arch:SSE4.1', 'match': '/arch:.*'})
+elif compiler_id == 'msvc'
+ # only available on 32-bit. Its enabled by default on 64-bit mode
+ foreach fet : [SSE, SSE2]
+ if cpu_family == 'x86'
+ fet.update(args: {'val': '/arch:' + fet.get('name'), 'match': clear_arch})
+ else
+ fet.update(args: '')
+ endif
+ endforeach
+ # The following features don't own private FLAGS still
+ # the compiler provides ISA capability for them.
+ foreach fet : [SSE3, SSSE3, SSE41]
+ fet.update(args: '')
+ endforeach
+endif
+
+# Basic ARM Features
+# ------------------
+NEON = mod_features.new(
+ 'NEON', 200,
+ test_code: files(source_root + 'checks/cpu_neon.c')[0]
+)
+NEON_FP16 = mod_features.new(
+ 'NEON_FP16', 201, implies: NEON,
+ test_code: files(source_root + 'checks/cpu_neon_fp16.c')[0]
+)
+# FMA
+NEON_VFPV4 = mod_features.new(
+ 'NEON_VFPV4', 202, implies: NEON_FP16,
+ test_code: files(source_root + 'checks/cpu_neon_vfpv4.c')[0]
+)
+# Advanced SIMD
+ASIMD = mod_features.new(
+ 'ASIMD', 203, implies: NEON_VFPV4, detect: {'val': 'ASIMD', 'match': 'NEON.*'},
+ test_code: files(source_root + 'checks/cpu_asimd.c')[0]
+)
+if cpu_family == 'aarch64'
+ # hardware baseline, they can't be enabled independently
+ NEON.update(implies: [NEON_FP16, NEON_VFPV4, ASIMD])
+ NEON_FP16.update(implies: [NEON, NEON_VFPV4, ASIMD])
+ NEON_VFPV4.update(implies: [NEON, NEON_FP16, ASIMD])
+elif cpu_family == 'arm'
+ NEON.update(args: '-mfpu=neon')
+ NEON_FP16.update(args: ['-mfp16-format=ieee', {'val': '-mfpu=neon-fp16', 'match': '-mfpu=.*'}])
+ NEON_VFPV4.update(args: {'val': '-mfpu=neon-vfpv4', 'match': '-mfpu=.*'})
+ ASIMD.update(args: [
+ {'val': '-mfpu=neon-fp-armv8', 'match': '-mfpu=.*'},
+ '-march=armv8-a+simd'
+ ])
+else
+ # should disable any prevalent features
+ NEON.update(disable: 'not supported by the current platform')
+endif
+
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/frameworks/35 boost symlinks/boost/include/boost/version.hpp" "numpy-2.1.3/vendored-meson/meson/test cases/frameworks/35 boost symlinks/boost/include/boost/version.hpp"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/frameworks/35 boost symlinks/boost/include/boost/version.hpp" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/frameworks/35 boost symlinks/boost/include/boost/version.hpp" 2024-11-22 23:52:31.849240411 +0100
@@ -0,0 +1,3 @@
+#define BOOST_VERSION 300
+
+#error This is not a real version of boost
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/78 user options for subproject/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/unit/78 user options for subproject/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/78 user options for subproject/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/unit/78 user options for subproject/.gitignore" 2024-11-22 23:52:31.889240666 +0100
@@ -0,0 +1 @@
+/subprojects
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/78 user options for subproject/75 user options for subproject/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/unit/78 user options for subproject/75 user options for subproject/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/78 user options for subproject/75 user options for subproject/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/unit/78 user options for subproject/75 user options for subproject/.gitignore" 2024-11-22 23:52:31.889240666 +0100
@@ -0,0 +1 @@
+subprojects/*
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/98 link full name/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/unit/98 link full name/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/unit/98 link full name/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/unit/98 link full name/.gitignore" 2024-11-22 23:52:31.892574021 +0100
@@ -0,0 +1,5 @@
+*.a
+*.o
+a.out
+libtestprovider.a
+build
diff -uNr "numpy-2.1.3.orig/vendored-meson/meson/test cases/windows/22 msvc library argument order/lib/.gitignore" "numpy-2.1.3/vendored-meson/meson/test cases/windows/22 msvc library argument order/lib/.gitignore"
--- "numpy-2.1.3.orig/vendored-meson/meson/test cases/windows/22 msvc library argument order/lib/.gitignore" 1970-01-01 01:00:00.000000000 +0100
+++ "numpy-2.1.3/vendored-meson/meson/test cases/windows/22 msvc library argument order/lib/.gitignore" 2024-11-22 23:52:31.902574084 +0100
@@ -0,0 +1,2 @@
+*.obj
+*.lib