py-numpy: add v1.26 (#40057)

This commit is contained in:
Adam J. Stewart 2023-10-28 06:17:32 -05:00 committed by GitHub
parent 148dce96ed
commit a1d3e0002c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 202 additions and 156 deletions

View file

@ -26,5 +26,5 @@ class DxtExplorer(PythonPackage):
depends_on("darshan-util", type=("run"))
depends_on("python@3.6:", type=("build", "run"))
depends_on("py-setuptools", type="build")
depends_on("py-pandas", type=("build", "run"))

View file

@ -35,7 +35,7 @@ class PyGpaw(PythonPackage):
depends_on("py-ase@3.19.0:", type=("build", "run"), when="@20.1.0")
depends_on("py-ase@3.20.1:", type=("build", "run"), when="@20.10.0")
depends_on("py-ase@3.21.0:", type=("build", "run"), when="@21.1.0")
depends_on("py-numpy +blas +lapack", type=("build", "run"))
depends_on("py-numpy", type=("build", "run"))
depends_on("py-scipy", type=("build", "run"))
depends_on("libxc@3:4.3.4")
depends_on("blas")

View file

@ -5,16 +5,13 @@
import platform
import subprocess
from typing import Tuple
from spack.package import *
class PyNumpy(PythonPackage):
"""NumPy is the fundamental package for scientific computing with Python.
It contains among other things: a powerful N-dimensional array object,
sophisticated (broadcasting) functions, tools for integrating C/C++ and
Fortran code, and useful linear algebra, Fourier transform, and random
number capabilities"""
"""Fundamental package for array computing in Python."""
homepage = "https://numpy.org/"
pypi = "numpy/numpy-1.23.0.tar.gz"
@ -23,6 +20,8 @@ class PyNumpy(PythonPackage):
maintainers("adamjstewart", "rgommers")
version("main", branch="main")
version("1.26.1", sha256="c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe")
version("1.26.0", sha256="f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf")
version("1.25.2", sha256="fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760")
version("1.25.1", sha256="9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf")
version("1.25.0", sha256="f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19")
@ -87,11 +86,8 @@ class PyNumpy(PythonPackage):
version("1.14.6", sha256="1250edf6f6c43e1d7823f0967416bc18258bb271dc536298eb0ea00a9e45b80a")
version("1.14.5", sha256="a4a433b3a264dbc9aa9c7c241e87c0358a503ea6394f8737df1683c7c9a102ac")
variant("blas", default=True, description="Build with BLAS support")
variant("lapack", default=True, description="Build with LAPACK support")
# Based on wheel availability on PyPI
depends_on("python@3.9:3.11", when="@1.25:", type=("build", "link", "run"))
depends_on("python@3.9:3.12", when="@1.26:", type=("build", "link", "run"))
depends_on("python@3.9:3.11", when="@1.25", type=("build", "link", "run"))
depends_on("python@3.8:3.11", when="@1.23.2:1.24", type=("build", "link", "run"))
depends_on("python@3.8:3.10", when="@1.22:1.23.1", type=("build", "link", "run"))
depends_on("python@:3.10", when="@1.21.2:1.21", type=("build", "link", "run"))
@ -99,19 +95,30 @@ class PyNumpy(PythonPackage):
depends_on("python@:3.8", when="@1.17.3:1.19.2", type=("build", "link", "run"))
depends_on("python@:3.7", when="@1.14.5:1.17.2", type=("build", "link", "run"))
depends_on("py-cython@0.29.34:3", when="@1.26:", type="build")
depends_on("py-cython@0.29.34:2", when="@1.25", type="build")
depends_on("py-cython@0.29.30:2", when="@1.22.4:1.24", type="build")
depends_on("py-cython@0.29.24:2", when="@1.21.2:1.22.3", type="build")
depends_on("py-cython@0.29.21:2", when="@1.19.1:1.21.1", type="build")
depends_on("py-cython@0.29.14:2", when="@1.18.1:1.19.0", type="build")
depends_on("py-cython@0.29.13:2", when="@1.18.0", type="build")
depends_on("py-pyproject-metadata@0.7.1:", when="@1.26:", type="build")
depends_on("py-tomli@1:", when="@1.26: ^python@:3.10", type="build")
depends_on("py-setuptools@60:", when="@1.26: ^python@3.12:", type="build")
# https://github.com/spack/spack/pull/32078
depends_on("py-setuptools@:63", type=("build", "run"))
depends_on("py-setuptools@:63", when="@:1.25", type=("build", "run"))
depends_on("py-setuptools@:59", when="@:1.22.1", type=("build", "run"))
# Check pyproject.toml for updates to the required cython version
depends_on("py-cython@0.29.34:2", when="@1.25:", type="build")
depends_on("py-cython@0.29.13:2", when="@1.18.0:", type="build")
depends_on("py-cython@0.29.14:2", when="@1.18.1:", type="build")
depends_on("py-cython@0.29.21:2", when="@1.19.1:", type="build")
depends_on("py-cython@0.29.24:2", when="@1.21.2:", type="build")
depends_on("py-cython@0.29.30:2", when="@1.22.4:", type="build")
depends_on("blas", when="+blas")
depends_on("lapack", when="+lapack")
depends_on("py-colorama", when="@1.26: platform=windows", type="build")
# Required to use --config-settings
depends_on("py-pip@23.1:", when="@1.26:", type="build")
# meson is vendored, ninja and pkgconfig are not
depends_on("ninja@1.8.2:", when="@1.26:", type="build")
depends_on("pkgconfig", when="@1.26:", type="build")
depends_on("blas")
depends_on("lapack")
# test_requirements.txt
depends_on("py-nose@1.0.0:", when="@:1.14", type="test")
depends_on("py-pytest", when="@1.15:", type="test")
depends_on("py-hypothesis", when="@1.19:", type="test")
@ -145,13 +152,21 @@ class PyNumpy(PythonPackage):
when="@1.22.0:1.22.3",
)
# version 1.21.0 runs into an infinit loop during printing
# meson.build
# https://docs.scipy.org/doc/scipy/dev/toolchain.html#compilers
conflicts("%gcc@:8.3", when="@1.26:", msg="NumPy requires GCC >= 8.4")
conflicts("%gcc@:4.7", msg="NumPy requires GCC >= 4.8")
conflicts(
"%msvc@:19.19",
when="@1.26:",
msg="NumPy requires at least vc142 (default with Visual Studio 2019) "
"when building with MSVC",
)
# version 1.21.0 runs into an infinite loop during printing
# (e.g. print(numpy.ones(1000)) when compiled with gcc 11
conflicts("%gcc@11:", when="@1.21.0")
# GCC 4.8 is the minimum version that works
conflicts("%gcc@:4.7", msg="GCC 4.8+ required")
# NVHPC support added in https://github.com/numpy/numpy/pull/17344
conflicts("%nvhpc", when="@:1.19")
@ -159,6 +174,10 @@ class PyNumpy(PythonPackage):
conflicts("%intel", when="@1.23.0:1.23.3")
conflicts("%oneapi", when="@1.23.0:1.23.3")
@property
def archive_files(self):
return [join_path(self.stage.source_path, "build", "meson-logs", "meson-log.txt")]
def url_for_version(self, version):
url = "https://files.pythonhosted.org/packages/source/n/numpy/numpy-{}.{}"
if version >= Version("1.23"):
@ -193,16 +212,68 @@ def flag_handler(self, name, flags):
return (flags, None, None)
@run_before("install")
def set_blas_lapack(self):
# https://numpy.org/devdocs/user/building.html
# https://github.com/numpy/numpy/blob/master/site.cfg.example
def blas_lapack_pkg_config(self) -> Tuple[str, str]:
"""Convert library names to pkg-config names.
# Skip if no BLAS/LAPACK requested
Returns:
The names of the blas and lapack libs that pkg-config should search for.
"""
spec = self.spec
if "+blas" not in spec and "+lapack" not in spec:
return
blas = spec["blas"].libs.names[0]
lapack = spec["lapack"].libs.names[0]
if spec["blas"].name in ["intel-mkl", "intel-parallel-studio", "intel-oneapi-mkl"]:
blas = "mkl-dynamic-lp64-seq"
if spec["lapack"].name in ["intel-mkl", "intel-parallel-studio", "intel-oneapi-mkl"]:
lapack = "mkl-dynamic-lp64-seq"
if spec["blas"].name in ["blis", "amdblis"]:
blas = "blis"
if spec["blas"].name == "cray-libsci":
blas = "libsci"
if spec["lapack"].name == "cray-libsci":
lapack = "libsci"
if "armpl" in blas:
if "_mp" in blas:
blas = "armpl-dynamic-lp64-omp"
else:
blas = "armpl-dynamic-lp64-seq"
if "armpl" in lapack:
if "_mp" in lapack:
lapack = "armpl-dynamic-lp64-omp"
else:
lapack = "armpl-dynamic-lp64-seq"
return blas, lapack
@when("@1.26:")
def config_settings(self, spec, prefix):
blas, lapack = self.blas_lapack_pkg_config()
return {
"builddir": "build",
"compile-args": f"-j{make_jobs}",
"setup-args": {
# https://scipy.github.io/devdocs/building/blas_lapack.html
"-Dblas": blas,
"-Dlapack": lapack,
# https://numpy.org/doc/stable/reference/simd/build-options.html
# TODO: get this working in CI
# "-Dcpu-baseline": "native",
# "-Dcpu-dispatch": "none",
},
}
def blas_lapack_site_cfg(self) -> None:
"""Write a site.cfg file to configure BLAS/LAPACK."""
spec = self.spec
# https://numpy.org/doc/1.25/user/building.html
# https://github.com/numpy/numpy/blob/v1.25.2/site.cfg.example
def write_library_dirs(f, dirs):
f.write("library_dirs = {0}\n".format(dirs))
if not (
@ -211,17 +282,11 @@ def write_library_dirs(f, dirs):
):
f.write("rpath = {0}\n".format(dirs))
blas_libs = LibraryList([])
blas_headers = HeaderList([])
if "+blas" in spec:
blas_libs = spec["blas"].libs
blas_headers = spec["blas"].headers
blas_libs = spec["blas"].libs
blas_headers = spec["blas"].headers
lapack_libs = LibraryList([])
lapack_headers = HeaderList([])
if "+lapack" in spec:
lapack_libs = spec["lapack"].libs
lapack_headers = spec["lapack"].headers
lapack_libs = spec["lapack"].libs
lapack_headers = spec["lapack"].headers
lapackblas_libs = lapack_libs + blas_libs
lapackblas_headers = lapack_headers + blas_headers
@ -334,15 +399,25 @@ def write_library_dirs(f, dirs):
write_library_dirs(f, lapack_lib_dirs)
f.write("include_dirs = {0}\n".format(lapack_header_dirs))
@when("@:1.25")
@run_before("install")
def set_blas_lapack(self):
self.blas_lapack_site_cfg()
@when("@1.26:")
def setup_build_environment(self, env):
# https://github.com/scipy/scipy/issues/19357
if self.spec.satisfies("%apple-clang@15:"):
env.append_flags("LDFLAGS", "-Wl,-ld_classic")
@when("@:1.25")
def setup_build_environment(self, env):
# Tell numpy which BLAS/LAPACK libraries we want to use.
# https://github.com/numpy/numpy/pull/13132
# https://numpy.org/devdocs/user/building.html#accelerated-blas-lapack-libraries
spec = self.spec
# https://numpy.org/devdocs/user/building.html#blas
if "blas" not in spec:
blas = ""
elif (
# https://github.com/numpy/numpy/pull/13132
# https://numpy.org/doc/1.25/user/building.html#accelerated-blas-lapack-libraries
# https://numpy.org/doc/1.25/user/building.html#blas
if (
spec["blas"].name == "intel-mkl"
or spec["blas"].name == "intel-parallel-studio"
or spec["blas"].name == "intel-oneapi-mkl"
@ -361,10 +436,8 @@ def setup_build_environment(self, env):
env.set("NPY_BLAS_ORDER", blas)
# https://numpy.org/devdocs/user/building.html#lapack
if "lapack" not in spec:
lapack = ""
elif (
# https://numpy.org/doc/1.25/user/building.html#lapack
if (
spec["lapack"].name == "intel-mkl"
or spec["lapack"].name == "intel-parallel-studio"
or spec["lapack"].name == "intel-oneapi-mkl"

View file

@ -15,6 +15,8 @@ class PyPip(Package, PythonExtension):
url = "https://files.pythonhosted.org/packages/py3/p/pip/pip-20.2-py3-none-any.whl"
list_url = "https://pypi.org/simple/pip/"
tags = ["build-tools"]
maintainers("adamjstewart", "pradyunsg")
version(

View file

@ -41,7 +41,7 @@ class PyPyfr(PythonPackage, CudaPackage, ROCmPackage):
depends_on("py-h5py@2.10:", type=("build", "run"))
depends_on("py-mako@1.0.0:", type=("build", "run"))
depends_on("py-mpi4py@3.1.0:", type=("build", "run"))
depends_on("py-numpy@1.20:+blas", type=("build", "run"))
depends_on("py-numpy@1.20:", type=("build", "run"))
depends_on("py-platformdirs@2.2.0:", type=("build", "run"))
depends_on("py-pytools@2016.2.1:", type=("build", "run"))

View file

@ -45,6 +45,9 @@ class PyPyzmq(PythonPackage):
# pyproject.toml
depends_on("py-setuptools", type="build")
# https://github.com/zeromq/pyzmq/issues/1278
# https://github.com/zeromq/pyzmq/pull/1317
depends_on("py-setuptools@:59", when="@17:18.0", type="build")
depends_on("py-packaging", type="build")
# setup.py

View file

@ -3,16 +3,11 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import glob
import os
from spack.package import *
class PyScipy(PythonPackage):
"""SciPy (pronounced "Sigh Pie") is a Scientific Library for Python.
It provides many user-friendly and efficient numerical routines such
as routines for numerical integration and optimization."""
"""Fundamental algorithms for scientific computing in Python."""
homepage = "https://www.scipy.org/"
pypi = "scipy/scipy-1.10.1.tar.gz"
@ -20,7 +15,9 @@ class PyScipy(PythonPackage):
maintainers("adamjstewart", "rgommers")
version("master", branch="master")
version("main", branch="main")
version("master", branch="master", deprecated=True)
version("1.11.3", sha256="bba4d955f54edd61899776bad459bf7326e14b9fa1c552181f0479cc60a568cd")
version("1.11.2", sha256="b29318a5e39bd200ca4381d80b065cdf3076c7d7281c5e36569e99273867f61d")
version("1.11.1", sha256="fb5b492fa035334fd249f0973cc79ecad8b09c604b42a127a677b45a9a3d4289")
version("1.11.0", sha256="f9b0248cb9d08eead44cde47cbf6339f1e9aa0dfde28f5fb27950743e317bd5d")
@ -65,22 +62,18 @@ class PyScipy(PythonPackage):
depends_on("python@:3.8", when="@1.3.2:1.5.3", type=("build", "link", "run"))
depends_on("python@:3.7", when="@1.1:1.3.1", type=("build", "link", "run"))
# TODO: remove once pip build supports BLAS/LAPACK specification
# https://github.com/mesonbuild/meson-python/pull/167
depends_on("py-build", when="@1.9:", type="build")
depends_on("py-meson-python@0.12.1:0.13", when="@1.11:", type="build")
depends_on("py-meson-python@0.11:0.12", when="@1.10.1:1.10", type="build")
depends_on("py-meson-python@0.11", when="@1.10.0", type="build")
depends_on("py-meson-python@0.9:", when="@1.9.2:1.9", type="build")
depends_on("py-meson-python@0.8.1:", when="@1.9.1", type="build")
depends_on("py-meson-python@0.7", when="@1.9.0", type="build")
depends_on("meson@0.62.2", when="@1.9.0:1.9.1", type="build")
depends_on("py-meson-python@0.12.1:", when="@1.11:", type="build")
depends_on("py-meson-python@0.11:", when="@1.10:", type="build")
depends_on("py-meson-python@0.9:", when="@1.9.2:", type="build")
depends_on("py-meson-python@0.8.1:", when="@1.9.1:", type="build")
depends_on("py-meson-python@0.7:", when="@1.9:", type="build")
depends_on("meson", when="@1.9.0:1.9.1", type="build")
depends_on("py-cython@0.29.35:2", when="@1.11:", type="build")
depends_on("py-cython@0.29.32:2", when="@1.9.2:", type="build")
depends_on("py-cython@0.29.21:2", when="@1.9:", type="build")
depends_on("py-cython@0.29.18:2", when="@1.7:", type="build")
depends_on("py-pybind11@2.10.4:2.10", when="@1.11:", type=("build", "link"))
depends_on("py-pybind11@2.10.4:2.11.0", when="@1.11.3:", type=("build", "link"))
depends_on("py-pybind11@2.10.4:2.10", when="@1.11.0:1.11.2", type=("build", "link"))
depends_on("py-pybind11@2.10.1", when="@1.10", type=("build", "link"))
depends_on("py-pybind11@2.4.3:2.10", when="@1.9.1:1.9", type=("build", "link"))
depends_on("py-pybind11@2.4.3:2.9", when="@1.9.0", type=("build", "link"))
@ -90,14 +83,11 @@ class PyScipy(PythonPackage):
depends_on("py-pybind11@2.4.3:", when="@1.5:1.6.1", type=("build", "link"))
depends_on("py-pybind11@2.4.0:", when="@1.4.1:1.4", type=("build", "link"))
depends_on("py-pybind11@2.2.4:", when="@1.4.0", type=("build", "link"))
depends_on("py-pythran@0.12:0.13", when="@1.11:", type="build")
depends_on("py-pythran@0.12", when="@1.10", type="build")
depends_on("py-pythran@0.9.12:0.12", when="@1.9.2:1.9", type="build")
depends_on("py-pythran@0.9.12:0.11", when="@1.9.0:1.9.1", type="build")
depends_on("py-pythran@0.10", when="@1.8", type="build")
depends_on("py-pythran@0.9.12:0.9", when="@1.7.2:1.7", type="build")
depends_on("py-pythran@0.9.11", when="@1.7.0:1.7.1", type="build")
depends_on("py-wheel@:0.40", when="@1.11:", type="build")
depends_on("py-pythran@0.12:", when="@1.10:", type="build")
depends_on("py-pythran@0.10:", when="@1.8", type="build")
depends_on("py-pythran@0.9.12:", when="@1.7.2:", type="build")
depends_on("py-pythran@0.9.11:", when="@1.7:", type="build")
depends_on("py-wheel@:0.40", when="@1.11.0:1.11.2", type="build")
depends_on("py-wheel@:0.38", when="@1.10", type="build")
depends_on("py-wheel@:0.37", when="@:1.9", type="build")
depends_on("pkgconfig", when="@1.9:", type="build")
@ -105,43 +95,53 @@ class PyScipy(PythonPackage):
depends_on("py-setuptools@:59", when="@1.8", type="build")
depends_on("py-setuptools@:57", when="@1.7", type="build")
depends_on("py-setuptools@:51.0.0", when="@1.6", type="build")
depends_on("py-numpy@1.21.6:1.27+blas+lapack", when="@1.11:", type=("build", "link", "run"))
depends_on("py-numpy@1.19.5:1.26+blas+lapack", when="@1.10", type=("build", "link", "run"))
depends_on("py-numpy@1.18.5:1.25+blas+lapack", when="@1.9", type=("build", "link", "run"))
depends_on("py-numpy@1.17.3:1.24+blas+lapack", when="@1.8", type=("build", "link", "run"))
depends_on(
"py-numpy@1.16.5:1.22+blas+lapack", when="@1.6.2:1.7", type=("build", "link", "run")
)
depends_on("py-numpy@1.16.5:+blas+lapack", when="@1.6:1.6.1", type=("build", "link", "run"))
depends_on("py-numpy@1.14.5:+blas+lapack", when="@1.5.0:1.5", type=("build", "link", "run"))
depends_on("py-numpy@1.13.3:+blas+lapack", when="@1.3:1.4", type=("build", "link", "run"))
depends_on("py-numpy@1.8.2:+blas+lapack", when="@:1.2", type=("build", "link", "run"))
depends_on("py-numpy@1.21.6:1.27", when="@1.11:", type=("build", "link", "run"))
depends_on("py-numpy@1.19.5:1.26", when="@1.10", type=("build", "link", "run"))
depends_on("py-numpy@1.18.5:1.25", when="@1.9", type=("build", "link", "run"))
depends_on("py-numpy@1.17.3:1.24", when="@1.8", type=("build", "link", "run"))
depends_on("py-numpy@1.16.5:1.22", when="@1.6:1.7", type=("build", "link", "run"))
depends_on("py-numpy@1.14.5:1.21", when="@1.5", type=("build", "link", "run"))
depends_on("py-numpy@1.13.3:1.21", when="@1.3:1.4", type=("build", "link", "run"))
depends_on("py-numpy@1.8.2:1.20", when="@:1.2", type=("build", "link", "run"))
depends_on("py-pytest", type="test")
# NOTE: scipy should use the same BLAS/LAPACK as numpy.
# For scipy 1.8 and older, this is achieved by calling the set_blas_lapack()
# and setup_build_environment() from numpy in the scipy spec.
depends_on("blas")
depends_on("lapack")
# Required to use --config-settings
depends_on("py-pip@23.1:", when="@1.9:", type="build")
# https://docs.scipy.org/doc/scipy/dev/toolchain.html#other-libraries
depends_on("lapack@3.7.1:", when="@1.9:")
depends_on("lapack@3.4.1:", when="@1.2:")
depends_on("lapack")
depends_on("blas")
# meson.build
# https://docs.scipy.org/doc/scipy/dev/toolchain.html#compilers
conflicts("%gcc@:7", when="@1.10:")
conflicts("%gcc@:4.7", when="@:1.9")
conflicts("%apple-clang@:9", when="@1.10:")
conflicts("%msvc@:19.19", when="@1.10:")
conflicts("%gcc@:7", when="@1.10:", msg="SciPy requires GCC >= 8.0")
conflicts("%gcc@:4.7", when="@:1.9", msg="SciPy requires GCC >= 4.8")
conflicts(
"%msvc@:19.19",
when="@1.10:",
msg="SciPy requires at least vc142 (default with Visual Studio 2019) "
"when building with MSVC",
)
# https://github.com/scipy/scipy/pull/11324
conflicts("@1.4.0:1.4.1", when="target=ppc64le:")
# https://github.com/scipy/scipy/issues/19352
conflicts("^py-cython@3.0.3")
# https://github.com/mesonbuild/meson/pull/10909#issuecomment-1282241479
# Intel OneAPI ifx claims to support -fvisibility, but this does not work.
# Meson adds this flag for all Python extensions which include Fortran code.
conflicts("%oneapi@:2023.0", when="@1.9:")
# error: expected unqualified-id (exact compiler versions unknown)
conflicts("%apple-clang@15:", when="@:1.9")
# https://docs.scipy.org/doc//scipy-1.10.1/release.1.7.3.html
conflicts("platform=darwin target=aarch64:", when="@:1.7.2")
# https://github.com/scipy/scipy/pull/11324
conflicts("@1.4.0:1.4.1", when="target=ppc64le:")
# https://github.com/scipy/scipy/issues/12860
patch(
"https://git.sagemath.org/sage.git/plain/build/pkgs/scipy/patches/extern_decls.patch?id=711fe05025795e44b84233e065d240859ccae5bd",
@ -155,12 +155,6 @@ class PyScipy(PythonPackage):
def archive_files(self):
return [join_path(self.stage.source_path, "build", "meson-logs", "meson-log.txt")]
@run_before("install")
def set_blas_lapack(self):
# Pick up BLAS/LAPACK from numpy
if self.spec.satisfies("@:1.8"):
self.spec["py-numpy"].package.set_blas_lapack()
@run_before("install")
def set_fortran_compiler(self):
if self.compiler.f77 is None or self.compiler.fc is None:
@ -200,53 +194,27 @@ def setup_build_environment(self, env):
if self.spec.satisfies("@:1.8"):
self.spec["py-numpy"].package.setup_build_environment(env)
# TODO: remove once pip build supports BLAS/LAPACK specification
# https://github.com/mesonbuild/meson-python/pull/167
@when("@1.9:")
def install(self, spec, prefix):
blas = spec["blas"].libs.names[0]
lapack = spec["lapack"].libs.names[0]
if spec["blas"].name in ["intel-mkl", "intel-parallel-studio", "intel-oneapi-mkl"]:
blas = "mkl-dynamic-lp64-seq"
if spec["lapack"].name in ["intel-mkl", "intel-parallel-studio", "intel-oneapi-mkl"]:
lapack = "mkl-dynamic-lp64-seq"
if spec["blas"].name in ["blis", "amdblis"]:
blas = "blis"
if "armpl" in blas:
if "_mp" in blas:
blas = "armpl-dynamic-lp64-omp"
else:
blas = "armpl-dynamic-lp64-seq"
if "armpl" in lapack:
if "_mp" in lapack:
lapack = "armpl-dynamic-lp64-omp"
else:
lapack = "armpl-dynamic-lp64-seq"
# https://github.com/scipy/scipy/issues/19357
if self.spec.satisfies("%apple-clang@15:"):
env.append_flags("LDFLAGS", "-Wl,-ld_classic")
args = [
"setup",
"build",
"-Dblas=" + blas,
"-Dlapack=" + lapack,
"--prefix=" + join_path(os.getcwd(), "build-install"),
"-Ddebug=false",
"-Doptimization=2",
]
meson = which("meson")
meson(*args)
args = [
"-m",
"build",
"--wheel",
"-Cbuilddir=build",
"--no-isolation",
"--skip-dependency-check",
"-Ccompile-args=-j%s" % make_jobs,
".",
]
python(*args)
args = std_pip_args + ["--prefix=" + prefix, glob.glob(join_path("dist", "scipy*.whl"))[0]]
pip(*args)
@when("@1.9:")
def config_settings(self, spec, prefix):
blas, lapack = self.spec["py-numpy"].package.blas_lapack_pkg_config()
return {
"builddir": "build",
"compile-args": f"-j{make_jobs}",
"setup-args": {
# http://scipy.github.io/devdocs/building/blas_lapack.html
"-Dblas": blas,
"-Dlapack": lapack,
},
}
@when("@:1.8")
@run_before("install")
def set_blas_lapack(self):
self.spec["py-numpy"].package.blas_lapack_site_cfg()
@run_after("install")
@on_package_attributes(run_tests=True)

View file

@ -34,7 +34,7 @@ class PyTomopy(PythonPackage):
# Note: The module name of py-scikit-build is skbuild:
depends_on("py-scikit-build", type=("build"))
depends_on("py-scikit-image@0.17:", type=("build", "run"))
depends_on("py-numpy+blas", type=("build", "run"))
depends_on("py-numpy", type=("build", "run"))
depends_on("py-pyfftw", type=("build", "run"), when="@1.0:1.9")
depends_on("py-scipy", type=("build", "run"))
depends_on("py-setuptools", type="build")