From 28f85f9e3b970bfcf1dcbadb3146c187baf2972d Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Thu, 19 Dec 2024 08:45:42 -0600
Subject: [PATCH] Require from __future__ import annotations

---
 loopy/__init__.py                       | 3 +++
 loopy/__main__.py                       | 2 ++
 loopy/auto_test.py                      | 3 +++
 loopy/check.py                          | 3 +++
 loopy/cli.py                            | 2 ++
 loopy/codegen/__init__.py               | 3 +++
 loopy/codegen/bounds.py                 | 3 +++
 loopy/codegen/control.py                | 1 +
 loopy/codegen/instruction.py            | 1 +
 loopy/codegen/loop.py                   | 3 +++
 loopy/codegen/result.py                 | 3 +++
 loopy/codegen/tools.py                  | 3 +++
 loopy/diagnostic.py                     | 3 +++
 loopy/expression.py                     | 3 +++
 loopy/frontend/fortran/__init__.py      | 3 +++
 loopy/frontend/fortran/diagnostic.py    | 3 +++
 loopy/frontend/fortran/expression.py    | 3 +++
 loopy/frontend/fortran/translator.py    | 3 +++
 loopy/frontend/fortran/tree.py          | 3 +++
 loopy/ipython_ext.py                    | 2 ++
 loopy/isl_helpers.py                    | 2 ++
 loopy/kernel/__init__.py                | 2 ++
 loopy/kernel/creation.py                | 1 +
 loopy/kernel/instruction.py             | 3 +++
 loopy/kernel/tools.py                   | 1 +
 loopy/library/function.py               | 3 +++
 loopy/library/random123.py              | 1 +
 loopy/library/reduction.py              | 3 +++
 loopy/loop.py                           | 3 +++
 loopy/match.py                          | 1 +
 loopy/options.py                        | 3 +++
 loopy/preprocess.py                     | 3 +++
 loopy/schedule/device_mapping.py        | 3 +++
 loopy/schedule/tools.py                 | 3 +++
 loopy/statistics.py                     | 3 +++
 loopy/target/c/__init__.py              | 1 +
 loopy/target/c/c_execution.py           | 3 +++
 loopy/target/c/codegen/expression.py    | 3 +++
 loopy/target/cuda.py                    | 1 +
 loopy/target/execution.py               | 3 +++
 loopy/target/ispc.py                    | 1 +
 loopy/target/opencl.py                  | 1 +
 loopy/target/pyopencl_execution.py      | 3 +++
 loopy/target/python.py                  | 1 +
 loopy/tools.py                          | 3 +++
 loopy/transform/__init__.py             | 3 +++
 loopy/transform/add_barrier.py          | 3 +++
 loopy/transform/arithmetic.py           | 3 +++
 loopy/transform/array_buffer_map.py     | 3 +++
 loopy/transform/batch.py                | 3 +++
 loopy/transform/buffer.py               | 3 +++
 loopy/transform/callable.py             | 3 +++
 loopy/transform/concatenate.py          | 3 +++
 loopy/transform/data.py                 | 3 +++
 loopy/transform/diff.py                 | 3 +++
 loopy/transform/fusion.py               | 3 +++
 loopy/transform/iname.py                | 3 +++
 loopy/transform/instruction.py          | 3 +++
 loopy/transform/pack_and_unpack_args.py | 3 +++
 loopy/transform/padding.py              | 3 +++
 loopy/transform/parameter.py            | 3 +++
 loopy/transform/precompute.py           | 3 +++
 loopy/transform/privatize.py            | 3 +++
 loopy/transform/realize_reduction.py    | 3 +++
 loopy/transform/save.py                 | 3 +++
 loopy/transform/subst.py                | 3 +++
 loopy/type_inference.py                 | 3 +++
 loopy/version.py                        | 3 +++
 pyproject.toml                          | 8 ++++++++
 69 files changed, 185 insertions(+)

diff --git a/loopy/__init__.py b/loopy/__init__.py
index 01d69cf12..7a1942f3d 100644
--- a/loopy/__init__.py
+++ b/loopy/__init__.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/__main__.py b/loopy/__main__.py
index 630b93830..d8b61adc1 100644
--- a/loopy/__main__.py
+++ b/loopy/__main__.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import loopy.cli
 
 
diff --git a/loopy/auto_test.py b/loopy/auto_test.py
index 5b411658d..5c3f36d49 100644
--- a/loopy/auto_test.py
+++ b/loopy/auto_test.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/check.py b/loopy/check.py
index bf40c7b91..840698db7 100644
--- a/loopy/check.py
+++ b/loopy/check.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/cli.py b/loopy/cli.py
index 69c35fcea..4841f8e9f 100644
--- a/loopy/cli.py
+++ b/loopy/cli.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import sys
 
 import numpy as np
diff --git a/loopy/codegen/__init__.py b/loopy/codegen/__init__.py
index e9c19b309..cb9a67d01 100644
--- a/loopy/codegen/__init__.py
+++ b/loopy/codegen/__init__.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/codegen/bounds.py b/loopy/codegen/bounds.py
index a066d3425..e9467059d 100644
--- a/loopy/codegen/bounds.py
+++ b/loopy/codegen/bounds.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/codegen/control.py b/loopy/codegen/control.py
index 26e1b8f3d..ec4685d1a 100644
--- a/loopy/codegen/control.py
+++ b/loopy/codegen/control.py
@@ -1,4 +1,5 @@
 """Loop nest build top-level control/hoisting."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py
index 84dedc3ea..3b0195507 100644
--- a/loopy/codegen/instruction.py
+++ b/loopy/codegen/instruction.py
@@ -1,4 +1,5 @@
 """Code generation for Instruction objects."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
diff --git a/loopy/codegen/loop.py b/loopy/codegen/loop.py
index c64c2ea67..7b8a4f02f 100644
--- a/loopy/codegen/loop.py
+++ b/loopy/codegen/loop.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/codegen/result.py b/loopy/codegen/result.py
index 0f534592c..7f7804678 100644
--- a/loopy/codegen/result.py
+++ b/loopy/codegen/result.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2016 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/codegen/tools.py b/loopy/codegen/tools.py
index 783892f8e..2f314d17a 100644
--- a/loopy/codegen/tools.py
+++ b/loopy/codegen/tools.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2020 Kaushik Kulkarni"
 
 __license__ = """
diff --git a/loopy/diagnostic.py b/loopy/diagnostic.py
index 39e2fa591..be281158b 100644
--- a/loopy/diagnostic.py
+++ b/loopy/diagnostic.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/expression.py b/loopy/expression.py
index 2581ec022..e3eb65dc5 100644
--- a/loopy/expression.py
+++ b/loopy/expression.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012-15 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/frontend/fortran/__init__.py b/loopy/frontend/fortran/__init__.py
index 29986ddda..7c184f73c 100644
--- a/loopy/frontend/fortran/__init__.py
+++ b/loopy/frontend/fortran/__init__.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2013 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/frontend/fortran/diagnostic.py b/loopy/frontend/fortran/diagnostic.py
index b2ea02c05..5d3df2a21 100644
--- a/loopy/frontend/fortran/diagnostic.py
+++ b/loopy/frontend/fortran/diagnostic.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2009 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/frontend/fortran/expression.py b/loopy/frontend/fortran/expression.py
index 7b3200a94..ec0d36ba7 100644
--- a/loopy/frontend/fortran/expression.py
+++ b/loopy/frontend/fortran/expression.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2013 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/frontend/fortran/translator.py b/loopy/frontend/fortran/translator.py
index 860ed723c..5000abf84 100644
--- a/loopy/frontend/fortran/translator.py
+++ b/loopy/frontend/fortran/translator.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2013 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/frontend/fortran/tree.py b/loopy/frontend/fortran/tree.py
index 4abef5100..f1613b22f 100644
--- a/loopy/frontend/fortran/tree.py
+++ b/loopy/frontend/fortran/tree.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2009 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/ipython_ext.py b/loopy/ipython_ext.py
index ba734d8ba..92592bdba 100644
--- a/loopy/ipython_ext.py
+++ b/loopy/ipython_ext.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 from IPython.core.magic import Magics, cell_magic, magics_class
 
 import loopy as lp
diff --git a/loopy/isl_helpers.py b/loopy/isl_helpers.py
index 9fbb3c9d7..04d0bcd98 100644
--- a/loopy/isl_helpers.py
+++ b/loopy/isl_helpers.py
@@ -1,4 +1,6 @@
 """isl helpers"""
+from __future__ import annotations
+
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py
index a3fa94b3e..34508c04b 100644
--- a/loopy/kernel/__init__.py
+++ b/loopy/kernel/__init__.py
@@ -1,4 +1,6 @@
 """Kernel object."""
+from __future__ import annotations
+
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
diff --git a/loopy/kernel/creation.py b/loopy/kernel/creation.py
index f8f854476..e7228468c 100644
--- a/loopy/kernel/creation.py
+++ b/loopy/kernel/creation.py
@@ -1,4 +1,5 @@
 """UI for kernel creation."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
diff --git a/loopy/kernel/instruction.py b/loopy/kernel/instruction.py
index a5cefd806..9672409da 100644
--- a/loopy/kernel/instruction.py
+++ b/loopy/kernel/instruction.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2016 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/kernel/tools.py b/loopy/kernel/tools.py
index 66740efc9..88730649b 100644
--- a/loopy/kernel/tools.py
+++ b/loopy/kernel/tools.py
@@ -1,4 +1,5 @@
 """Operations on the kernel object."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
diff --git a/loopy/library/function.py b/loopy/library/function.py
index 7d274e492..c7802444e 100644
--- a/loopy/library/function.py
+++ b/loopy/library/function.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/library/random123.py b/loopy/library/random123.py
index 329770e05..f47652000 100644
--- a/loopy/library/random123.py
+++ b/loopy/library/random123.py
@@ -1,4 +1,5 @@
 """Library integration with Random123."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2016 Andreas Kloeckner"
diff --git a/loopy/library/reduction.py b/loopy/library/reduction.py
index b66858d23..2935a6629 100644
--- a/loopy/library/reduction.py
+++ b/loopy/library/reduction.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/loop.py b/loopy/loop.py
index 001cd80a8..9903474c9 100644
--- a/loopy/loop.py
+++ b/loopy/loop.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/match.py b/loopy/match.py
index ae52e6c65..07e5c6cfa 100644
--- a/loopy/match.py
+++ b/loopy/match.py
@@ -1,5 +1,6 @@
 """Matching functionality for instruction ids and substitution
 rule invocations stacks."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
diff --git a/loopy/options.py b/loopy/options.py
index 1c798f7a8..ebf0b147c 100644
--- a/loopy/options.py
+++ b/loopy/options.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2013 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/preprocess.py b/loopy/preprocess.py
index 254baefe1..b6ecfec33 100644
--- a/loopy/preprocess.py
+++ b/loopy/preprocess.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/schedule/device_mapping.py b/loopy/schedule/device_mapping.py
index c5c65385c..226757dea 100644
--- a/loopy/schedule/device_mapping.py
+++ b/loopy/schedule/device_mapping.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2016 Matt Wala"
 
 __license__ = """
diff --git a/loopy/schedule/tools.py b/loopy/schedule/tools.py
index f75e2c005..e5a962ec6 100644
--- a/loopy/schedule/tools.py
+++ b/loopy/schedule/tools.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = """
 Copyright (C) 2016 Matt Wala
 Copyright (C) 2020 University of Illinois Board of Trustees
diff --git a/loopy/statistics.py b/loopy/statistics.py
index 3ef09758d..1b0a36489 100755
--- a/loopy/statistics.py
+++ b/loopy/statistics.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = """
 Copyright (C) 2015 James Stevens
 Copyright (C) 2018 Kaushik Kulkarni
diff --git a/loopy/target/c/__init__.py b/loopy/target/c/__init__.py
index 9a35207e5..9759b595d 100644
--- a/loopy/target/c/__init__.py
+++ b/loopy/target/c/__init__.py
@@ -1,4 +1,5 @@
 """Plain C target and base for other C-family languages."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
diff --git a/loopy/target/c/c_execution.py b/loopy/target/c/c_execution.py
index 8e9466483..1fa7738f1 100644
--- a/loopy/target/c/c_execution.py
+++ b/loopy/target/c/c_execution.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2017 Nick Curtis"
 
 __license__ = """
diff --git a/loopy/target/c/codegen/expression.py b/loopy/target/c/codegen/expression.py
index 82e0bb190..2dea1afc0 100644
--- a/loopy/target/c/codegen/expression.py
+++ b/loopy/target/c/codegen/expression.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/target/cuda.py b/loopy/target/cuda.py
index e7eb7863a..ee8ae3616 100644
--- a/loopy/target/cuda.py
+++ b/loopy/target/cuda.py
@@ -1,4 +1,5 @@
 """CUDA target independent of PyCUDA."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
diff --git a/loopy/target/execution.py b/loopy/target/execution.py
index 83c858e3d..7f52288e6 100644
--- a/loopy/target/execution.py
+++ b/loopy/target/execution.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012-17 Andreas Kloeckner, Nick Curtis"
 
 __license__ = """
diff --git a/loopy/target/ispc.py b/loopy/target/ispc.py
index 0d171d3ea..b71db4e7b 100644
--- a/loopy/target/ispc.py
+++ b/loopy/target/ispc.py
@@ -1,4 +1,5 @@
 """Target for Intel ISPC."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
diff --git a/loopy/target/opencl.py b/loopy/target/opencl.py
index 8c8f7903d..9b99ed3d2 100644
--- a/loopy/target/opencl.py
+++ b/loopy/target/opencl.py
@@ -1,4 +1,5 @@
 """OpenCL target independent of PyOpenCL."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
diff --git a/loopy/target/pyopencl_execution.py b/loopy/target/pyopencl_execution.py
index 02781a8d9..8afa8ac7b 100644
--- a/loopy/target/pyopencl_execution.py
+++ b/loopy/target/pyopencl_execution.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/target/python.py b/loopy/target/python.py
index a419e6e35..3329b1995 100644
--- a/loopy/target/python.py
+++ b/loopy/target/python.py
@@ -1,4 +1,5 @@
 """Python host AST builder for integration with PyOpenCL."""
+from __future__ import annotations
 
 
 __copyright__ = "Copyright (C) 2016 Andreas Kloeckner"
diff --git a/loopy/tools.py b/loopy/tools.py
index 31c9176d9..f4c93dafe 100644
--- a/loopy/tools.py
+++ b/loopy/tools.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/__init__.py b/loopy/transform/__init__.py
index 625781167..9a205fe23 100644
--- a/loopy/transform/__init__.py
+++ b/loopy/transform/__init__.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/add_barrier.py b/loopy/transform/add_barrier.py
index e41120656..16ebaa5c0 100644
--- a/loopy/transform/add_barrier.py
+++ b/loopy/transform/add_barrier.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2017 Kaushik Kulkarni"
 
 __license__ = """
diff --git a/loopy/transform/arithmetic.py b/loopy/transform/arithmetic.py
index b527c087b..8ad7d658b 100644
--- a/loopy/transform/arithmetic.py
+++ b/loopy/transform/arithmetic.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/array_buffer_map.py b/loopy/transform/array_buffer_map.py
index 5e8e56234..bd6c3dea7 100644
--- a/loopy/transform/array_buffer_map.py
+++ b/loopy/transform/array_buffer_map.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012-2015 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/batch.py b/loopy/transform/batch.py
index 857f7d48d..3a755746e 100644
--- a/loopy/transform/batch.py
+++ b/loopy/transform/batch.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/buffer.py b/loopy/transform/buffer.py
index 9b5bae648..f113e453d 100644
--- a/loopy/transform/buffer.py
+++ b/loopy/transform/buffer.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012-2015 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/callable.py b/loopy/transform/callable.py
index 0c0b22a28..e5ca4d0a4 100644
--- a/loopy/transform/callable.py
+++ b/loopy/transform/callable.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2018 Kaushik Kulkarni"
 
 __license__ = """
diff --git a/loopy/transform/concatenate.py b/loopy/transform/concatenate.py
index cd095c462..9d396ed3e 100644
--- a/loopy/transform/concatenate.py
+++ b/loopy/transform/concatenate.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2022 Isuru Fernando"
 
 __license__ = """
diff --git a/loopy/transform/data.py b/loopy/transform/data.py
index b4fc190da..51bcb6152 100644
--- a/loopy/transform/data.py
+++ b/loopy/transform/data.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/diff.py b/loopy/transform/diff.py
index 6c2688d90..c29a1895a 100644
--- a/loopy/transform/diff.py
+++ b/loopy/transform/diff.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/fusion.py b/loopy/transform/fusion.py
index 8e047c036..b16d837f6 100644
--- a/loopy/transform/fusion.py
+++ b/loopy/transform/fusion.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/iname.py b/loopy/transform/iname.py
index 2dbba93e3..ef4cd9060 100644
--- a/loopy/transform/iname.py
+++ b/loopy/transform/iname.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/instruction.py b/loopy/transform/instruction.py
index 494bbf0bc..eb7cc2888 100644
--- a/loopy/transform/instruction.py
+++ b/loopy/transform/instruction.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/pack_and_unpack_args.py b/loopy/transform/pack_and_unpack_args.py
index ca897e003..9dc5f9a9b 100644
--- a/loopy/transform/pack_and_unpack_args.py
+++ b/loopy/transform/pack_and_unpack_args.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2018 Tianjiao Sun, Kaushik Kulkarni"
 
 __license__ = """
diff --git a/loopy/transform/padding.py b/loopy/transform/padding.py
index 76deccc44..9afc28f9f 100644
--- a/loopy/transform/padding.py
+++ b/loopy/transform/padding.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/parameter.py b/loopy/transform/parameter.py
index fb1bc0b71..73732a16b 100644
--- a/loopy/transform/parameter.py
+++ b/loopy/transform/parameter.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/precompute.py b/loopy/transform/precompute.py
index 10fcdae01..5488dd9ec 100644
--- a/loopy/transform/precompute.py
+++ b/loopy/transform/precompute.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/privatize.py b/loopy/transform/privatize.py
index ca31368d2..6e7eb1fb6 100644
--- a/loopy/transform/privatize.py
+++ b/loopy/transform/privatize.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2015 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/transform/realize_reduction.py b/loopy/transform/realize_reduction.py
index f42a8ce14..cc94c3105 100644
--- a/loopy/transform/realize_reduction.py
+++ b/loopy/transform/realize_reduction.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = """
 Copyright (C) 2012 Andreas Kloeckner
 Copyright (C) 2022 University of Illinois Board of Trustees
diff --git a/loopy/transform/save.py b/loopy/transform/save.py
index 2b874f679..e1dbfd99d 100644
--- a/loopy/transform/save.py
+++ b/loopy/transform/save.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2016 Matt Wala"
 
 __license__ = """
diff --git a/loopy/transform/subst.py b/loopy/transform/subst.py
index 9c3bafdab..3ca981aa0 100644
--- a/loopy/transform/subst.py
+++ b/loopy/transform/subst.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/type_inference.py b/loopy/type_inference.py
index f94683407..b3c6ffddd 100644
--- a/loopy/type_inference.py
+++ b/loopy/type_inference.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012-16 Andreas Kloeckner"
 
 __license__ = """
diff --git a/loopy/version.py b/loopy/version.py
index 2ed932d5e..8e350caf8 100644
--- a/loopy/version.py
+++ b/loopy/version.py
@@ -1,3 +1,6 @@
+from __future__ import annotations
+
+
 __copyright__ = "Copyright (C) 2012 Andreas Kloeckner"
 
 __license__ = """
diff --git a/pyproject.toml b/pyproject.toml
index 7012d6363..e968c8d3c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -100,6 +100,7 @@ extend-select = [
     # TODO
     # "UP",  # pyupgrade
     "RUF",  # ruff
+    "FA",
 ]
 extend-ignore = [
     "C90",  # McCabe complexity
@@ -118,6 +119,12 @@ extend-ignore = [
 "loopy/target/c/compyte/ndarray/**/*.py" = ["Q", "B", "E", "F", "N", "C4"]
 "loopy/frontend/fortran/translator.py" = ["N802", "B028"]
 "proto-tests/*.py" = ["B"]
+"contrib/**/*.py" = ["I002"]
+"doc/conf.py" = ["I002"]
+"*.ipynb" = ["I002"]
+"examples/**/*.py" = ["I002"]
+"proto-tests/**/*.py" = ["I002"]
+"test/**/*.py" = ["I002"]
 
 [tool.ruff.lint.flake8-quotes]
 docstring-quotes = "double"
@@ -138,6 +145,7 @@ known-local-folder = [
     "loopy",
 ]
 lines-after-imports = 2
+required-imports = ["from __future__ import annotations"]
 
 [tool.mypy]
 python_version = "3.10"
-- 
GitLab