evcc: 0.131.4 -> 0.131.5
[NixPkgs.git] / pkgs / development / python-modules / numpy / 2.nix
blob5acc21db4538d2c6c7a1293b5b0be4a3e6c0c90b
2   lib,
3   stdenv,
4   fetchPypi,
5   python,
6   numpy_2,
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 = "2.1.2";
63   pyproject = true;
65   disabled = pythonOlder "3.10";
67   src = fetchPypi {
68     inherit pname version;
69     extension = "tar.gz";
70     hash = "sha256-E1MqCIIX+mJMmbhD7rVGQN4js0FLFKpm0COAXrcxBmw=";
71   };
73   patches = lib.optionals python.hasDistutilsCxxPatch [
74     # We patch cpython/distutils to fix https://bugs.python.org/issue1222585
75     # Patching of numpy.distutils is needed to prevent it from undoing the
76     # patch to distutils.
77     ./numpy-distutils-C++.patch
78   ];
80   postPatch = ''
81     # remove needless reference to full Python path stored in built wheel
82     substituteInPlace numpy/meson.build \
83       --replace-fail 'py.full_path()' "'python'"
84   '';
86   build-system =
87     [
88       cython
89       gfortran
90       meson-python
91       pkg-config
92     ]
93     ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild.xcrun ]
94     ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ mesonEmulatorHook ];
96   # we default openblas to build with 64 threads
97   # if a machine has more than 64 threads, it will segfault
98   # see https://github.com/OpenMathLib/OpenBLAS/issues/2993
99   preConfigure = ''
100     sed -i 's/-faltivec//' numpy/distutils/system_info.py
101     export OMP_NUM_THREADS=$((NIX_BUILD_CORES > 64 ? 64 : NIX_BUILD_CORES))
102   '';
104   # HACK: copy mesonEmulatorHook's flags to the variable used by meson-python
105   postConfigure = ''
106     mesonFlags="$mesonFlags ''${mesonFlagsArray[@]}"
107   '';
109   buildInputs = [
110     blas
111     lapack
112   ];
114   preBuild = ''
115     ln -s ${cfg} site.cfg
116   '';
118   enableParallelBuilding = true;
120   nativeCheckInputs = [
121     hypothesis
122     pytestCheckHook
123     pytest-xdist
124     setuptools
125     typing-extensions
126   ];
128   preCheck = ''
129     pushd $out
130   '';
132   postCheck = ''
133     popd
134   '';
136   # https://github.com/numpy/numpy/blob/a277f6210739c11028f281b8495faf7da298dbef/numpy/_pytesttester.py#L180
137   pytestFlagsArray = [
138     "-m"
139     "not\\ slow" # fast test suite
140   ];
142   disabledTests =
143     [
144       # Tries to import numpy.distutils.msvccompiler, removed in setuptools 74.0
145       "test_api_importable"
146     ]
147     ++ lib.optionals (pythonAtLeast "3.13") [
148       # https://github.com/numpy/numpy/issues/26713
149       "test_iter_refcount"
150     ]
151     ++ lib.optionals stdenv.hostPlatform.isAarch32 [
152       # https://github.com/numpy/numpy/issues/24548
153       "test_impossible_feature_enable" # AssertionError: Failed to generate error
154       "test_features" # AssertionError: Failure Detection
155       "test_new_policy" # AssertionError: assert False
156       "test_identityless_reduction_huge_array" # ValueError: Maximum allowed dimension exceeded
157       "test_unary_spurious_fpexception" # AssertionError: Got warnings: [<warnings.WarningMessage object at 0xd1197430>]
158       "test_int" # AssertionError: selectedintkind(19): expected 16 but got -1
159       "test_real" # AssertionError: selectedrealkind(16): expected 10 but got -1
160       "test_quad_precision" # AssertionError: selectedrealkind(32): expected 16 but got -1
161       "test_big_arrays" # ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger tha...
162       "test_multinomial_pvals_float32" # Failed: DID NOT RAISE <class 'ValueError'>
163     ]
164     ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) [
165       # AssertionError: (np.int64(0), np.longdouble('9.9999999999999994515e-21'), np.longdouble('3.9696755572509052902e+20'), 'arctanh')
166       "test_loss_of_precision"
167     ];
169   passthru = {
170     # just for backwards compatibility
171     blas = blas.provider;
172     blasImplementation = blas.implementation;
173     inherit cfg;
174     coreIncludeDir = "${numpy_2}/${python.sitePackages}/numpy/_core/include";
175     tests = {
176       inherit sage;
177     };
178   };
180   meta = {
181     changelog = "https://github.com/numpy/numpy/releases/tag/v${version}";
182     description = "Scientific tools for Python";
183     homepage = "https://numpy.org/";
184     license = lib.licenses.bsd3;
185     maintainers = with lib.maintainers; [ doronbehar ];
186   };