From ffc970376d3fcd7bbfe3c1d8ddcb651f5a18fb85 Mon Sep 17 00:00:00 2001 From: Kirill Radzikhovskyy Date: Thu, 1 Jan 2026 13:30:01 +1100 Subject: [PATCH] python3Packages.pypytools: fix build with python 3.14 --- .../python-modules/pypytools/default.nix | 2 ++ .../pypytools/fix-ast-314.patch | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 pkgs/development/python-modules/pypytools/fix-ast-314.patch diff --git a/pkgs/development/python-modules/pypytools/default.nix b/pkgs/development/python-modules/pypytools/default.nix index 7a3eb0925355..43abfb06b981 100644 --- a/pkgs/development/python-modules/pypytools/default.nix +++ b/pkgs/development/python-modules/pypytools/default.nix @@ -47,6 +47,8 @@ buildPythonPackage rec { url = "https://github.com/antocuni/pypytools/commit/c6aed496ec35a6ef7ce9e95084849eebc16bafef.patch"; hash = "sha256-YoYRZmgueQmxRtGaeP4zEVxuA0U7TB0PmoYHHVI7ICQ="; }) + # Fix ast.Num/ast.Index removal in Python 3.14, https://github.com/antocuni/pypytools/pull/5 + ./fix-ast-314.patch ]; pythonImportsCheck = [ "pypytools" ]; diff --git a/pkgs/development/python-modules/pypytools/fix-ast-314.patch b/pkgs/development/python-modules/pypytools/fix-ast-314.patch new file mode 100644 index 000000000000..cd311f70a4f3 --- /dev/null +++ b/pkgs/development/python-modules/pypytools/fix-ast-314.patch @@ -0,0 +1,31 @@ +From bce660de0316a3b757d0274d1871eb8d1a1a51f4 Mon Sep 17 00:00:00 2001 +From: Kirill Radzikhovskyy +Date: Thu, 1 Jan 2026 13:21:12 +1100 +Subject: [PATCH] Fix ast.Num/ast.Index removal in Python 3.14 + +--- + pypytools/unroll.py | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/pypytools/unroll.py b/pypytools/unroll.py +index 4bfcd5d..e5a9a69 100644 +--- a/pypytools/unroll.py ++++ b/pypytools/unroll.py +@@ -81,8 +81,16 @@ def unroll(self, fornode): + items = self.extravars[fornode.iter.id] + body = [] + for i in range(len(items)): ++ if hasattr(ast, 'Num'): ++ val = ast.Num(n=i) ++ else: ++ val = ast.Constant(value=i) ++ if hasattr(ast, 'Index'): ++ slice = ast.Index(value=val) ++ else: ++ slice = val + item = ast.Subscript(value=ast.Name(id=fornode.iter.id, ctx=ast.Load()), +- slice=ast.Index(value=ast.Num(n=i)), ++ slice=slice, + ctx=ast.Load()) + assign = ast.Assign(targets=[fornode.target], + value=item)