Original py-numpy
This commit is contained in:
84
math/py-numpy/Makefile
Normal file
84
math/py-numpy/Makefile
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
PORTNAME= numpy
|
||||||
|
PORTVERSION= 1.26.4
|
||||||
|
PORTREVISION= 7
|
||||||
|
PORTEPOCH= 1
|
||||||
|
CATEGORIES= math python
|
||||||
|
MASTER_SITES= PYPI \
|
||||||
|
https://numpy.org/doc/1.26/:doc
|
||||||
|
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
|
||||||
|
DISTFILES= numpy-${PORTVERSION}${EXTRACT_SUFX} \
|
||||||
|
numpy-html.zip:doc
|
||||||
|
DIST_SUBDIR= numpy-${PORTVERSION:R}
|
||||||
|
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
|
||||||
|
|
||||||
|
MAINTAINER= python@FreeBSD.org
|
||||||
|
COMMENT= The New Numeric Extension to Python
|
||||||
|
WWW= https://www.numpy.org/
|
||||||
|
|
||||||
|
LICENSE= BSD3CLAUSE
|
||||||
|
LICENSE_FILE= ${WRKSRC}/LICENSE.txt
|
||||||
|
|
||||||
|
TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pytest>=6.2.5:devel/py-pytest@${PY_FLAVOR} \
|
||||||
|
${PYTHON_PKGNAMEPREFIX}hypothesis>=6.24.1:devel/py-hypothesis@${PY_FLAVOR} \
|
||||||
|
${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.2.0:devel/py-typing-extensions@${PY_FLAVOR}
|
||||||
|
|
||||||
|
USES= compiler:c11 cpe fortran python:3.9+
|
||||||
|
USE_PYTHON= allflavors autoplist concurrent cython distutils
|
||||||
|
|
||||||
|
GCCLIBDIR_CMDS= ${FC} -print-file-name=libgfortran.so | ${SED} -e s/libgfortran.so//
|
||||||
|
LDFLAGS+= -s
|
||||||
|
PYDISTUTILS_BUILDARGS= --fcompiler=gnu95
|
||||||
|
PYDISTUTILS_CONFIGUREARGS= --fcompiler=gnu95
|
||||||
|
|
||||||
|
PIE_UNSAFE= yes
|
||||||
|
|
||||||
|
PORTDOCS= *
|
||||||
|
|
||||||
|
PORTSCOUT= limit:^1\.
|
||||||
|
|
||||||
|
OPTIONS_DEFINE= DOCS SUITESPARSE
|
||||||
|
OPTIONS_SINGLE= BLASLIB
|
||||||
|
OPTIONS_SINGLE_BLASLIB= ATLAS NETLIB OPENBLAS
|
||||||
|
OPTIONS_DEFAULT= OPENBLAS SUITESPARSE
|
||||||
|
SUITESPARSE_DESC= Use AMD and UMFPACK in SuiteSparse
|
||||||
|
|
||||||
|
ATLAS_USES= blaslapack:atlas
|
||||||
|
ATLAS_VARS= BLASLIBS="ptf77blas, ptcblas" BLASNAME=atlas LAPACKLIBS=alapack LIBRARIES=atlas_libs
|
||||||
|
NETLIB_LIB_DEPENDS= libcblas.so:math/cblas
|
||||||
|
NETLIB_USES= blaslapack:netlib
|
||||||
|
NETLIB_VARS= BLASLIBS="blas, cblas" BLASNAME=atlas LAPACKLIBS=lapack LIBRARIES=atlas_libs
|
||||||
|
OPENBLAS_USES= blaslapack:openblas
|
||||||
|
OPENBLAS_VARS= BLASLIBS="openblas, gfortran" BLASNAME=openblas LAPACKLIBS="openblas, gfortran" LIBRARIES=libraries
|
||||||
|
SUITESPARSE_LIB_DEPENDS=libumfpack.so:math/suitesparse-umfpack
|
||||||
|
|
||||||
|
post-extract:
|
||||||
|
@${TOUCH} ${WRKSRC}/numpy/f2py/tests/src/temp
|
||||||
|
@${TOUCH} ${WRKSRC}/numpy/random/_examples/temp
|
||||||
|
@${TOUCH} ${WRKSRC}/numpy/core/tests/examples/temp
|
||||||
|
|
||||||
|
pre-configure-SUITESPARSE-off:
|
||||||
|
@${REINPLACE_CMD} -e 's|:%%LOCALBASE%%/include/suitesparse||' ${WRKSRC}/site.cfg
|
||||||
|
|
||||||
|
pre-configure:
|
||||||
|
@${REINPLACE_CMD} -e 's|%%FC%%|${FC}|' ${WRKSRC}/numpy/distutils/fcompiler/gnu.py
|
||||||
|
@${CP} ${FILESDIR}/site.cfg ${WRKSRC}/site.cfg
|
||||||
|
${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
|
||||||
|
-e 's|%%BLASLIBS%%|${BLASLIBS}|; s|%%BLASNAME%%|${BLASNAME}|' \
|
||||||
|
-e 's|%%LAPACKLIBS%%|${LAPACKLIBS}|; s|%%LIBRARIES%%|${LIBRARIES}|' \
|
||||||
|
${WRKSRC}/site.cfg
|
||||||
|
@${REINPLACE_CMD} -e "s|%%GCCLIBDIR%%|$$(${GCCLIBDIR_CMDS})|" ${WRKSRC}/site.cfg ${WRKSRC}/numpy/distutils/system_info.py
|
||||||
|
|
||||||
|
do-configure:
|
||||||
|
|
||||||
|
post-install:
|
||||||
|
${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR} -name '*.so' | ${XARGS} ${STRIP_CMD}
|
||||||
|
|
||||||
|
post-install-DOCS-on:
|
||||||
|
@${MKDIR} ${STAGEDIR}${DOCSDIR}
|
||||||
|
${UNZIP_NATIVE_CMD} -qo ${DISTDIR}/${DIST_SUBDIR}/numpy-html.zip -d ${STAGEDIR}${DOCSDIR}
|
||||||
|
@${RM} ${STAGEDIR}${DOCSDIR}/.buildinfo
|
||||||
|
|
||||||
|
do-test:
|
||||||
|
@cd ${WRKSRC} && ${PYTHON_CMD} runtests.py
|
||||||
|
|
||||||
|
.include <bsd.port.mk>
|
||||||
5
math/py-numpy/distinfo
Normal file
5
math/py-numpy/distinfo
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
TIMESTAMP = 1718154974
|
||||||
|
SHA256 (numpy-1.26/numpy-1.26.4.tar.gz) = 2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010
|
||||||
|
SIZE (numpy-1.26/numpy-1.26.4.tar.gz) = 15786129
|
||||||
|
SHA256 (numpy-1.26/numpy-html.zip) = 1dc88fc45a7709143b7b917e8e807e4985c41fe3fb7ee5fc55c3aeec5f369fdd
|
||||||
|
SIZE (numpy-1.26/numpy-html.zip) = 25538887
|
||||||
13
math/py-numpy/files/patch-clang
Normal file
13
math/py-numpy/files/patch-clang
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
--- numpy/distutils/checks/cpu_avx512_spr.c.orig 2024-02-05 21:17:48 UTC
|
||||||
|
+++ numpy/distutils/checks/cpu_avx512_spr.c
|
||||||
|
@@ -15,10 +15,6 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
-/* clang has a bug regarding our spr coode, see gh-23730. */
|
||||||
|
-#if __clang__
|
||||||
|
-#error
|
||||||
|
-#endif
|
||||||
|
__m512h a = _mm512_loadu_ph((void*)argv[argc-1]);
|
||||||
|
__m512h temp = _mm512_fmadd_ph(a, a, a);
|
||||||
|
_mm512_storeu_ph((void*)(argv[argc-1]), temp);
|
||||||
11
math/py-numpy/files/patch-numpy-distutils-exec_command.py
Normal file
11
math/py-numpy/files/patch-numpy-distutils-exec_command.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- numpy/distutils/exec_command.py.orig 2021-05-08 18:35:28 UTC
|
||||||
|
+++ numpy/distutils/exec_command.py
|
||||||
|
@@ -261,7 +261,7 @@ def _exec_command(command, use_shell=None, use_tee = N
|
||||||
|
|
||||||
|
if os.name == 'posix' and use_shell:
|
||||||
|
# On POSIX, subprocess always uses /bin/sh, override
|
||||||
|
- sh = os.environ.get('SHELL', '/bin/sh')
|
||||||
|
+ sh = '/bin/sh'
|
||||||
|
if is_sequence(command):
|
||||||
|
command = [sh, '-c', ' '.join(command)]
|
||||||
|
else:
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
--- numpy/distutils/fcompiler/__init__.py.orig 2021-05-09 10:38:00 UTC
|
||||||
|
+++ numpy/distutils/fcompiler/__init__.py
|
||||||
|
@@ -171,7 +171,7 @@ class FCompiler(CCompiler):
|
||||||
|
# gnu95 compiler type when there are F90 sources.
|
||||||
|
suggested_f90_compiler = None
|
||||||
|
|
||||||
|
- compile_switch = "-c"
|
||||||
|
+ compile_switch = "-fPIC"
|
||||||
|
object_switch = "-o " # Ending space matters! It will be stripped
|
||||||
|
# but if it is missing then object_switch
|
||||||
|
# will be prefixed to object file name by
|
||||||
35
math/py-numpy/files/patch-numpy-distutils-fcompiler-gnu.py
Normal file
35
math/py-numpy/files/patch-numpy-distutils-fcompiler-gnu.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
--- numpy/distutils/fcompiler/gnu.py.orig 2021-05-08 21:14:06 UTC
|
||||||
|
+++ numpy/distutils/fcompiler/gnu.py
|
||||||
|
@@ -79,7 +79,7 @@ class GnuFCompiler(FCompiler):
|
||||||
|
return None
|
||||||
|
return v[1]
|
||||||
|
|
||||||
|
- possible_executables = ['g77', 'f77']
|
||||||
|
+ possible_executables = ['%%FC%%', 'g77', 'f77']
|
||||||
|
executables = {
|
||||||
|
'version_cmd' : [None, "-dumpversion"],
|
||||||
|
'compiler_f77' : [None, "-g", "-Wall", "-fno-second-underscore"],
|
||||||
|
@@ -103,11 +103,13 @@ class GnuFCompiler(FCompiler):
|
||||||
|
for key in ['version_cmd', 'compiler_f77', 'linker_so', 'linker_exe']:
|
||||||
|
executables[key].append('-mno-cygwin')
|
||||||
|
|
||||||
|
- g2c = 'g2c'
|
||||||
|
+ g2c = '%%FC%%'
|
||||||
|
suggested_f90_compiler = 'gnu95'
|
||||||
|
|
||||||
|
def get_flags_linker_so(self):
|
||||||
|
opt = self.linker_so[1:]
|
||||||
|
+ if 'FFLAGS' in os.environ:
|
||||||
|
+ opt.append(os.environ['FFLAGS'])
|
||||||
|
if sys.platform == 'darwin':
|
||||||
|
target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', None)
|
||||||
|
# If MACOSX_DEPLOYMENT_TARGET is set, we simply trust the value
|
||||||
|
@@ -287,7 +289,7 @@ class Gnu95FCompiler(GnuFCompiler):
|
||||||
|
self.executables[key].append('-mno-cygwin')
|
||||||
|
return v
|
||||||
|
|
||||||
|
- possible_executables = ['gfortran', 'f95']
|
||||||
|
+ possible_executables = ['%%FC%%', 'gfortran', 'f95']
|
||||||
|
executables = {
|
||||||
|
'version_cmd' : ["<F90>", "-dumpversion"],
|
||||||
|
'compiler_f77' : [None, "-Wall", "-g", "-ffixed-form",
|
||||||
22
math/py-numpy/files/patch-numpy-distutils-system_info.py
Normal file
22
math/py-numpy/files/patch-numpy-distutils-system_info.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
--- numpy/distutils/system_info.py.orig 2021-05-09 10:38:00 UTC
|
||||||
|
+++ numpy/distutils/system_info.py
|
||||||
|
@@ -209,6 +209,8 @@ def _c_string_literal(s):
|
||||||
|
Convert a python string into a literal suitable for inclusion into C code
|
||||||
|
"""
|
||||||
|
# only these three characters are forbidden in C strings
|
||||||
|
+ if s is None:
|
||||||
|
+ return '"None"'
|
||||||
|
s = s.replace('\\', r'\\')
|
||||||
|
s = s.replace('"', r'\"')
|
||||||
|
s = s.replace('\n', r'\n')
|
||||||
|
@@ -1322,8 +1324,8 @@ class atlas_info(system_info):
|
||||||
|
dir_env_var = 'ATLAS'
|
||||||
|
_lib_names = ['f77blas', 'cblas']
|
||||||
|
if sys.platform[:7] == 'freebsd':
|
||||||
|
- _lib_atlas = ['atlas_r']
|
||||||
|
- _lib_lapack = ['alapack_r']
|
||||||
|
+ _lib_atlas = ['atlas']
|
||||||
|
+ _lib_lapack = ['alapack']
|
||||||
|
else:
|
||||||
|
_lib_atlas = ['atlas']
|
||||||
|
_lib_lapack = ['lapack']
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
--- numpy/core/src/common/npy_cpu_features.c.orig 2023-06-18 00:19:04 UTC
|
||||||
|
+++ numpy/core/src/common/npy_cpu_features.c
|
||||||
|
@@ -570,6 +570,18 @@ npy__cpu_init_features(void)
|
||||||
|
#ifndef PPC_FEATURE2_ARCH_3_1
|
||||||
|
#define PPC_FEATURE2_ARCH_3_1 0x00040000
|
||||||
|
#endif
|
||||||
|
+#elif defined(__FreeBSD__)
|
||||||
|
+ #include <machine/cpu.h>
|
||||||
|
+ #include <sys/auxv.h>
|
||||||
|
+ #ifndef PPC_FEATURE2_ARCH_2_07
|
||||||
|
+ #define PPC_FEATURE2_ARCH_2_07 0x80000000
|
||||||
|
+ #endif
|
||||||
|
+ #ifndef PPC_FEATURE2_ARCH_3_00
|
||||||
|
+ #define PPC_FEATURE2_ARCH_3_00 0x00800000
|
||||||
|
+ #endif
|
||||||
|
+ #ifndef PPC_FEATURE2_ARCH_3_1
|
||||||
|
+ #define PPC_FEATURE2_ARCH_3_1 0x00040000
|
||||||
|
+ #endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -591,6 +603,25 @@ npy__cpu_init_features(void)
|
||||||
|
|
||||||
|
elf_aux_info(AT_HWCAP2, &hwcap, sizeof(hwcap));
|
||||||
|
#endif // __linux__
|
||||||
|
+ if (hwcap & PPC_FEATURE2_ARCH_3_1)
|
||||||
|
+ {
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX] =
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX2] =
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX3] =
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX4] = 1;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX] = 1;
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX2] = (hwcap & PPC_FEATURE2_ARCH_2_07) != 0;
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX3] = (hwcap & PPC_FEATURE2_ARCH_3_00) != 0;
|
||||||
|
+ npy__cpu_have[NPY_CPU_FEATURE_VSX4] = (hwcap & PPC_FEATURE2_ARCH_3_1) != 0;
|
||||||
|
+#elif defined(__FreeBSD__)
|
||||||
|
+ unsigned long hwcap;
|
||||||
|
+ elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
|
||||||
|
+ if ((hwcap & PPC_FEATURE_HAS_VSX) == 0)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ elf_aux_info(AT_HWCAP2, &hwcap, sizeof(hwcap));
|
||||||
|
if (hwcap & PPC_FEATURE2_ARCH_3_1)
|
||||||
|
{
|
||||||
|
npy__cpu_have[NPY_CPU_FEATURE_VSX] =
|
||||||
18
math/py-numpy/files/patch-numpy_f2py_f2py2e.py
Normal file
18
math/py-numpy/files/patch-numpy_f2py_f2py2e.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
--- numpy/f2py/f2py2e.py.orig 2024-06-12 01:22:27 UTC
|
||||||
|
+++ numpy/f2py/f2py2e.py
|
||||||
|
@@ -693,6 +693,7 @@ def run_compile():
|
||||||
|
extra_objects, sources = filter_files('', '[.](o|a|so|dylib)', sources)
|
||||||
|
library_dirs, sources = filter_files('-L', '', sources, remove_prefix=1)
|
||||||
|
libraries, sources = filter_files('-l', '', sources, remove_prefix=1)
|
||||||
|
+ extra_link_args, sources = filter_files('-Wl,|-B|-f','',sources,remove_prefix=0)
|
||||||
|
undef_macros, sources = filter_files('-U', '', sources, remove_prefix=1)
|
||||||
|
define_macros, sources = filter_files('-D', '', sources, remove_prefix=1)
|
||||||
|
for i in range(len(define_macros)):
|
||||||
|
@@ -727,6 +728,7 @@ def run_compile():
|
||||||
|
define_macros,
|
||||||
|
undef_macros,
|
||||||
|
f2py_flags,
|
||||||
|
+ extra_link_args,
|
||||||
|
sysinfo_flags,
|
||||||
|
fc_flags,
|
||||||
|
flib_flags,
|
||||||
10
math/py-numpy/files/site.cfg
Normal file
10
math/py-numpy/files/site.cfg
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
library_dirs = /usr/lib:%%LOCALBASE%%/lib:%%GCCLIBDIR%%
|
||||||
|
include_dirs = /usr/include:%%LOCALBASE%%/include:%%LOCALBASE%%/include/suitesparse
|
||||||
|
src_dirs = %%LOCALBASE%%/src
|
||||||
|
# search static libraries (.a) in preference to shared ones (.so)
|
||||||
|
search_static_first = 0
|
||||||
|
|
||||||
|
[%%BLASNAME%%]
|
||||||
|
%%LIBRARIES%% = %%BLASLIBS%%
|
||||||
|
lapack_libs = %%LAPACKLIBS%%
|
||||||
11
math/py-numpy/pkg-descr
Normal file
11
math/py-numpy/pkg-descr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
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
|
||||||
|
- useful linear algebra, Fourier transform, and random number capabilities
|
||||||
|
|
||||||
|
Besides its obvious scientific uses, NumPy can also be used as an efficient
|
||||||
|
multi-dimensional container of generic data. Arbitrary data-types can be
|
||||||
|
defined. This allows NumPy to seamlessly and speedily integrate with a wide
|
||||||
|
variety of databases.
|
||||||
Reference in New Issue
Block a user