evcc: 0.131.4 -> 0.131.5
[NixPkgs.git] / pkgs / development / python-modules / numpy / 1.nix
blob795f24e5eefa99d97269643d4e248e990053be21
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   # HACK: copy mesonEmulatorHook's flags to the variable used by meson-python
128   postConfigure = ''
129     mesonFlags="$mesonFlags ''${mesonFlagsArray[@]}"
130   '';
132   preBuild = ''
133     ln -s ${cfg} site.cfg
134   '';
136   enableParallelBuilding = true;
138   nativeCheckInputs = [
139     pytest-xdist
140     pytestCheckHook
141     hypothesis
142     setuptools
143     typing-extensions
144   ];
146   preCheck = ''
147     cd "$out"
148   '';
150   # https://github.com/numpy/numpy/blob/a277f6210739c11028f281b8495faf7da298dbef/numpy/_pytesttester.py#L180
151   pytestFlagsArray = [
152     "-m"
153     "not\\ slow" # fast test suite
154   ];
156   # https://github.com/numpy/numpy/issues/24548
157   disabledTests =
158     [
159       # Tries to import numpy.distutils.msvccompiler, removed in setuptools 74.0
160       "test_api_importable"
161     ]
162     ++ lib.optionals stdenv.hostPlatform.isi686 [
163       "test_new_policy" # AssertionError: assert False
164       "test_identityless_reduction_huge_array" # ValueError: Maximum allowed dimension exceeded
165       "test_float_remainder_overflow" # AssertionError: FloatingPointError not raised by divmod
166       "test_int" # AssertionError: selectedintkind(19): expected 16 but got -1
167     ]
168     ++ lib.optionals stdenv.hostPlatform.isAarch32 [
169       "test_impossible_feature_enable" # AssertionError: Failed to generate error
170       "test_features" # AssertionError: Failure Detection
171       "test_new_policy" # AssertionError: assert False
172       "test_identityless_reduction_huge_array" # ValueError: Maximum allowed dimension exceeded
173       "test_unary_spurious_fpexception" # AssertionError: Got warnings: [<warnings.WarningMessage object at 0xd1197430>]
174       "test_int" # AssertionError: selectedintkind(19): expected 16 but got -1
175       "test_real" # AssertionError: selectedrealkind(16): expected 10 but got -1
176       "test_quad_precision" # AssertionError: selectedrealkind(32): expected 16 but got -1
177       "test_big_arrays" # ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger tha...
178       "test_multinomial_pvals_float32" # Failed: DID NOT RAISE <class 'ValueError'>
179     ]
180     ++ lib.optionals stdenv.hostPlatform.isAarch64 [
181       "test_big_arrays" # OOM on a 16G machine
182     ]
183     ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [
184       # can fail on virtualized machines confused over their cpu identity
185       "test_dispatcher"
186     ];
188   passthru = {
189     # just for backwards compatibility
190     blas = blas.provider;
191     blasImplementation = blas.implementation;
192     inherit cfg;
193     coreIncludeDir = "${numpy_1}/${python.sitePackages}/numpy/core/include";
194     tests = {
195       inherit sage;
196     };
197   };
199   # Disable test
200   # - test_large_file_support: takes a long time and can cause the machine to run out of disk space
201   env.NOSE_EXCLUDE = "test_large_file_support";
203   meta = {
204     changelog = "https://github.com/numpy/numpy/releases/tag/v${version}";
205     description = "Scientific tools for Python";
206     mainProgram = "f2py";
207     homepage = "https://numpy.org/";
208     license = lib.licenses.bsd3;
209   };