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
Olivier Grisel

💻 - Guido Imperiale
Guido Imperiale

💻 📖 + 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
Olivier Grisel

💻 - Guido Imperiale
Guido Imperiale

💻 📖 + 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