stripe-cli: 1.23.3 -> 1.23.5 (#375724)
[NixPkgs.git] / pkgs / development / python-modules / numpy / 1.nix
blob5d72162865640b33547fc08b2e57ce076946529d
2   lib,
3   stdenv,
4   fetchPypi,
5   python,
6   numpy_1,
7   pythonAtLeast,
8   pythonOlder,
9   buildPythonPackage,
10   writeTextFile,
12   # build-system
13   cython,
14   gfortran,
15   meson-python,
16   mesonEmulatorHook,
17   pkg-config,
18   xcbuild,
20   # native dependencies
21   blas,
22   lapack,
24   # Reverse dependency
25   sage,
27   # tests
28   hypothesis,
29   pytest-xdist,
30   pytestCheckHook,
31   setuptools,
32   typing-extensions,
35 assert (!blas.isILP64) && (!lapack.isILP64);
37 let
38   cfg = writeTextFile {
39     name = "site.cfg";
40     text = lib.generators.toINI { } {
41       ${blas.implementation} = {
42         include_dirs = "${lib.getDev blas}/include:${lib.getDev lapack}/include";
43         library_dirs = "${blas}/lib:${lapack}/lib";
44         runtime_library_dirs = "${blas}/lib:${lapack}/lib";
45         libraries = "lapack,lapacke,blas,cblas";
46       };
47       lapack = {
48         include_dirs = "${lib.getDev lapack}/include";
49         library_dirs = "${lapack}/lib";
50         runtime_library_dirs = "${lapack}/lib";
51       };
52       blas = {
53         include_dirs = "${lib.getDev blas}/include";
54         library_dirs = "${blas}/lib";
55         runtime_library_dirs = "${blas}/lib";
56       };
57     };
58   };
60 buildPythonPackage rec {
61   pname = "numpy";
62   version = "1.26.4";
63   pyproject = true;
64   disabled = pythonOlder "3.9" || pythonAtLeast "3.13";
66   src = fetchPypi {
67     inherit pname version;
68     extension = "tar.gz";
69     hash = "sha256-KgKrqe0S5KxOs+qUIcQgMBoMZGDZgw10qd+H76SRIBA=";
70   };
72   patches =
73     [
74       # Disable `numpy/core/tests/test_umath.py::TestComplexFunctions::test_loss_of_precision[complex256]`
75       # on x86_64-darwin because it fails under Rosetta 2 due to issues with trig functions and
76       # 80-bit long double complex numbers.
77       ./disable-failing-long-double-test-Rosetta-2.patch
78     ]
79     # We patch cpython/distutils to fix https://bugs.python.org/issue1222585
80     # Patching of numpy.distutils is needed to prevent it from undoing the
81     # patch to distutils.
82     ++ lib.optionals python.hasDistutilsCxxPatch [ ./numpy-distutils-C++.patch ];
84   postPatch = ''
85     # fails with multiple errors because we are not using the pinned setuptools version
86     # see https://github.com/numpy/numpy/blob/v1.25.0/pyproject.toml#L7
87     #   error: option --single-version-externally-managed not recognized
88     #   TypeError: dist must be a Distribution instance
89     rm numpy/core/tests/test_cython.py
91     patchShebangs numpy/_build_utils/*.py
93     # remove needless reference to full Python path stored in built wheel
94     substituteInPlace numpy/meson.build \
95       --replace 'py.full_path()' "'python'"
97     substituteInPlace pyproject.toml \
98       --replace-fail "meson-python>=0.15.0,<0.16.0" "meson-python"
99   '';
101   nativeBuildInputs =
102     [
103       cython
104       gfortran
105       meson-python
106       pkg-config
107     ]
108     ++ lib.optionals (stdenv.hostPlatform.isDarwin) [ xcbuild.xcrun ]
109     ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ mesonEmulatorHook ];
111   buildInputs = [
112     blas
113     lapack
114   ];
116   # Causes `error: argument unused during compilation: '-fno-strict-overflow'` due to `-Werror`.
117   hardeningDisable = lib.optionals stdenv.cc.isClang [ "strictoverflow" ];
119   # we default openblas to build with 64 threads
120   # if a machine has more than 64 threads, it will segfault
121   # see https://github.com/OpenMathLib/OpenBLAS/issues/2993
122   preConfigure = ''
123     sed -i 's/-faltivec//' numpy/distutils/system_info.py
124     export OMP_NUM_THREADS=$((NIX_BUILD_CORES > 64 ? 64 : NIX_BUILD_CORES))
125   '';
127   preBuild = ''
128     ln -s ${cfg} site.cfg
129   '';
131   enableParallelBuilding = true;
133   nativeCheckInputs = [
134     pytest-xdist
135     pytestCheckHook
136     hypothesis
137     setuptools
138     typing-extensions
139   ];
141   preCheck = ''
142     cd "$out"
143   '';
145   # https://github.com/numpy/numpy/blob/a277f6210739c11028f281b8495faf7da298dbef/numpy/_pytesttester.py#L180
146   pytestFlagsArray = [
147     "-m"
148     "not\\ slow" # fast test suite
149   ];
151   # https://github.com/numpy/numpy/issues/24548
152   disabledTests =
153     [
154       # Tries to import numpy.distutils.msvccompiler, removed in setuptools 74.0
155       "test_api_importable"
156     ]
157     ++ lib.optionals stdenv.hostPlatform.isi686 [
158       "test_new_policy" # AssertionError: assert False
159       "test_identityless_reduction_huge_array" # ValueError: Maximum allowed dimension exceeded
160       "test_float_remainder_overflow" # AssertionError: FloatingPointError not raised by divmod
161       "test_int" # AssertionError: selectedintkind(19): expected 16 but got -1
162     ]
163     ++ lib.optionals stdenv.hostPlatform.isAarch32 [
164       "test_impossible_feature_enable" # AssertionError: Failed to generate error
165       "test_features" # AssertionError: Failure Detection
166       "test_new_policy" # AssertionError: assert False
167       "test_identityless_reduction_huge_array" # ValueError: Maximum allowed dimension exceeded
168       "test_unary_spurious_fpexception" # AssertionError: Got warnings: [<warnings.WarningMessage object at 0xd1197430>]
169       "test_int" # AssertionError: selectedintkind(19): expected 16 but got -1
170       "test_real" # AssertionError: selectedrealkind(16): expected 10 but got -1
171       "test_quad_precision" # AssertionError: selectedrealkind(32): expected 16 but got -1
172       "test_big_arrays" # ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger tha...
173       "test_multinomial_pvals_float32" # Failed: DID NOT RAISE <class 'ValueError'>
174     ]
175     ++ lib.optionals stdenv.hostPlatform.isAarch64 [
176       "test_big_arrays" # OOM on a 16G machine
177     ]
178     ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [
179       # can fail on virtualized machines confused over their cpu identity
180       "test_dispatcher"
181     ];
183   passthru = {
184     # just for backwards compatibility
185     blas = blas.provider;
186     blasImplementation = blas.implementation;
187     inherit cfg;
188     coreIncludeDir = "${numpy_1}/${python.sitePackages}/numpy/core/include";
189     tests = {
190       inherit sage;
191     };
192   };
194   # Disable test
195   # - test_large_file_support: takes a long time and can cause the machine to run out of disk space
196   env.NOSE_EXCLUDE = "test_large_file_support";
198   meta = {
199     changelog = "https://github.com/numpy/numpy/releases/tag/v${version}";
200     description = "Scientific tools for Python";
201     mainProgram = "f2py";
202     homepage = "https://numpy.org/";
203     license = lib.licenses.bsd3;
204   };