diff --git a/pyproject.toml b/pyproject.toml index f0f13146b5..7e250ad213 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -295,6 +295,7 @@ select = [ "C4", # flake8-comprehensions "B", # flake8-bugbear "G", # flake8-logging-format + "TCH", # flake8-type-checking "YTT", # flake8-2020 "UP", # pyupgrade "I", # isort diff --git a/yt/data_objects/static_output.py b/yt/data_objects/static_output.py index 57f6507dcd..51e82a6dee 100644 --- a/yt/data_objects/static_output.py +++ b/yt/data_objects/static_output.py @@ -13,12 +13,11 @@ from functools import cached_property from importlib.util import find_spec from stat import ST_CTIME -from typing import Any, Literal, Optional, Union +from typing import TYPE_CHECKING, Any, Literal, Optional, Union import numpy as np import unyt as un from more_itertools import unzip -from sympy import Symbol from unyt import Unit, UnitSystem, unyt_quantity from unyt.exceptions import UnitConversionError, UnitParseError @@ -74,6 +73,9 @@ from yt.utilities.parallel_tools.parallel_analysis_interface import parallel_root_only from yt.utilities.parameter_file_storage import NoParameterShelf, ParameterFileStore +if TYPE_CHECKING: + from sympy import Symbol + if sys.version_info >= (3, 11): from typing import assert_never else: diff --git a/yt/frontends/ramses/io.py b/yt/frontends/ramses/io.py index f39dd84b22..546ba333f5 100644 --- a/yt/frontends/ramses/io.py +++ b/yt/frontends/ramses/io.py @@ -1,7 +1,6 @@ -import os from collections import defaultdict from functools import lru_cache -from typing import Union +from typing import TYPE_CHECKING, Union import numpy as np @@ -17,6 +16,9 @@ from yt.utilities.logger import ytLogger as mylog from yt.utilities.physical_ratios import cm_per_km, cm_per_mpc +if TYPE_CHECKING: + import os + def convert_ramses_ages(ds, conformal_ages): issue_deprecation_warning( diff --git a/yt/visualization/fixed_resolution.py b/yt/visualization/fixed_resolution.py index d2da6a29e1..3ab4c7ee0e 100644 --- a/yt/visualization/fixed_resolution.py +++ b/yt/visualization/fixed_resolution.py @@ -30,7 +30,9 @@ from typing_extensions import override if TYPE_CHECKING: - from yt.visualization.fixed_resolution_filters import FixedResolutionBufferFilter + from yt.visualization.fixed_resolution_filters import ( + FixedResolutionBufferFilter, + ) class FixedResolutionBuffer: @@ -134,9 +136,6 @@ def __init__( # the filter methods for the present class are defined only when # fixed_resolution_filters is imported, so we need to guarantee # that it happens no later than instantiation - from yt.visualization.fixed_resolution_filters import ( - FixedResolutionBufferFilter, - ) self._filters: list[FixedResolutionBufferFilter] = ( filters if filters is not None else [] diff --git a/yt/visualization/plot_window.py b/yt/visualization/plot_window.py index c67a3c6125..fa9220320e 100644 --- a/yt/visualization/plot_window.py +++ b/yt/visualization/plot_window.py @@ -2,7 +2,7 @@ import sys from collections import defaultdict from numbers import Number -from typing import Optional, Union +from typing import TYPE_CHECKING, Optional, Union import matplotlib import numpy as np @@ -55,6 +55,9 @@ invalidate_plot, ) +if TYPE_CHECKING: + from yt.visualization.plot_modifications import PlotCallback + if sys.version_info < (3, 10): from yt._maintenance.backports import zip @@ -866,7 +869,6 @@ def __init__(self, *args, **kwargs) -> None: # the filter methods for the present class are defined only when # fixed_resolution_filters is imported, so we need to guarantee # that it happens no later than instantiation - from yt.visualization.plot_modifications import PlotCallback self._callbacks: list[PlotCallback] = [] diff --git a/yt/visualization/profile_plotter.py b/yt/visualization/profile_plotter.py index 004352cf90..14212e25d5 100644 --- a/yt/visualization/profile_plotter.py +++ b/yt/visualization/profile_plotter.py @@ -1,15 +1,13 @@ import base64 import builtins import os -from collections.abc import Iterable from functools import wraps -from typing import Any, Optional, Union +from typing import TYPE_CHECKING, Any, Optional, Union import matplotlib import numpy as np from more_itertools.more import always_iterable, unzip -from yt._typing import FieldKey from yt.data_objects.profiles import create_profile, sanitize_field_tuple_keys from yt.data_objects.static_output import Dataset from yt.frontends.ytdata.data_structures import YTProfileDataset @@ -28,6 +26,11 @@ validate_plot, ) +if TYPE_CHECKING: + from collections.abc import Iterable + + from yt._typing import FieldKey + def invalidate_profile(f): @wraps(f)