package/python-scipy: new package

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
[Arnout:
 - Indent hash file with two spaces.
 - Bump to 1.7.3 to fix build failure with recent GCC.
 - Get from github instead of PyPI.
 - Add host-meson and host-python-pythran dependencies.
 - Properly propagate Config.in dependencies.
 - Correct usage of BR2_INSTALL_LIBSTDCPP symbol.
 - Remove F77, no longer used.
]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
[Guillaume:
 - -lnpymath: npymath.ini localization problem
 - -lnpyrandom resolution problem
 - fix legal-info for latest version LICENSE.txt
 - zlib is a scipy::io module runtime requirement
 - update serie for scipy 1.8.1 (latest)
]
Signed-off-by: Guillaume W. Bres <guillaume.bressaix@gmail.com>
[Thomas:
 - add runtime test
 - drop dependency on OpenBLAS, which is not needed in a minimal
   configuration
 - remove PYTHON_SCIPY_NPY_PKG_CONFIG_PATH logic as it is no longer
   needed
]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Jagan Teki 2022-07-27 21:29:48 +02:00 committed by Thomas Petazzoni
parent bd9fa0e836
commit e10431db29
7 changed files with 139 additions and 0 deletions

View File

@ -1185,10 +1185,13 @@ F: package/python-beniget/
F: package/python-gast/
F: package/python-pybind/
F: package/python-pythran/
F: package/python-scipy/
F: package/reaver/
F: support/testing/tests/package/br2-external/python-pybind
F: support/testing/tests/package/sample_python_pybind.py
F: support/testing/tests/package/sample_python_scipy.py
F: support/testing/tests/package/test_python_pybind.py
F: support/testing/tests/package/test_python_scipy.py
N: Gustavo Heinz <gustavo@gsthnz.com>
F: package/python-m2crypto/
@ -1312,6 +1315,9 @@ F: configs/orangepi_win_defconfig
F: configs/orangepi_zero_plus2_defconfig
F: configs/pine64_defconfig
F: configs/pine64_sopine_defconfig
F: package/python-scipy/
F: support/testing/tests/package/sample_python_scipy.py
F: support/testing/tests/package/test_python_scipy.py
N: James Hilliard <james.hilliard1@gmail.com>
F: package/apcupsd/

View File

@ -1229,6 +1229,7 @@ menu "External python modules"
source "package/python-scandir/Config.in"
source "package/python-scapy/Config.in"
source "package/python-schedule/Config.in"
source "package/python-scipy/Config.in"
source "package/python-sdnotify/Config.in"
source "package/python-secretstorage/Config.in"
source "package/python-see/Config.in"

View File

@ -0,0 +1,25 @@
config BR2_PACKAGE_PYTHON_SCIPY
bool "python-scipy"
depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS # python-numpy
depends on BR2_PACKAGE_LAPACK_ARCH_SUPPORTS # lapack
depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_TOOLCHAIN_USES_MUSL # python-numpy
depends on BR2_TOOLCHAIN_HAS_FORTRAN # lapack
depends on BR2_INSTALL_LIBSTDCPP
select BR2_PACKAGE_LAPACK
select BR2_PACKAGE_ZLIB # runtime scipy::io
select BR2_PACKAGE_PYTHON_NUMPY # runtime
select BR2_PACKAGE_PYTHON_PYBIND
help
The SciPy library is one of the core packages that make up the
SciPy stack. It provides many user-friendly and efficient
numerical routines such as routines for numerical integration,
interpolation, optimization, linear algebra and statistics.
https://www.scipy.org/scipylib/
comment "python-scipy needs toolchain w/ fortran and c++ and glibc or musl"
depends on BR2_PACKAGE_PYTHON_NUMPY_ARCH_SUPPORTS
depends on BR2_PACKAGE_LAPACK_ARCH_SUPPORTS
depends on !BR2_TOOLCHAIN_HAS_FORTRAN || \
!BR2_INSTALL_LIBSTDCPP || \
(!BR2_TOOLCHAIN_USES_GLIBC && !BR2_TOOLCHAIN_USES_MUSL)

View File

@ -0,0 +1,9 @@
# Locally generated
sha256 0140dd24d14ce194fdb3df496c2190f0896ca84ac98bf5d69c3b3fb7bde1a1e9 scipy-1.8.1.tar.xz
sha256 96599f8ec69a2cc609265eed13fc75090aacb28742260e55ce623788a33da19c LICENSE.txt
sha256 37e64a498894ac7c3b070023e3689e954a8ecf8a23b90968d09a455f1b4f7b35 scipy/linalg/src/lapack_deprecations/LICENSE
sha256 606209a000716c5f66e33e180ce08434b96ed17db4975ab9723c6b5fbcc89609 scipy/ndimage/LICENSE.txt
sha256 3df9207af2fdb861af0ae3b22026f163b9bcfab4e525dc4943afe2ffa3f77624 scipy/optimize/tnc/LICENSE
sha256 f0cedf52503b2d42b83411a0a16e6fefac346dfad8fddc66f50050150123470c scipy/sparse/linalg/_dsolve/SuperLU/License.txt
sha256 0926566f9f406178d1214f8cc796e166b1213dd7c05e0c5b461a8b8ac9e50bbe scipy/sparse/linalg/_eigen/arpack/ARPACK/COPYING
sha256 34db0c0c4f931861d720555c9cd7a2e228d1290ba29af0f2ee80c41bb2038afb scipy/spatial/qhull_src/COPYING.txt

View File

@ -0,0 +1,56 @@
################################################################################
#
# python-scipy
#
################################################################################
PYTHON_SCIPY_VERSION = 1.8.1
PYTHON_SCIPY_SOURCE = scipy-$(PYTHON_SCIPY_VERSION).tar.xz
PYTHON_SCIPY_SITE = https://github.com/scipy/scipy/releases/download/v$(PYTHON_SCIPY_VERSION)
PYTHON_SCIPY_LICENSE = \
BSD-3-Clause, \
BSD-2-Clause, \
BSD, \
BSD-Style, \
MIT, \
Qhull
PYTHON_SCIPY_LICENSE_FILES = \
LICENSE.txt \
scipy/linalg/src/lapack_deprecations/LICENSE \
scipy/ndimage/LICENSE.txt \
scipy/optimize/tnc/LICENSE \
scipy/sparse/linalg/_dsolve/SuperLU/License.txt \
scipy/sparse/linalg/_eigen/arpack/ARPACK/COPYING \
scipy/spatial/qhull_src/COPYING.txt
PYTHON_SCIPY_DEPENDENCIES += \
host-python-numpy \
host-python-pythran \
zlib \
lapack \
python-numpy \
python-pybind
PYTHON_SCIPY_INSTALL_STAGING = YES
PYTHON_SCIPY_SETUP_TYPE = setuptools
PYTHON_SCIPY_BUILD_OPTS = config_fc --fcompiler=gnu95
PYTHON_SCIPY_LDFLAGS = $(TARGET_LDFLAGS) -shared \
-L$(PYTHON3_PATH)/site-packages/numpy/core/lib
# -lnpyrandom localization
PYTHON_SCIPY_LDFLAGS += \
-L$(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/site-packages/numpy/random/lib
PYTHON_SCIPY_ENV = \
F90=$(TARGET_FC) \
LDFLAGS="$(PYTHON_SCIPY_LDFLAGS)"
# Provide system configuration options to numpy distutils extensions, telling
# to find all include files and libraries in staging directory.
define PYTHON_SCIPY_CONFIGURE_CMDS
-rm -f $(@D)/site.cfg
echo "[DEFAULT]" >> $(@D)/site.cfg
echo "library_dirs = $(STAGING_DIR)/usr/lib" >> $(@D)/site.cfg
echo "include_dirs = $(STAGING_DIR)/usr/include" >> $(@D)/site.cfg
endef
$(eval $(python-package))

View File

@ -0,0 +1,12 @@
import numpy
import scipy.special
import scipy.integrate
cb = scipy.special.cbrt([27, 64])
assert((cb == numpy.array([3., 4.])).all())
com = scipy.special.comb(5, 2, exact = False, repetition=True)
assert(com == 15.0)
t = scipy.integrate.trapezoid([5,8,10])
assert(t == 15.5)

View File

@ -0,0 +1,30 @@
import os
from tests.package.test_python import TestPythonPackageBase
class TestPythonPy3SciPy(TestPythonPackageBase):
__test__ = True
# We can't use the base configuration, as we need a glibc
# toolchain for scipy
config = \
"""
BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_SCIPY=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
# BR2_TARGET_ROOTFS_TAR is not set
"""
sample_scripts = ["tests/package/sample_python_scipy.py"]
def login(self):
ext2_file = os.path.join(self.builddir, "images", "rootfs.ext2")
self.emulator.boot(arch="armv5",
kernel="builtin",
options=["-drive", "file=%s,if=scsi,format=raw" % ext2_file],
kernel_cmdline=["rootwait", "root=/dev/sda"])
self.emulator.login()