{ lib , stdenv , pythonAtLeast , pythonOlder , fetchPypi , python , buildPythonPackage , setuptools , numpy , llvmlite , libcxx , importlib-metadata , substituteAll # CUDA-only dependencies: , addOpenGLRunpath ? null , cudaPackages ? {} # CUDA flags: , cudaSupport ? false }: let inherit (cudaPackages) cudatoolkit; in buildPythonPackage rec { version = "0.56.2"; pname = "numba"; format = "setuptools"; disabled = pythonOlder "3.6" || pythonAtLeast "3.11"; src = fetchPypi { inherit pname version; hash = "sha256-NJLwpdCeJX/FIfU3emxrkH7sGSDRRznwskWLnSmUalo="; }; postPatch = '' substituteInPlace setup.py \ --replace "setuptools<60" "setuptools" ''; NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${lib.getDev libcxx}/include/c++/v1"; nativeBuildInputs = lib.optionals cudaSupport [ addOpenGLRunpath ]; propagatedBuildInputs = [ numpy llvmlite setuptools ] ++ lib.optionals (pythonOlder "3.9") [ importlib-metadata ] ++ lib.optionals cudaSupport [ cudatoolkit cudatoolkit.lib ]; patches = lib.optionals cudaSupport [ (substituteAll { src = ./cuda_path.patch; cuda_toolkit_path = cudatoolkit; cuda_toolkit_lib_path = cudatoolkit.lib; }) ]; postFixup = lib.optionalString cudaSupport '' find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do addOpenGLRunpath "$lib" patchelf --set-rpath "${cudatoolkit}/lib:${cudatoolkit.lib}/lib:$(patchelf --print-rpath "$lib")" "$lib" done ''; # Copy test script into $out and run the test suite. checkPhase = '' ${python.interpreter} -m numba.runtests ''; # ImportError: cannot import name '_typeconv' doCheck = false; pythonImportsCheck = [ "numba" ]; meta = with lib; { description = "Compiling Python code using LLVM"; homepage = "https://numba.pydata.org/"; license = licenses.bsd2; maintainers = with maintainers; [ fridh ]; }; }