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/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/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/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/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 f4d27791b..ce8ee3c6e 100644 --- a/nibabel/spatialimages.py +++ b/nibabel/spatialimages.py @@ -132,18 +132,14 @@ from __future__ import annotations -import io import typing as ty -from collections.abc import Sequence from typing import Literal 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 @@ -155,8 +151,14 @@ 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 + from .fileholders import FileMap + SpatialImgT = ty.TypeVar('SpatialImgT', bound='SpatialImage') SpatialHdrT = ty.TypeVar('SpatialHdrT', bound='SpatialHeader') diff --git a/nibabel/testing/__init__.py b/nibabel/testing/__init__.py index 992ef2ead..be111747b 100644 --- a/nibabel/testing/__init__.py +++ b/nibabel/testing/__init__.py @@ -26,12 +26,13 @@ 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( 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 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 = [