diff --git a/.all-contributorsrc b/.all-contributorsrc
index 2927e3a..8af4810 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -171,7 +171,8 @@
"profile": "https://github.com/crusaderky",
"contributions": [
"code",
- "doc"
+ "doc",
+ "tool"
]
}
]
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 41beb38..2f33e32 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -12,7 +12,7 @@ repos:
additional_dependencies: [black==24.*]
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: "v4.6.0"
+ rev: "v5.0.0"
hooks:
- id: check-added-large-files
- id: check-case-conflict
@@ -35,14 +35,14 @@ repos:
- id: rst-inline-touching-normal
- repo: https://github.com/rbubley/mirrors-prettier
- rev: "v3.3.3"
+ rev: "v3.4.2"
hooks:
- id: prettier
types_or: [yaml, markdown, html, css, scss, javascript, json]
args: [--prose-wrap=always]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: "v0.6.1"
+ rev: "v0.8.2"
hooks:
- id: ruff
args: ["--fix", "--show-fixes"]
@@ -68,13 +68,13 @@ repos:
exclude: .pre-commit-config.yaml
- repo: https://github.com/abravalheri/validate-pyproject
- rev: "v0.19"
+ rev: "v0.23"
hooks:
- id: validate-pyproject
additional_dependencies: ["validate-pyproject-schema-store[all]"]
- repo: https://github.com/python-jsonschema/check-jsonschema
- rev: "0.29.1"
+ rev: "0.30.0"
hooks:
- id: check-dependabot
- id: check-github-workflows
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index f311f3c..f5c71f3 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -28,7 +28,7 @@ This project exists thanks to the following contributors
Olivier Grisel 💻
- Guido Imperiale 💻 📖
+ Guido Imperiale 💻 📖 🔧
diff --git a/README.md b/README.md
index 6f675b6..3e48c5c 100644
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ This project exists thanks to the following contributors
Olivier Grisel 💻
- Guido Imperiale 💻 📖
+ Guido Imperiale 💻 📖 🔧
diff --git a/docs/conf.py b/docs/conf.py
index 5b2fdf0..f2b4827 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
import importlib.metadata
from typing import Any
@@ -38,7 +36,7 @@
- """,
+ """, # noqa: E501
"class": "",
},
],
diff --git a/docs/contributing.md b/docs/contributing.md
index b1f8b90..221021d 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -43,13 +43,25 @@ pixi shell -e dev
pixi run tests
```
+- To generate the coverage report:
+
+```
+pixi run coverage
+```
+
+- To generate and display the coverage report:
+
+```
+pixi run open-coverage
+```
+
- To build the docs locally:
```
pixi run docs
```
-- To open and preview the locally-built docs:
+- To build and preview the docs locally:
```
pixi run open-docs
diff --git a/pixi.lock b/pixi.lock
index 02ecf72..8922082 100644
--- a/pixi.lock
+++ b/pixi.lock
@@ -77,7 +77,7 @@ environments:
- conda: https://prefix.dev/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcblas-3.9.0-25_linux64_openblas.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda
+ - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2
- conda: https://prefix.dev/conda-forge/linux-64/libev-4.33-hd590300_2.conda
@@ -258,7 +258,7 @@ environments:
- conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda
+ - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.5-ha82da77_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2
@@ -418,7 +418,7 @@ environments:
- conda: https://prefix.dev/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda
- conda: https://prefix.dev/conda-forge/win-64/libcblas-3.9.0-25_win64_mkl.conda
- conda: https://prefix.dev/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda
+ - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda
- conda: https://prefix.dev/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2
@@ -1282,7 +1282,6 @@ environments:
- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
- conda: https://prefix.dev/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda
- conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda
- conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_1.conda
- conda: https://prefix.dev/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2
@@ -1347,7 +1346,6 @@ environments:
- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda
- conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda
- conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_1.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2
@@ -1409,7 +1407,6 @@ environments:
- conda: https://prefix.dev/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
- conda: https://prefix.dev/conda-forge/win-64/tk-8.6.13-h5226925_1.conda
- conda: https://prefix.dev/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
- - conda: https://prefix.dev/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda
- conda: https://prefix.dev/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
- conda: https://prefix.dev/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
- conda: https://prefix.dev/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_1.conda
@@ -1853,7 +1850,7 @@ environments:
- conda: https://prefix.dev/conda-forge/linux-64/libcublas-12.6.4.1-hbd13f7d_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcufft-11.3.0.4-hbd13f7d_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcurand-10.3.7.77-hbd13f7d_0.conda
- - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda
+ - conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.1.2-hbd13f7d_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libcusparse-12.5.4.2-hbd13f7d_0.conda
- conda: https://prefix.dev/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda
@@ -2037,7 +2034,7 @@ environments:
- conda: https://prefix.dev/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2
- - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda
+ - conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libcxx-19.1.5-ha82da77_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda
- conda: https://prefix.dev/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2
@@ -2209,7 +2206,7 @@ environments:
- conda: https://prefix.dev/conda-forge/win-64/libcublas-12.6.4.1-he0c23c2_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libcufft-11.3.0.4-he0c23c2_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libcurand-10.3.7.77-he0c23c2_0.conda
- - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda
+ - conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libcusolver-11.7.1.2-he0c23c2_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libcusparse-12.5.4.2-he0c23c2_0.conda
- conda: https://prefix.dev/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda
@@ -2375,7 +2372,7 @@ packages:
- pypi: .
name: array-api-extra
version: 0.3.3.dev0
- sha256: 52e5da2099fdd55e47b65ffaf48730c1058dc707527417b45f0d957d3fba2c21
+ sha256: 7ba8cb6d98a007057ffaae677dc0d0443c107297eebeee6b993c41a0b58a2c51
requires_dist:
- furo>=2023.8.17 ; extra == 'docs'
- myst-parser>=0.13 ; extra == 'docs'
@@ -5373,45 +5370,45 @@ packages:
purls: []
size: 43727889
timestamp: 1727808369048
-- conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda
- sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99
- md5: 6e801c50a40301f6978c53976917b277
+- conda: https://prefix.dev/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda
+ sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906
+ md5: 2b3e0081006dc21e8bf53a91c83a055c
depends:
- __glibc >=2.17,<3.0.a0
- krb5 >=1.21.3,<1.22.0a0
- libgcc >=13
- - libnghttp2 >=1.58.0,<2.0a0
- - libssh2 >=1.11.0,<2.0a0
+ - libnghttp2 >=1.64.0,<2.0a0
+ - libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- - openssl >=3.3.2,<4.0a0
+ - openssl >=3.4.0,<4.0a0
- zstd >=1.5.6,<1.6.0a0
license: curl
license_family: MIT
purls: []
- size: 424900
- timestamp: 1726659794676
-- conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda
- sha256: 983a977c5627f975a930542c8aabb46089ec6ea72f28d9c4d3ee8eafaf2fc25a
- md5: d84030d0863ffe7dea00b9a807fee961
+ size: 423011
+ timestamp: 1733999897624
+- conda: https://prefix.dev/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda
+ sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6
+ md5: 46d7524cabfdd199bffe63f8f19a552b
depends:
- __osx >=11.0
- krb5 >=1.21.3,<1.22.0a0
- - libnghttp2 >=1.58.0,<2.0a0
- - libssh2 >=1.11.0,<2.0a0
+ - libnghttp2 >=1.64.0,<2.0a0
+ - libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- - openssl >=3.3.2,<4.0a0
+ - openssl >=3.4.0,<4.0a0
- zstd >=1.5.6,<1.6.0a0
license: curl
license_family: MIT
purls: []
- size: 379948
- timestamp: 1726660033582
-- conda: https://prefix.dev/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda
- sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8
- md5: 7ead800e22ff7b4bccb73e42a8f7a0f4
+ size: 385098
+ timestamp: 1734000160270
+- conda: https://prefix.dev/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda
+ sha256: 1a67f01da0e35296c6d1fdf6baddc45ad3cc2114132ff4638052eb7cf258aab2
+ md5: 071d3f18dba5a6a13c6bb70cdb42678f
depends:
- krb5 >=1.21.3,<1.22.0a0
- - libssh2 >=1.11.0,<2.0a0
+ - libssh2 >=1.11.1,<2.0a0
- libzlib >=1.3.1,<2.0a0
- ucrt >=10.0.20348.0
- vc >=14.2,<15
@@ -5419,8 +5416,8 @@ packages:
license: curl
license_family: MIT
purls: []
- size: 342388
- timestamp: 1726660508261
+ size: 349553
+ timestamp: 1734000095720
- conda: https://prefix.dev/conda-forge/linux-64/libcusolver-11.7.1.2-hbd13f7d_0.conda
sha256: 3de5457807dd30f9509863324cfbe9d74d20f477dfeb5ed7de68bbb3da4064bd
md5: 035db50d5e949de81e015df72a834e79
diff --git a/pyproject.toml b/pyproject.toml
index fd4aed1..bd50a4d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -78,7 +78,6 @@ pre-commit = "*"
pylint = "*"
basedmypy = "*"
basedpyright = "*"
-typing_extensions = ">=4.12.2,<4.13"
# import dependencies for mypy:
array-api-strict = "*"
numpy = "*"
@@ -86,7 +85,7 @@ pytest = "*"
[tool.pixi.feature.lint.tasks]
pre-commit-install = { cmd = "pre-commit install" }
-pre-commit = { cmd = "pre-commit run -v --all-files --show-diff-on-failure" }
+pre-commit = { cmd = "pre-commit run --all-files" }
mypy = { cmd = "mypy", cwd = "." }
pylint = { cmd = ["pylint", "array_api_extra"], cwd = "src" }
pyright = { cmd = "basedpyright", cwd = "." }
@@ -99,9 +98,11 @@ array-api-strict = "*"
numpy = "*"
[tool.pixi.feature.tests.tasks]
-tests = { cmd = "pytest" }
-tests-ci = { cmd = "pytest -ra --cov --cov-report=xml --cov-report=term --durations=20" }
+tests = { cmd = "pytest -v" }
+tests-ci = { cmd = "pytest -v -ra --cov --cov-report=xml --cov-report=term --durations=20" }
tests-vendor = { cmd = "pytest vendor_tests" }
+coverage = { cmd = ["coverage", "html"], depends-on = ["tests-ci"] }
+open-coverage = { cmd = ["open", "htmlcov/index.html"], depends-on = ["coverage"] }
[tool.pixi.feature.docs.dependencies]
sphinx = ">=7.0"
@@ -109,11 +110,10 @@ furo = ">=2023.08.17"
myst-parser = ">=0.13"
sphinx-copybutton = "*"
sphinx-autodoc-typehints = "*"
-typing_extensions = ">=4.12.2,<4.13"
[tool.pixi.feature.docs.tasks]
docs = { cmd = ["sphinx-build", ".", "build/"], cwd = "docs" }
-open-docs = { cmd = ["open", "build/index.html"], cwd = "docs" }
+open-docs = { cmd = ["open", "build/index.html"], cwd = "docs", depends-on = ["docs"] }
[tool.pixi.feature.dev.dependencies]
ipython = "*"
@@ -189,6 +189,7 @@ run.source = ["array_api_extra"]
report.exclude_also = [
'\.\.\.',
'if typing.TYPE_CHECKING:',
+ 'if TYPE_CHECKING:',
]
@@ -237,11 +238,16 @@ target-version = "py310"
[tool.ruff.lint]
extend-select = [
"B", # flake8-bugbear
+ "F", # Pyflakes
"I", # isort
+ "E", # Pycodestyle
+ "W", # Pycodestyle
+ "N", # pep8-naming
"ARG", # flake8-unused-arguments
"C4", # flake8-comprehensions
"EM", # flake8-errmsg
"ICN", # flake8-import-conventions
+ "ISC", # flake8-implicit-str-concat
"G", # flake8-logging-format
"PGH", # pygrep-hooks
"PIE", # flake8-pie
@@ -257,11 +263,15 @@ extend-select = [
"EXE", # flake8-executable
"NPY", # NumPy specific rules
"PD", # pandas-vet
+ "UP", # Pyupgrade
]
ignore = [
"PLR09", # Too many <...>
"PLR2004", # Magic value used in comparison
"ISC001", # Conflicts with formatter
+ "N801", # Class name should use CapWords convention
+ "N802", # Function name should be lowercase
+ "N806", # Variable in function should be lowercase
"PD008", # Use `.loc` instead of `.at`
]
diff --git a/src/array_api_extra/__init__.py b/src/array_api_extra/__init__.py
index bd676fe..500951f 100644
--- a/src/array_api_extra/__init__.py
+++ b/src/array_api_extra/__init__.py
@@ -1,5 +1,3 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
from ._funcs import (
at,
atleast_nd,
diff --git a/src/array_api_extra/_funcs.py b/src/array_api_extra/_funcs.py
index e20bffb..b8df29b 100644
--- a/src/array_api_extra/_funcs.py
+++ b/src/array_api_extra/_funcs.py
@@ -1,7 +1,6 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
+from __future__ import annotations
import operator
-import typing
import warnings
# https://github.com/pylint-dev/pylint/issues/10112
@@ -14,9 +13,7 @@
is_jax_array,
is_writeable_array,
)
-
-if typing.TYPE_CHECKING:
- from ._lib._typing import Array, Index, ModuleType
+from ._lib._typing import Array, Index, ModuleType
__all__ = [
"at",
diff --git a/src/array_api_extra/_lib/_compat.py b/src/array_api_extra/_lib/_compat.py
index f83779b..f2c7c1d 100644
--- a/src/array_api_extra/_lib/_compat.py
+++ b/src/array_api_extra/_lib/_compat.py
@@ -1,6 +1,5 @@
# Allow packages that vendor both `array-api-extra` and
# `array-api-compat` to override the import location
-from __future__ import annotations
try:
from ..._array_api_compat_vendor import ( # pyright: ignore[reportMissingImports]
diff --git a/src/array_api_extra/_lib/_typing.py b/src/array_api_extra/_lib/_typing.py
index 0e388a1..101afd9 100644
--- a/src/array_api_extra/_lib/_typing.py
+++ b/src/array_api_extra/_lib/_typing.py
@@ -1,25 +1,10 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
from types import ModuleType
from typing import Any
-if typing.TYPE_CHECKING:
- from typing_extensions import override
-
- # To be changed to a Protocol later (see data-apis/array-api#589)
- Untyped = Any # type: ignore[no-any-explicit]
- Array = Untyped
- Device = Untyped
- Index = Untyped
-
-else:
-
- def no_op_decorator(f): # pyright: ignore[reportUnreachable]
- return f
-
- override = no_op_decorator
+# To be changed to a Protocol later (see data-apis/array-api#589)
+Untyped = Any # type: ignore[no-any-explicit]
+Array = Untyped
+Device = Untyped
+Index = Untyped
-__all__ = ["ModuleType", "override"]
-if typing.TYPE_CHECKING:
- __all__ += ["Array", "Device", "Index", "Untyped"]
+__all__ = ["Array", "Device", "Index", "ModuleType", "Untyped"]
diff --git a/src/array_api_extra/_lib/_utils.py b/src/array_api_extra/_lib/_utils.py
index 15e33d6..6e58968 100644
--- a/src/array_api_extra/_lib/_utils.py
+++ b/src/array_api_extra/_lib/_utils.py
@@ -1,11 +1,5 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
-
-if typing.TYPE_CHECKING:
- from ._typing import Array, ModuleType
-
from . import _compat
+from ._typing import Array, ModuleType
__all__ = ["in1d", "mean"]
diff --git a/tests/test_funcs.py b/tests/test_funcs.py
index 488636e..d6e8930 100644
--- a/tests/test_funcs.py
+++ b/tests/test_funcs.py
@@ -1,7 +1,4 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
import contextlib
-import typing
import warnings
# data-apis/array-api-strict#6
@@ -19,9 +16,7 @@
setdiff1d,
sinc,
)
-
-if typing.TYPE_CHECKING:
- from array_api_extra._lib._typing import Array
+from array_api_extra._lib._typing import Array
class TestAtLeastND:
diff --git a/tests/test_utils.py b/tests/test_utils.py
index fbab9c4..1807627 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -1,17 +1,11 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
-import typing
-
# data-apis/array-api-strict#6
import array_api_strict as xp # type: ignore[import-untyped] # pyright: ignore[reportMissingTypeStubs]
import pytest
from numpy.testing import assert_array_equal
+from array_api_extra._lib._typing import Array
from array_api_extra._lib._utils import in1d
-if typing.TYPE_CHECKING:
- from array_api_extra._lib._typing import Array
-
# some test coverage already provided by TestSetDiff1D
class TestIn1D:
diff --git a/tests/test_version.py b/tests/test_version.py
index 1b20232..b9717a5 100644
--- a/tests/test_version.py
+++ b/tests/test_version.py
@@ -1,5 +1,3 @@
-from __future__ import annotations # https://github.com/pylint-dev/pylint/pull/9990
-
import importlib.metadata
import array_api_extra as xpx
diff --git a/vendor_tests/_array_api_compat_vendor.py b/vendor_tests/_array_api_compat_vendor.py
index 3156691..e2220df 100644
--- a/vendor_tests/_array_api_compat_vendor.py
+++ b/vendor_tests/_array_api_compat_vendor.py
@@ -1,6 +1,4 @@
# This file is a hook imported by src/array_api_extra/_lib/_compat.py
-from __future__ import annotations
-
from .array_api_compat import * # noqa: F403
from .array_api_compat import array_namespace as array_namespace_compat
diff --git a/vendor_tests/test_vendor.py b/vendor_tests/test_vendor.py
index e884daf..c2e6570 100644
--- a/vendor_tests/test_vendor.py
+++ b/vendor_tests/test_vendor.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
import array_api_strict as xp
from numpy.testing import assert_array_equal