1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 pythonOlder,
6 fetchFromGitHub,
7 writableTmpDirAsHomeHook,
8
9 # build-system
10 hatchling,
11
12 # dependencies
13 pytools,
14 pymbolic,
15 genpy,
16 numpy,
17 cgen,
18 islpy,
19 codepy,
20 colorama,
21 mako,
22 constantdict,
23 typing-extensions,
24
25 # optional-dependencies
26 pyopencl,
27 fparser,
28 ply,
29}:
30
31buildPythonPackage rec {
32 pname = "loopy";
33 version = "2025.2";
34 pyproject = true;
35
36 disabled = pythonOlder "3.10";
37
38 src = fetchFromGitHub {
39 owner = "inducer";
40 repo = "loopy";
41 tag = "v${version}";
42 hash = "sha256-VgsUOMCIg61mYNDMcGpMs5I1CkobhUFVjoQFdD8Vchs=";
43 fetchSubmodules = true; # submodule at `loopy/target/c/compyte`
44 };
45
46 build-system = [ hatchling ];
47
48 nativeBuildInputs = [ writableTmpDirAsHomeHook ];
49
50 dependencies = [
51 pytools
52 pymbolic
53 genpy
54 numpy
55 cgen
56 islpy
57 codepy
58 colorama
59 mako
60 constantdict
61 typing-extensions
62 ];
63
64 optional-dependencies = {
65 pyopencl = [
66 pyopencl
67 ];
68 fortran = [
69 fparser
70 ply
71 ];
72 };
73
74 pythonImportsCheck = [ "loopy" ];
75
76 # pyopencl._cl.LogicError: clGetPlatformIDs failed: PLATFORM_NOT_FOUND_KHR
77 doCheck = false;
78
79 meta = {
80 description = "Code generator for array-based code on CPUs and GPUs";
81 homepage = "https://github.com/inducer/loopy";
82 changelog = "https://github.com/inducer/loopy/releases/tag/${src.tag}";
83 license = lib.licenses.mit;
84 maintainers = with lib.maintainers; [ tomasajt ];
85 };
86}