Skip to content

Commit 4e5ec10

Browse files
committed
Update scipy patch
Remove Sulongisms
1 parent bb7ac57 commit 4e5ec10

File tree

1 file changed

+3
-282
lines changed

1 file changed

+3
-282
lines changed
Lines changed: 3 additions & 282 deletions
Original file line numberDiff line numberDiff line change
@@ -1,139 +1,13 @@
1-
diff --git a/meson.build b/meson.build
2-
index ad18b245..24108760 100644
3-
--- a/meson.build
4-
+++ b/meson.build
5-
@@ -11,7 +11,7 @@ project(
6-
'buildtype=debugoptimized',
7-
'c_std=c99',
8-
'cpp_std=c++14',
9-
- 'fortran_std=legacy',
10-
+ 'fortran_std=none',
11-
'blas=openblas',
12-
'lapack=openblas'
13-
],
14-
@@ -66,6 +66,10 @@ if ff.has_argument('-Wno-conversion')
15-
add_project_arguments('-Wno-conversion', language: 'fortran')
16-
endif
17-
18-
+if ff.has_argument('-fallow-argument-mismatch')
19-
+ add_project_arguments('-fallow-argument-mismatch', language: 'fortran')
20-
+endif
21-
+
22-
is_windows = host_machine.system() == 'windows'
23-
24-
# Intel compilers default to fast-math, so disable it if we detect Intel
25-
diff --git a/mesonpy_wrapper.py b/mesonpy_wrapper.py
26-
new file mode 100644
27-
index 00000000..afa33ecc
28-
--- /dev/null
29-
+++ b/mesonpy_wrapper.py
30-
@@ -0,0 +1,86 @@
31-
+import mesonpy
32-
+import os
33-
+import sys
34-
+from contextlib import contextmanager
35-
+import subprocess
36-
+
37-
+
38-
+def get_flang_new_lib_dir():
39-
+ if sys.implementation.name == "graalpy" and __graalpython__.use_system_toolchain:
40-
+ return None, None
41-
+ try:
42-
+ output = subprocess.check_output(['flang-new', '--version'])
43-
+ flang_dir = output.splitlines()[-1].split()[-1].strip().decode("utf-8")
44-
+ return os.path.join(flang_dir, "flang-new"), os.path.normpath(os.path.join(flang_dir, '..', 'lib'))
45-
+ except Exception as e:
46-
+ print(f"INFO: flang-new not detected, could not find library path. Reason: {e}")
47-
+ return None, None
48-
+
49-
+
50-
+def append_env_var(env, var, value):
51-
+ env[var] = '{} {}'.format(env.get(var, ''), value)
52-
+
53-
+
54-
+def get_build_env():
55-
+ env = {}
56-
+ flang_new, flang_lib_dir = get_flang_new_lib_dir()
57-
+ if flang_new:
58-
+ # until flang-new can compile propack we disable it (during runtime)
59-
+ env["USE_PROPACK"] = "0"
60-
+ env['CC'] = 'clang'
61-
+ env['CXX'] = 'clang++'
62-
+ # env['FC'] = flang_new
63-
+ env['FC'] = "flang-new"
64-
+ if sys.implementation.name == "graalpy":
65-
+ cflags = "-flto=full"
66-
+ else:
67-
+ ld = 'lld'
68-
+ cflags = "-flto=full -fuse-ld=lld -Wl,--mllvm=-lto-embed-bitcode=optimized,--lto-O0"
69-
+ env['CC_LD'] = ld
70-
+ env['CXX_LD'] = ld
71-
+ env['FC_LD'] = ld
72-
+ env['CFLAGS'] = cflags
73-
+ env['CXXFLAGS'] = cflags
74-
+ env['FFLAGS'] = cflags
75-
+ append_env_var(env, 'LDFLAGS', f'-L{flang_lib_dir}')
76-
+ return env
77-
+
78-
+
79-
+@contextmanager
80-
+def env_vars(env):
81-
+ # save and set
82-
+ prev = {}
83-
+ for k, v in env.items():
84-
+ prev[k] = os.environ.get(k, None)
85-
+ os.environ[k] = v
86-
+
87-
+ yield
88-
+
89-
+ # restore
90-
+ for k, v in prev.items():
91-
+ if v is None:
92-
+ del os.environ[k]
93-
+ else:
94-
+ os.environ[k] = v
95-
+
96-
+
97-
+def get_config_settings(config_settings=None):
98-
+ if config_settings is None:
99-
+ config_settings = {}
100-
+ config_settings['compile-args'] = '-j4'
101-
+ config_settings['builddir'] = f'mesonbuild-{sys.implementation.name}'
102-
+ return config_settings
103-
+
104-
+
105-
+def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
106-
+ config_settings = get_config_settings(config_settings)
107-
+ scipy_build_env = get_build_env()
108-
+ with env_vars(scipy_build_env):
109-
+ return mesonpy.build_wheel(wheel_directory, config_settings=config_settings, metadata_directory=metadata_directory)
110-
+
111-
+
112-
+def build_sdist(sdist_directory, config_settings=None):
113-
+ config_settings = get_config_settings(config_settings)
114-
+ scipy_build_env = get_build_env()
115-
+ with env_vars(scipy_build_env):
116-
+ return mesonpy.build_sdist(sdist_directory, config_settings=config_settings)
1171
diff --git a/pyproject.toml b/pyproject.toml
118-
index 454a3c2e..94a754aa 100644
2+
index 454a3c2e..7c96eb11 100644
1193
--- a/pyproject.toml
1204
+++ b/pyproject.toml
121-
@@ -8,55 +8,21 @@
122-
# "pybind11>=2.4.3,<2.5.0",
123-
124-
[build-system]
125-
-build-backend = 'mesonpy'
126-
+# build-backend = 'mesonpy'
127-
+build-backend = 'mesonpy_wrapper'
128-
+backend-path = ["."]
129-
requires = [
130-
"meson-python>=0.11.0,<0.13.0",
131-
"Cython>=0.29.32,<3.0",
5+
@@ -15,48 +15,11 @@ requires = [
1326
# conservatively avoid issues from
1337
# https://github.com/pybind/pybind11/issues/4420
1348
"pybind11==2.10.1",
1359
- "pythran>=0.12.0,<0.13.0",
136-
+ "pythran>=0.13.0",
10+
+ "pythran==0.13.1",
13711
# `wheel` is needed for non-isolated builds, given that `meson-python`
13812
# doesn't list it as a runtime requirement (at least in 0.5.0)
13913
"wheel<0.39.0",
@@ -176,159 +50,6 @@ index 454a3c2e..94a754aa 100644
17650
- "numpy; python_version>='3.12'",
17751
- "numpy; python_version>='3.8' and platform_python_implementation=='PyPy'",
17852
+ "numpy==1.23.5",
179-
+ "ninja",
18053
]
18154

18255
[project]
183-
diff --git a/scipy/_lib/_ccallback_c.pyx b/scipy/_lib/_ccallback_c.pyx
184-
index 0704acc6..beb2bc72 100644
185-
--- a/scipy/_lib/_ccallback_c.pyx
186-
+++ b/scipy/_lib/_ccallback_c.pyx
187-
@@ -210,15 +210,15 @@ cdef double sine(double x, void *user_data) nogil except *:
188-
import ctypes
189-
190-
plus1_t = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double, ctypes.POINTER(ctypes.c_int), ctypes.c_void_p)
191-
-plus1_ctypes = ctypes.cast(<size_t>&plus1_cython, plus1_t)
192-
+# plus1_ctypes = ctypes.cast(<size_t>&plus1_cython, plus1_t)
193-
194-
plus1b_t = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double, ctypes.c_double,
195-
ctypes.POINTER(ctypes.c_int), ctypes.c_void_p)
196-
-plus1b_ctypes = ctypes.cast(<size_t>&plus1b_cython, plus1b_t)
197-
+# plus1b_ctypes = ctypes.cast(<size_t>&plus1b_cython, plus1b_t)
198-
199-
plus1bc_t = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double, ctypes.c_double, ctypes.c_double,
200-
ctypes.POINTER(ctypes.c_int), ctypes.c_void_p)
201-
-plus1bc_ctypes = ctypes.cast(<size_t>&plus1bc_cython, plus1bc_t)
202-
+# plus1bc_ctypes = ctypes.cast(<size_t>&plus1bc_cython, plus1bc_t)
203-
204-
sine_t = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double, ctypes.c_void_p)
205-
-sine_ctypes = ctypes.cast(<size_t>&sine, sine_t)
206-
+# sine_ctypes = ctypes.cast(<size_t>&sine, sine_t)
207-
diff --git a/scipy/_lib/setup.py b/scipy/_lib/setup.py
208-
index 6fca8a66..95000399 100644
209-
--- a/scipy/_lib/setup.py
210-
+++ b/scipy/_lib/setup.py
211-
@@ -55,8 +55,6 @@ def configuration(parent_package='',top_path=None):
212-
# Generate a header file containing defines
213-
config_cmd = config.get_config_cmd()
214-
defines = []
215-
- if config_cmd.check_func('open_memstream', decl=True, call=True):
216-
- defines.append(('HAVE_OPEN_MEMSTREAM', '1'))
217-
target = os.path.join(os.path.dirname(__file__), 'src',
218-
'messagestream_config.h')
219-
with open(target, 'w') as f:
220-
diff --git a/scipy/_lib/src/messagestream_config.h.in b/scipy/_lib/src/messagestream_config.h.in
221-
index fe2a3876..1cdf6c79 100644
222-
--- a/scipy/_lib/src/messagestream_config.h.in
223-
+++ b/scipy/_lib/src/messagestream_config.h.in
224-
@@ -1 +1 @@
225-
-#define HAVE_OPEN_MEMSTREAM @has_openmemstream@
226-
+#define HAVE_OPEN_MEMSTREAM 0 // @has_openmemstream@
227-
\ No newline at end of file
228-
diff --git a/scipy/sparse/linalg/meson.build b/scipy/sparse/linalg/meson.build
229-
index 946cac0c..96852886 100644
230-
--- a/scipy/sparse/linalg/meson.build
231-
+++ b/scipy/sparse/linalg/meson.build
232-
@@ -15,7 +15,7 @@ py3.install_sources([
233-
subdir: 'scipy/sparse/linalg'
234-
)
235-
236-
-subdir('_propack')
237-
+# subdir('_propack')
238-
subdir('_isolve')
239-
subdir('_dsolve')
240-
subdir('_eigen')
241-
diff --git a/scipy/special/meson.build b/scipy/special/meson.build
242-
index f92183f5..b1443aad 100644
243-
--- a/scipy/special/meson.build
244-
+++ b/scipy/special/meson.build
245-
@@ -427,24 +427,24 @@ py3.extension_module('_test_internal',
246-
# Must use `custom_target`, because `py3.install_sources` does not work with
247-
# generated sources - see https://github.com/mesonbuild/meson/issues/7372
248-
npz_files = [
249-
- [
250-
- '_data_boost',
251-
- 'tests/data/boost/assoc_legendre_p_ipp/assoc_legendre_p.txt',
252-
- 'boost',
253-
- 'boost.npz'
254-
- ],
255-
- [
256-
- '_data_gsl',
257-
- 'tests/data/gsl/mathieu_ab.txt',
258-
- 'gsl',
259-
- 'gsl.npz'
260-
- ],
261-
- [
262-
- '_data_local',
263-
- 'tests/data/local/ellipkm1.txt',
264-
- 'local',
265-
- 'local.npz'
266-
- ],
267-
+ # [
268-
+ # '_data_boost',
269-
+ # 'tests/data/boost/assoc_legendre_p_ipp/assoc_legendre_p.txt',
270-
+ # 'boost',
271-
+ # 'boost.npz'
272-
+ # ],
273-
+ # [
274-
+ # '_data_gsl',
275-
+ # 'tests/data/gsl/mathieu_ab.txt',
276-
+ # 'gsl',
277-
+ # 'gsl.npz'
278-
+ # ],
279-
+ # [
280-
+ # '_data_local',
281-
+ # 'tests/data/local/ellipkm1.txt',
282-
+ # 'local',
283-
+ # 'local.npz'
284-
+ # ],
285-
]
286-
287-
foreach npz_file: npz_files
288-
diff --git a/tools/cythonize.py b/tools/cythonize.py
289-
index 402824cb..b6aba959 100755
290-
--- a/tools/cythonize.py
291-
+++ b/tools/cythonize.py
292-
@@ -95,21 +95,19 @@ def process_pyx(fromfile, tofile, cwd):
293-
if tofile.endswith('.cxx'):
294-
flags += ['--cplus']
295-
296-
- try:
297-
+ try:
298-
+ from Cython.Compiler.Main import setuptools_main
299-
+ prev_argv = sys.argv[1:]
300-
try:
301-
- r = subprocess.call(['cython'] + flags + ["-o", tofile, fromfile], cwd=cwd)
302-
- if r != 0:
303-
- raise Exception('Cython failed')
304-
- except OSError as e:
305-
- # There are ways of installing Cython that don't result in a cython
306-
- # executable on the path, see gh-2397.
307-
- r = subprocess.call([sys.executable, '-c',
308-
- 'import sys; from Cython.Compiler.Main import '
309-
- 'setuptools_main as main; sys.exit(main())'] + flags +
310-
- ["-o", tofile, fromfile],
311-
- cwd=cwd)
312-
- if r != 0:
313-
- raise Exception("Cython either isn't installed or it failed.") from e
314-
+ oldcwd = os.getcwd()
315-
+ os.chdir(cwd)
316-
+ sys.argv[1:] = flags + ["-o", tofile, fromfile]
317-
+ retcode = setuptools_main()
318-
+ if retcode:
319-
+ sys.exit(retcode)
320-
+ finally:
321-
+ sys.argv[1:] = prev_argv
322-
+ os.chdir(oldcwd)
323-
except OSError as e:
324-
raise OSError('Cython needs to be installed') from e
325-
326-
@@ -253,7 +251,7 @@ def find_process_files(root_dir):
327-
lock = Lock()
328-
329-
try:
330-
- num_proc = int(os.environ.get('SCIPY_NUM_CYTHONIZE_JOBS', cpu_count()))
331-
+ num_proc = int(os.environ.get('SCIPY_NUM_CYTHONIZE_JOBS', 1))
332-
pool = Pool(processes=num_proc)
333-
except ImportError as e:
334-
# Allow building (single-threaded) on GNU/Hurd, which does not

0 commit comments

Comments
 (0)