Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: generate_f2py mod is called by the wrong interpreter #20535

Open
bnavigator opened this issue Apr 20, 2024 · 15 comments · May be fixed by #20612
Open

BUG: generate_f2py mod is called by the wrong interpreter #20535

bnavigator opened this issue Apr 20, 2024 · 15 comments · May be fixed by #20612
Assignees
Labels
Build issues Issues with building from source, including different choices of architecture, compilers and OS defect A clear bug or issue that prevents SciPy from being installed or used as expected
Milestone

Comments

@bnavigator
Copy link
Contributor

bnavigator commented Apr 20, 2024

Describe your issue.

Following the fix in #20530 I was able to investigate my build failure with the openSUSE scipy HPC package.

It turns out the reliance on the shebang in tools/generate_f2pymod.sh following #20121 is the culprit. It calls the script with the system python3, not respecting any virtual environment or custom build interpreter: The HPC build was setup with numpy for python3.10, but called python3 from 3.11 which did not have a proper HPC numpy in its path.

Tempita may have a similar issue:

#!/usr/bin/env python3

I am able to work around it by adjusting the shebang. But please reconsider hardcoding the interpreter in the vanilla sources.

Reproducing Code Example

# HPC setup on openSUSE Tumbleweed
module load gcc/13
module load openblas
module load python310-numpy

python3.10 -m pip wheel --verbose --progress-bar off --disable-pip-version-check --use-pep517 --no-build-isolation --no-deps --wheel-dir ./build .

## Another way o reproduce: Have numpy for a custom interpreter (here python312) but not for python3 (here python3.11) installed:

docker pull opensuse/tumbleweed
docker run -it  opensuse/tumbleweed

zypper ref
zypper in python311-base python312-base python312-devel python312-numpy python312-Cython python312-devel python312-meson-python python312-pip python312-pybind11-devel python312-pythran pkg-config meson gcc-c++ gcc-fortran openblas-devel wget patch

wget https://files.pythonhosted.org/packages/source/s/scipy/scipy-1.13.0.tar.gz
tar xf scipy-1.13.0.tar.gz
cd scipy-1.13.0
wget https://github.com/scipy/scipy/pull/20530.diff
patch -p1 < 20530.diff
python3.12 -m pip wheel --verbose --progress-bar off --disable-pip-version-check --use-pep517 --no-build-isolation --no-deps --wheel-dir ./build .

Error message

[   93s] Processing /home/abuild/rpmbuild/BUILD/scipy-1.13.0
[   93s]   Preparing metadata (pyproject.toml): started
[   93s]   Running command Preparing metadata (pyproject.toml)
[   94s]   + meson setup /home/abuild/rpmbuild/BUILD/scipy-1.13.0 /home/abuild/rpmbuild/BUILD/scipy-1.13.0/.mesonpy-qtpo_y7n -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/home/abuild/rpmbuild/BUILD/scipy-1.13.0/.mesonpy-qtpo_y7n/meson-python-native-file.ini
[   97s]   The Meson build system


...

{   97s]   Program tools/generate_f2pymod.py found: YES (/usr/bin/python3.11 /home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py)
[   97s]   Program scipy/_build_utils/tempita.py found: YES (/usr/bin/python3.11 /home/abuild/rpmbuild/BUILD/scipy-1.13.0/scipy/_build_utils/tempita.py)
[   97s]   Program pythran found: YES 0.15.0 0.15.0 (/home/abuild/rpmbuild/BUILD/scipy-1.13.0/build/flavorbin/pythran)

...

[  104s]   [164/1475] Generating scipy/linalg/fblas_module with a custom command
[  104s]   FAILED: scipy/linalg/_fblasmodule.c
[  104s]   /usr/bin/python3.11 /home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py ../scipy/linalg/fblas.pyf.src -o scipy/linalg
[  104s]   Traceback (most recent call last):
[  104s]     File "/home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py", line 299, in <module>
[  104s]       main()
[  104s]     File "/home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py", line 293, in main
[  104s]       raise RuntimeError(f"Processing {fname_pyf} with f2py failed!\n"
[  104s]   RuntimeError: Processing scipy/linalg/fblas.pyf with f2py failed!
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/__init__.py", line 23, in <module>
[  104s]       from . import multiarray
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/multiarray.py", line 10, in <module>
[  104s]       from . import overrides
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/overrides.py", line 8, in <module>
[  104s]       from numpy._core._multiarray_umath import (
[  104s]   ModuleNotFoundError: No module named 'numpy._core._multiarray_umath'
[  104s]
[  104s]   During handling of the above exception, another exception occurred:
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__init__.py", line 114, in <module>
[  104s]       from numpy.__config__ import show as show_config
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__config__.py", line 4, in <module>
[  104s]       from numpy._core._multiarray_umath import (
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/__init__.py", line 49, in <module>
[  104s]       raise ImportError(msg)
[  104s]   ImportError:
[  104s]
[  104s]   IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
[  104s]
[  104s]   Importing the numpy C-extensions failed. This error can happen for
[  104s]   many reasons, often due to issues with your setup or how NumPy was
[  104s]   installed.
[  104s]
[  104s]   We have compiled some common reasons and troubleshooting tips at:
[  104s]
[  104s]       https://numpy.org/devdocs/user/troubleshooting-importerror.html
[  104s]
[  104s]   Please note and check the following:
[  104s]
[  104s]     * The Python version is: Python3.11 from "/usr/bin/python3.11"
[  104s]     * The NumPy version is: "2.0.0rc1"
[  104s]
[  104s]   and make sure that they are the versions you expect.
[  104s]   Please carefully study the documentation linked above for further help.
[  104s]
[  104s]   Original error was: No module named 'numpy._core._multiarray_umath'
[  104s]
[  104s]
[  104s]   The above exception was the direct cause of the following exception:
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "<frozen runpy>", line 189, in _run_module_as_main
[  104s]     File "<frozen runpy>", line 112, in _get_module_details
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__init__.py", line 119, in <module>
[  104s]       raise ImportError(msg) from e
[  104s]   ImportError: Error importing numpy: you should not try to import numpy from
[  104s]           its source directory; please exit the numpy source tree, and relaunch
[  104s]           your python interpreter from there.
[  104s]
[  104s]   [165/1475] Generating scipy/linalg/flapack_module with a custom command
[  104s]   FAILED: scipy/linalg/_flapackmodule.c
[  104s]   /usr/bin/python3.11 /home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py ../scipy/linalg/flapack.pyf.src -o scipy/linalg
[  104s]   Traceback (most recent call last):
[  104s]     File "/home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py", line 299, in <module>
[  104s]       main()
[  104s]     File "/home/abuild/rpmbuild/BUILD/scipy-1.13.0/tools/generate_f2pymod.py", line 293, in main
[  104s]       raise RuntimeError(f"Processing {fname_pyf} with f2py failed!\n"
[  104s]   RuntimeError: Processing scipy/linalg/flapack.pyf with f2py failed!
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/__init__.py", line 23, in <module>
[  104s]       from . import multiarray
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/multiarray.py", line 10, in <module>
[  104s]       from . import overrides
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/overrides.py", line 8, in <module>
[  104s]       from numpy._core._multiarray_umath import (
[  104s]   ModuleNotFoundError: No module named 'numpy._core._multiarray_umath'
[  104s]
[  104s]   During handling of the above exception, another exception occurred:
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__init__.py", line 114, in <module>
[  104s]       from numpy.__config__ import show as show_config
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__config__.py", line 4, in <module>
[  104s]       from numpy._core._multiarray_umath import (
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/_core/__init__.py", line 49, in <module>
[  104s]       raise ImportError(msg)
[  104s]   ImportError:
[  104s]
[  104s]   IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
[  104s]
[  104s]   Importing the numpy C-extensions failed. This error can happen for
[  104s]   many reasons, often due to issues with your setup or how NumPy was
[  104s]   installed.
[  104s]
[  104s]   We have compiled some common reasons and troubleshooting tips at:
[  104s]
[  104s]       https://numpy.org/devdocs/user/troubleshooting-importerror.html
[  104s]
[  104s]   Please note and check the following:
[  104s]
[  104s]     * The Python version is: Python3.11 from "/usr/bin/python3.11"
[  104s]     * The NumPy version is: "2.0.0rc1"
[  104s]
[  104s]   and make sure that they are the versions you expect.
[  104s]   Please carefully study the documentation linked above for further help.
[  104s]
[  104s]   Original error was: No module named 'numpy._core._multiarray_umath'
[  104s]
[  104s]
[  104s]   The above exception was the direct cause of the following exception:
[  104s]
[  104s]   Traceback (most recent call last):
[  104s]     File "<frozen runpy>", line 189, in _run_module_as_main
[  104s]     File "<frozen runpy>", line 112, in _get_module_details
[  104s]     File "/usr/lib/hpc/gnu13/python-numpy/2.0.0~rc1/lib64/python3.10/site-packages/numpy/__init__.py", line 119, in <module>
[  104s]       raise ImportError(msg) from e
[  104s]   ImportError: Error importing numpy: you should not try to import numpy from
[  104s]           its source directory; please exit the numpy source tree, and relaunch
[  104s]           your python interpreter from there.
[  104s]


# The docker reproducer:


Processing /scipy-1.13.0
  Running command Preparing metadata (pyproject.toml)
  + meson setup /scipy-1.13.0 /scipy-1.13.0/.mesonpy-oavlll2e -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/scipy-1.13.0/.mesonpy-oavlll2e/meson-python-native-file.ini
  The Meson build system
  Version: 1.4.0
  Source dir: /scipy-1.13.0
  Build dir: /scipy-1.13.0/.mesonpy-oavlll2e
  Build type: native build
  Project name: scipy
  Project version: 1.13.0
  C compiler for the host machine: cc (gcc 13.2.1 "cc (SUSE Linux) 13.2.1 20240206 [revision 67ac78caf31f7cb3202177e6428a46d829b70f23]")
  C linker for the host machine: cc ld.bfd 2.42.0.20240130-2
  C++ compiler for the host machine: c++ (gcc 13.2.1 "c++ (SUSE Linux) 13.2.1 20240206 [revision 67ac78caf31f7cb3202177e6428a46d829b70f23]")
  C++ linker for the host machine: c++ ld.bfd 2.42.0.20240130-2
  Cython compiler for the host machine: cython (cython 3.0.10)
  Host machine cpu family: x86_64
  Host machine cpu: x86_64
  Program python found: YES (/usr/bin/python3.12)
  Found pkg-config: YES (/usr/bin/pkg-config) 2.1.1
  Run-time dependency python found: YES 3.12
  Program cython found: YES (/usr/bin/cython)
  Compiler for C supports arguments -Wno-unused-but-set-variable: YES
  Compiler for C supports arguments -Wno-unused-function: YES
  Compiler for C supports arguments -Wno-conversion: YES
  Compiler for C supports arguments -Wno-misleading-indentation: YES
  Library m found: YES
  Fortran compiler for the host machine: gfortran (gcc 13.2.1 "GNU Fortran (SUSE Linux) 13.2.1 20240206 [revision 67ac78caf31f7cb3202177e6428a46d829b70f23]")
  Fortran linker for the host machine: gfortran ld.bfd 2.42.0.20240130-2
  Compiler for Fortran supports arguments -Wno-conversion: YES
  Checking if "-Wl,--version-script" : links: YES
  Program tools/generate_f2pymod.py found: YES (/usr/bin/python3.11 /scipy-1.13.0/tools/generate_f2pymod.py)
  Program scipy/_build_utils/tempita.py found: YES (/usr/bin/python3.11 /scipy-1.13.0/scipy/_build_utils/tempita.py)

[162/1475] Generating scipy/linalg/fblas_module with a custom command
  FAILED: scipy/linalg/_fblasmodule.c
  /usr/bin/python3.11 /scipy-1.13.0/tools/generate_f2pymod.py ../scipy/linalg/fblas.pyf.src -o scipy/linalg
  Traceback (most recent call last):
    File "/scipy-1.13.0/tools/generate_f2pymod.py", line 299, in <module>
      main()
    File "/scipy-1.13.0/tools/generate_f2pymod.py", line 293, in main
      raise RuntimeError(f"Processing {fname_pyf} with f2py failed!\n"
  RuntimeError: Processing scipy/linalg/fblas.pyf with f2py failed!

  /usr/bin/python3.11: Error while finding module specification for 'numpy.f2py' (ModuleNotFoundError: No module named 'numpy')

  [163/1475] Generating scipy/linalg/flapack_module with a custom command
  FAILED: scipy/linalg/_flapackmodule.c
  /usr/bin/python3.11 /scipy-1.13.0/tools/generate_f2pymod.py ../scipy/linalg/flapack.pyf.src -o scipy/linalg
  Traceback (most recent call last):
    File "/scipy-1.13.0/tools/generate_f2pymod.py", line 299, in <module>
      main()
    File "/scipy-1.13.0/tools/generate_f2pymod.py", line 293, in main
      raise RuntimeError(f"Processing {fname_pyf} with f2py failed!\n"
  RuntimeError: Processing scipy/linalg/flapack.pyf with f2py failed!

  /usr/bin/python3.11: Error while finding module specification for 'numpy.f2py' (ModuleNotFoundError: No module named 'numpy')

SciPy/NumPy/Python version and system information

Scipy: 1.13.0 sdist from PyPI
Numpy: 2.0.0rc1 (Same failure with 1.26.4)

sys.version_info(major=3, minor=10, micro=14, releaselevel='final', serial=0)

scipy.show_config(): N/A (build failure)

EDIT: this bug exists only in scipy 1.13.0; it was fixed in 1.13.1 by reverting the problematic change, and the milestone of this issue is set to 1.14.0 for a different structural fix.

@bnavigator bnavigator added the defect A clear bug or issue that prevents SciPy from being installed or used as expected label Apr 20, 2024
@lucascolley
Copy link
Member

are you aware of a good alternative? What is there, other than removing the shebang and forcing people to use the python command?

@bnavigator
Copy link
Contributor Author

bnavigator commented Apr 20, 2024

I guess it is okay for people to use the shebang instead of using python generate_f2pymod.py. But the meson build should not do that on it's own.

Ideas:

@lucascolley
Copy link
Member

cc @rgommers

@bnavigator
Copy link
Contributor Author

bnavigator commented Apr 20, 2024

Hmm, when omitting the --no-build-isolation, meson actually does the right thing:

python3.12 -m pip -v wheel .
...
  Installing collected packages: ply, setuptools, pybind11, packaging, numpy, meson, gast, Cython, pyproject-metadata, beniget, pythran, meson-python
  Successfully installed Cython-3.0.10 beniget-0.4.1 gast-0.5.4 meson-1.4.0 meson-python-0.16.0 numpy-2.0.0rc1 packaging-24.0 ply-3.11 pybind11-2.12.0 pyproject-metadata-0.8.0 pythran-0.15.0 setuptools-69.5.1
...
  Running command Preparing metadata (pyproject.toml)
  + meson setup /scipy-1.13.0 /scipy-1.13.0/.mesonpy-wrowlhu5 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/scipy-1.13.0/.mesonpy-wrowlhu5/meson-python-native-file.ini
...
  Program python found: YES (/usr/bin/python3.12)
...
  Program tools/generate_f2pymod.py found: YES (/usr/bin/python3.12 /scipy-1.13.0/tools/generate_f2pymod.py)

Related: mesonbuild/meson-python#23

Edit: See #20535 (comment)

@rgommers rgommers added the Build issues Issues with building from source, including different choices of architecture, compilers and OS label Apr 20, 2024
@rgommers rgommers added this to the 1.13.1 milestone Apr 20, 2024
@rgommers
Copy link
Member

Ah, sorry about that - that's a regression indeed. For code generation scripts that don't need numpy/cython, the shebang is preferred. But for these cases that's wrong indeed.

That part of gh-20121 should be reverted. I'd like to think a bit more about:

  • whether to add a generator for f2py, so that the py3 doesn't need to be copied everywhere,
  • if it's possible to use the build (native) Python with f2py/cython rather than the host (cross) Python. Perhaps by invoking f2py rather than python -m f2py.

rgommers added a commit to rgommers/scipy that referenced this issue Apr 24, 2024
This is an unmodified copy from `Cython/Tempita/` as of commit
`023d4af35` in Cython's master branch (21 April 2024).
Tempita hasn't been maintained independently on PyPI for 10+ years;
we've used the Cython version which is semi-public (undocumented)
for a while, with the note that we should vendor it if that ever
fails. It now failed once (see scipy#20535), and conceptually that
makes sense - this is the only place where we don't invoke the
`cython` executable but actually do `import Cython`. That can fail
in a distro setup where Cython is installed for a different Python
interpreter than the active one.
@rgommers
Copy link
Member

I opened gh-20567 to revert the changes for 1.13.1. And gh-20572 to address the Tempita/Cython part of this issue better in main. The last part of this is dealing with f2py.

rgommers added a commit to rgommers/scipy that referenced this issue Apr 25, 2024
This is an unmodified copy from `Cython/Tempita/` as of commit
`023d4af35` in Cython's master branch (21 April 2024).
Tempita hasn't been maintained independently on PyPI for 10+ years;
we've used the Cython version which is semi-public (undocumented)
for a while, with the note that we should vendor it if that ever
fails. It now failed once (see scipy#20535), and conceptually that
makes sense - this is the only place where we don't invoke the
`cython` executable but actually do `import Cython`. That can fail
in a distro setup where Cython is installed for a different Python
interpreter than the active one.

The license file was taken over from the `maintenance/1.26.x` branch
in the `numpy` repo - which came from the original upstream repo
for Tempita (now disappeared) as discussed in numpy#8096.
See scipy#20572 for more clarification about the MIT license that
this code is under.
@rgommers rgommers modified the milestones: 1.13.1, 1.14.0 Apr 29, 2024
@rgommers rgommers self-assigned this Apr 29, 2024
@rgommers
Copy link
Member

The last part of this is dealing with f2py.

In progress in gh-20612.

@rgommers
Copy link
Member

rgommers commented May 3, 2024

Using a #!/usr/bin/env python3 shebang so that at least builds inside a venv do not use the system python3

We can use the system python3 for many build scripts, as long as they don't need anything more than what's in the stdlib of the lowest Python version we support. I think I got this right in gh-20612 at long last. The logic is:

  • Every standalone build script should have a #!/usr/bin/env python3 shebang, and not use anything outside of the stdlib
  • Build scripts should be invoked directly in custom_target/run_command, so command: ['a_script.py', ...] and not command: [py3, 'a_script.py', ...]
  • Cython must only be used by invoking the cython executable
  • numpy.f2py must only be used by invoking the f2py executable
  • the only remaining usages of run_command(py3 are for checking include directories for numpy and pythran; those are only fallback paths and will be phased out completely
  • no other usages of the Python interpreter we are building for are allowed in meson.build files or scripts invoked from meson.build files

@bnavigator
Copy link
Contributor Author

bnavigator commented May 3, 2024

This is sound reasoning. I am not sure how meson and meson-python interfere with it, though. They seem to mangle some of the interpreter calls. Otherwise #20535 (comment) would not have found to call generate_f2pymod.py with /usr/bin/python3.12.

Edit: See #20535 (comment)

@rgommers
Copy link
Member

rgommers commented May 3, 2024

I don't think that they are interfering. What happened there is that I only applied the above rules partially before, so inside generate_f2pymod.py there was a python3 shebang and it was importing numpy.f2py. Which happened to work when meson was installed in the same env as meson-python and numpy, but not if it was in the default interpreter's env. Or something like that.

The added CI job in gh-20612 replicated the exact error you were reporting here, and it was because of the config I summarized here. Once the rules in my comment above were applied, the error went away because the f2py executable always works where python3 -m numpy.f2py doesn't work for the wrong python3 interpreter.

@bnavigator
Copy link
Contributor Author

What happened there is that I only applied the above rules partially before, so inside generate_f2pymod.py there was a python3 shebang and it was importing numpy.f2py

But how did it go from the #!/usr/bin/python3 hashbang, with /usr/bin/python3 -> python3.11, and find_program('tools/generate_f2pymod.py') to found: YES (/usr/bin/python3.12 /scipy-1.13.0/tools/generate_f2pymod.py) when calling python3.12 -m pip wheel ?

@rgommers
Copy link
Member

rgommers commented May 3, 2024

It wasn't using the shebang. The current version in main (before gh-20612) is explicitly running py3 generate_f2pymod.py, where py3 is the interpreter we are building for. Which is python3.12 in your reproducer.

@bnavigator
Copy link
Contributor Author

The current version in main (before gh-20612) is explicitly running py3 generate_f2pymod.py

How is that?

From main:

generate_f2pymod = find_program('tools/generate_f2pymod.py')

#!/usr/bin/env python3

https://mesonbuild.com/Reference-manual_functions.html#find_program

Meson will also autodetect scripts with a shebang line and run them with the executable/interpreter specified in it both on Windows (because the command invocator will reject the command otherwise) and Unixes (if the script file does not have the executable bit set).

Please don't get me wrong. I am happy that it works, but I want to understand.

(See also mesonbuild/meson-python#51)

@bnavigator
Copy link
Contributor Author

I got it. The shebang was never #!/usr/bin/python3. Of course #!/usr/bin/env python3 resolves to the interpreter of the build venv when not running non-isolated.

@rgommers
Copy link
Member

rgommers commented May 3, 2024

Good catch, that makes sense as the difference between build isolation on/off.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Build issues Issues with building from source, including different choices of architecture, compilers and OS defect A clear bug or issue that prevents SciPy from being installed or used as expected
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants
@rgommers @bnavigator @lucascolley and others