From 2cfabbd30632b6e2231f061c997dc5be20611984 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:15:24 +0200 Subject: [PATCH 1/4] STY: Apply ruff/flake8-type-checking rule TCH001 TCH001 Move application import into a type-checking block --- nibabel/dataobj_images.py | 4 ++-- nibabel/imageclasses.py | 8 ++++++-- nibabel/spatialimages.py | 5 +++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/nibabel/dataobj_images.py b/nibabel/dataobj_images.py index 685059901..565a22879 100644 --- a/nibabel/dataobj_images.py +++ b/nibabel/dataobj_images.py @@ -14,14 +14,14 @@ import numpy as np -from .arrayproxy import ArrayLike from .deprecated import deprecate_with_version from .filebasedimages import FileBasedHeader, FileBasedImage -from .fileholders import FileMap if ty.TYPE_CHECKING: import numpy.typing as npt + from .arrayproxy import ArrayLike + from .fileholders import FileMap from .filename_parser import FileSpec ArrayImgT = ty.TypeVar('ArrayImgT', bound='DataobjImage') diff --git a/nibabel/imageclasses.py b/nibabel/imageclasses.py index 20cf1cac9..66f984e26 100644 --- a/nibabel/imageclasses.py +++ b/nibabel/imageclasses.py @@ -10,11 +10,11 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from .analyze import AnalyzeImage from .brikhead import AFNIImage from .cifti2 import Cifti2Image -from .dataobj_images import DataobjImage -from .filebasedimages import FileBasedImage from .freesurfer import MGHImage from .gifti import GiftiImage from .minc1 import Minc1Image @@ -25,6 +25,10 @@ from .spm2analyze import Spm2AnalyzeImage from .spm99analyze import Spm99AnalyzeImage +if TYPE_CHECKING: + from .dataobj_images import DataobjImage + from .filebasedimages import FileBasedImage + # Ordered by the load/save priority. all_image_classes: list[type[FileBasedImage]] = [ Nifti1Pair, diff --git a/nibabel/spatialimages.py b/nibabel/spatialimages.py index f4d27791b..bd5ff8c11 100644 --- a/nibabel/spatialimages.py +++ b/nibabel/spatialimages.py @@ -139,11 +139,9 @@ import numpy as np -from .arrayproxy import ArrayLike from .casting import sctypes_aliases from .dataobj_images import DataobjImage from .filebasedimages import FileBasedHeader, FileBasedImage -from .fileholders import FileMap from .fileslice import canonical_slicers from .orientations import apply_orientation, inv_ornt_aff from .viewers import OrthoSlicer3D @@ -157,6 +155,9 @@ if ty.TYPE_CHECKING: import numpy.typing as npt + from .arrayproxy import ArrayLike + from .fileholders import FileMap + SpatialImgT = ty.TypeVar('SpatialImgT', bound='SpatialImage') SpatialHdrT = ty.TypeVar('SpatialHdrT', bound='SpatialHeader') From bb221918bb1c644d4e944fb3219d18cf7ad82fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:16:18 +0200 Subject: [PATCH 2/4] STY: Apply ruff/flake8-type-checking rule TCH002 TCH002 Move third-party import into a type-checking block --- nibabel/testing/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nibabel/testing/__init__.py b/nibabel/testing/__init__.py index 992ef2ead..f41c657f5 100644 --- a/nibabel/testing/__init__.py +++ b/nibabel/testing/__init__.py @@ -26,12 +26,14 @@ from .helpers import assert_data_similar, bytesio_filemap, bytesio_round_trip from .np_features import memmap_after_ufunc +if ty.TYPE_CHECKING: + from importlib_resources.abc import Traversable + try: from importlib.resources import as_file, files from importlib.resources.abc import Traversable except ImportError: # PY38 from importlib_resources import as_file, files - from importlib_resources.abc import Traversable def get_test_data( From 0a27464e27682b48de188e4bf4e97b91c0c8fdd8 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Sun, 22 Sep 2024 16:19:08 +0200 Subject: [PATCH 3/4] STY: Apply ruff/flake8-type-checking rule TCH003 TCH003 Move standard library import into a type-checking block --- nibabel/_compression.py | 3 ++- nibabel/fileholders.py | 4 +++- nibabel/optpkg.py | 4 +++- nibabel/spatialimages.py | 5 +++-- nibabel/testing/__init__.py | 3 +-- nibabel/volumeutils.py | 3 ++- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/nibabel/_compression.py b/nibabel/_compression.py index f697fa54c..871be2629 100644 --- a/nibabel/_compression.py +++ b/nibabel/_compression.py @@ -12,12 +12,13 @@ import bz2 import gzip -import io import typing as ty from .optpkg import optional_package if ty.TYPE_CHECKING: + import io + import indexed_gzip # type: ignore[import] import pyzstd diff --git a/nibabel/fileholders.py b/nibabel/fileholders.py index 3db4c62a9..df7c34af6 100644 --- a/nibabel/fileholders.py +++ b/nibabel/fileholders.py @@ -10,12 +10,14 @@ from __future__ import annotations -import io import typing as ty from copy import copy from .openers import ImageOpener +if ty.TYPE_CHECKING: + import io + class FileHolderError(Exception): pass diff --git a/nibabel/optpkg.py b/nibabel/optpkg.py index bfe6a629c..90b8ded51 100644 --- a/nibabel/optpkg.py +++ b/nibabel/optpkg.py @@ -3,12 +3,14 @@ from __future__ import annotations import typing as ty -from types import ModuleType from packaging.version import Version from .tripwire import TripWire +if ty.TYPE_CHECKING: + from types import ModuleType + def _check_pkg_version(min_version: str | Version) -> ty.Callable[[ModuleType], bool]: min_ver = Version(min_version) if isinstance(min_version, str) else min_version diff --git a/nibabel/spatialimages.py b/nibabel/spatialimages.py index bd5ff8c11..ce8ee3c6e 100644 --- a/nibabel/spatialimages.py +++ b/nibabel/spatialimages.py @@ -132,9 +132,7 @@ from __future__ import annotations -import io import typing as ty -from collections.abc import Sequence from typing import Literal import numpy as np @@ -153,6 +151,9 @@ from functools import lru_cache as cache if ty.TYPE_CHECKING: + import io + from collections.abc import Sequence + import numpy.typing as npt from .arrayproxy import ArrayLike diff --git a/nibabel/testing/__init__.py b/nibabel/testing/__init__.py index f41c657f5..be111747b 100644 --- a/nibabel/testing/__init__.py +++ b/nibabel/testing/__init__.py @@ -27,11 +27,10 @@ from .np_features import memmap_after_ufunc if ty.TYPE_CHECKING: - from importlib_resources.abc import Traversable + from importlib.resources.abc import Traversable try: from importlib.resources import as_file, files - from importlib.resources.abc import Traversable except ImportError: # PY38 from importlib_resources import as_file, files diff --git a/nibabel/volumeutils.py b/nibabel/volumeutils.py index c2387f094..6e43f7918 100644 --- a/nibabel/volumeutils.py +++ b/nibabel/volumeutils.py @@ -10,7 +10,6 @@ from __future__ import annotations -import io import sys import typing as ty import warnings @@ -25,6 +24,8 @@ from .externals.oset import OrderedSet if ty.TYPE_CHECKING: + import io + import numpy.typing as npt Scalar = np.number | float From 8ca899aa43c0b690dec4a04a44a723da831463d8 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:51:49 +0200 Subject: [PATCH 4/4] STY: Enforce ruff/flake8-type-checking rules (TCH) --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index f7d116ea9..d45c4e19f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -122,6 +122,7 @@ select = [ "PLE", "Q", "RSE", + "TCH", "UP", ] ignore = [