diff --git a/loopy/__init__.py b/loopy/__init__.py
index 01d69cf12860fd03b4a0861b08dc406e9d4aeac2..7a1942f3d9446e71560f457239f182791f66472d 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 630b93830dda7f68acdd91bbf70d159e1c7be74a..d8b61adc192f6e6e7b164400bae35ff9758d29b1 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 5b411658da37b5e70cfcdfa77900d4293003fd96..5c3f36d4991ae30092ec7ee90aa1a495c991c6ba 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 bf40c7b9121cc427d49791934342e73595772716..840698db7eaab2c90338dc2b2fe484c4118941b0 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 69c35fceac605e2bf10e5a7d550512d6050b351e..4841f8e9f89d271cf2e57463727854820c977e22 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 e9c19b309cbbda94d5833bca4dc86c25cadbf0d4..cb9a67d01071bd66bc43fd9cb329deb3e54700a7 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 a066d342553dd6691b3860b8e663c5fc681ddd10..e9467059d5fe11990b92daddc555c7484bed1713 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 26e1b8f3da134e2523fd6c9f2be2b30db0905b15..ec4685d1ae7b53ed37c00ed8ab30a8ba84f2e3d2 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 84dedc3eaacd4163022934604fe8c2a263c797cf..3b0195507aa1024aff71b3d3810faa3a7d9a2375 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 c64c2ea67363dab79bbef9977e68be2c3134838c..7b8a4f02f2ba4c76ca3b60ec6e5bb62592b9e0ec 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 0f534592cfa5fc4e7a7fab73d9d6d20573f330d6..7f7804678ccc0559d8a0caea68eb05a1c52b2a8a 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 783892f8e0fae82a40dd2058c80b4ff6c7d1086f..2f314d17a569a8adf41fbe087e025de4d84b36b4 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 39e2fa591fea7eababb91e106fe90122e253982e..be281158b76b8f639bdecf698c80239e1a813c5a 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 2581ec022631c8e6a24b07345370c4aa20915c16..e3eb65dc5c6e100d427f78dfd7e8da41d21e9b17 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 29986ddda0d6f896f9e5cb45aea2e8f2c74ff3bd..7c184f73c010ca9afe26be7a530818e7a4ec0396 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 b2ea02c05b53e132dddaa5d8102620e4941f35cd..5d3df2a2173a81a58af19c846df51707a44dc278 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 7b3200a94166d37a1c064a24da6e4464b6abb93e..ec0d36ba7597f2a8f3dedb31748d975a6b6cb816 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 860ed723cf9ad4216edbe91370d5589acde79734..5000abf848af9c9fb633813a6475c07e7f69b1e5 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 4abef510051b1bb50eb3725f235bc0d5aee77898..f1613b22fe08e656c98be744cf96066c232c9184 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 ba734d8ba87fc4d20055194d3070cc7bf24998c9..92592bdba7dfc2444c8454c747d94354f4b4c677 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 9fbb3c9d706e4d0f8c32f42edf01cd5ab400855c..04d0bcd98f4c7cf63397424bc4e3853f15a21988 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 a3fa94b3e38006d2260b60f533cd9ed7d4a8a91a..34508c04b9a6e181f0a4f07b55c05f133938ab4a 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 f8f854476d45fe7fd50665eb0fb416ff480b3f2c..e7228468c27e29a57ed9f39f26b82964af4c1038 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 a5cefd8066626a5e653782aabf5482565634f3c0..9672409da01a626a09598e845d2aa0ccdd5b5fd1 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 66740efc9b8205ac4c56391c6802dda9bec72b4e..88730649bbe99995dc044318837c4d6076e63e57 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 7d274e492db76bf1e4648943baabdcf10a4c90f8..c7802444e7a59b2cfe0ef79605f5ef6ce878fd8d 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 329770e05f7ec486198a755d7f060d1e909c3388..f476520006ee274d2143e174665663261c28f51d 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 b66858d238fff1192be49d4cf4ca0b410b64f646..2935a6629f06d8e011d50705d3b8d5e4894dcdfc 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 001cd80a880df9566c4c128957565777c6b7827e..9903474c9ffbca8c98a77a8c40fd76139bd61baa 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 ae52e6c65e0459dda940e3c89500d34264227f0d..07e5c6cfa1307165b261dc05db7e8e977f3240d9 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 1c798f7a8dd70ae9d463055d7d40c31305c4295b..ebf0b147cd7943adc75083d0b206294436a104db 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 254baefe1db5fdccf1b382da444edfdb7e9c15f8..b6ecfec333cbb913db713f73db2bed5d88f910cc 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 c5c65385cc1bbc832973a6feed277d2a3bc0eb63..226757dea398b8a8a4005d54f3ace8fbc3245648 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 f75e2c005f6198f8bf2f6f28f0b6512862928afe..e5a962ec61c7c1109b0f49d3d6ca2eec3dec598c 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 3ef09758d5bfd0dd57f9aab6fc310d13fa0427d6..1b0a364893855ee6dd2fafe9656bb769e7c08bb3 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 9a35207e55454805a671878f42892ab575697dea..9759b595d90a6ffaf53d8f5d9b87d75b1a0567aa 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 8e946648377257ea3920a64d393a407df0d1bb21..1fa7738f16186be52392de90e7e07bdd81fe627a 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 82e0bb190f5c7eb165196b7a7c81475c2f6ba83d..2dea1afc06193331f69ae9d610f6a845b78537ab 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 e7eb7863a8e554629511174aa12eb038077c7958..ee8ae36164fa837f159df5e46e12ad147b22eb92 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 83c858e3d5ee8d5ca03f0b6dcb76f35ef12b6b33..7f52288e6f0caf775230e5a05f5fa27b290faa68 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 0d171d3ea415175a44f95b43f58486166d02f762..b71db4e7baf7c418066657ab87cdb8b5d1e67946 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 8c8f7903defed28f1f1906055acac5c8b4d5095f..9b99ed3d24f0f5578273d86cda8e9d8e2a9c586c 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 02781a8d99245c33f7e16c4ccc40027d57f9fa98..8afa8ac7b0f927100117f6e08223a3cba8b3ae1b 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 a419e6e358ab98c3584fd97c434b243240c072ed..3329b19953394292dcd938ffbb632e75f6cadf95 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 31c9176d9ad2b43545c9cea677ef384f40998019..f4c93dafe3cee6918194e3dbea9b1f78d0b5737b 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 625781167db6aa502153cdcebd225d79e95c46b6..9a205fe23c512e7011e051038cba2f7162f9965f 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 e41120656fa03f8cea1eeb90a088957b9fdb4671..16ebaa5c01e7b60a39e82df6247cf14f34406a38 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 b527c087bc7ef36eb0d295905ec99348b83dade6..8ad7d658b2aec93d2adc308c0605fc92556d0646 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 5e8e56234bb41efa91bc1da56d7aa83d51c764d8..bd6c3dea7c5afd0bdd9e2425cf3187d478c42015 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 857f7d48dd882ca5f49e1b5b9e0b9e05d1fcab0d..3a755746ed83cb20f2cdd98802d4e2550554122f 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 9b5bae648b36a39d20ee72583257738fa4c24091..f113e453d9a043e80a16432453e8e01e7e0f2ab3 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 0c0b22a284fb5fc1fd94bf2b6a47bf8c73b47faa..e5ca4d0a47d4996983316ce00986218024005368 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 cd095c4624a2da06531744e8e2c4ab503e1917a2..9d396ed3ea3a00ded96a2cf76558a2f9fb8452c8 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 b4fc190da609620134926e16e24f042d7853d240..51bcb61523cd248019c2e6b9ead7d9d28ed55cfb 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 6c2688d9015d47582a8aed73cc5033103970be04..c29a1895aa92511c02a1fd930c5c275e4811a983 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 8e047c036d51dc48741a35cb2d1e8d2bef567c65..b16d837f607c427803e8b4299f53bbf269bc6ca5 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 2dbba93e35af5578d80cc87bbadbab43262ba35f..ef4cd9060478b4a0dbe7da6e959eca4370b18a1b 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 494bbf0bcc1bc52aeeb0fbe82c354e995dcd528d..eb7cc2888cf8e9d4d152e6d0ab3a4befacddbfc8 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 ca897e00362751427798c3ff99ab28b24361dbf9..9dc5f9a9b3d0dbe881f3bf8d00f932ef18f5dbff 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 76deccc44beb5873527f0f7fb33290f030f98b9d..9afc28f9fb8dae52b0f4a0f5f7e14ae368784b56 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 fb1bc0b71923d2e8201c68fd07df768aeaf7b610..73732a16b896487b9cc4ded6f251e5be63418dea 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 10fcdae01a77f1132baa3ec173ba45e5a388e6f3..5488dd9ec984b8fa62cbe51bd91e0f1aaa555b4d 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 ca31368d205702d34366be59e56a0236196912b9..6e7eb1fb6501fe3e4ca020bb56a1b2741e81234e 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 f42a8ce14ce4c92a948084a19aa80112d3cc4917..cc94c3105138128c646dfd6cce19af159f49d449 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 2b874f679e20d4876aeb59801bcd9e76eb807883..e1dbfd99dd2db4bf33388d15d5a3f2490e1399de 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 9c3bafdabf480bb04c79daf106e0f0263f215e14..3ca981aa09600c7c2a9466af3a664f5fa307657d 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 f94683407743193de04ba8b07de9bd99f61927f6..b3c6ffddd40e84354ab927f3c2c535bf0c9a675c 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 2ed932d5e41480d1a1b10453e262782e9b3b98b7..8e350caf8d714cb96fb0d1057b0e89d87597675c 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 7012d63630e7ce881f6dda8b978441d7bad5826b..e968c8d3c767041c15d778dac29979b3171ea054 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"