diff --git a/pandas/plotting/_core.py b/pandas/plotting/_core.py index 3d763ebb7a11f..0fbd587c1971e 100644 --- a/pandas/plotting/_core.py +++ b/pandas/plotting/_core.py @@ -1,7 +1,6 @@ from __future__ import annotations import importlib -import types from typing import ( TYPE_CHECKING, Sequence, @@ -9,7 +8,6 @@ from pandas._config import get_option -from pandas._typing import IndexLabel from pandas.util._decorators import ( Appender, Substitution, @@ -27,8 +25,12 @@ from pandas.core.base import PandasObject if TYPE_CHECKING: + import types + from matplotlib.axes import Axes + from pandas._typing import IndexLabel + from pandas import DataFrame diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py index ad054b6065756..ca08f39b852ee 100644 --- a/pandas/plotting/_matplotlib/boxplot.py +++ b/pandas/plotting/_matplotlib/boxplot.py @@ -11,7 +11,6 @@ from matplotlib.artist import setp import numpy as np -from pandas._typing import MatplotlibColor from pandas.util._exceptions import find_stack_level from pandas.core.dtypes.common import is_dict_like @@ -37,6 +36,8 @@ from matplotlib.axes import Axes from matplotlib.lines import Line2D + from pandas._typing import MatplotlibColor + class BoxPlot(LinePlot): @property diff --git a/pandas/plotting/_matplotlib/core.py b/pandas/plotting/_matplotlib/core.py index 94e416e2a2e8a..013e36a456e30 100644 --- a/pandas/plotting/_matplotlib/core.py +++ b/pandas/plotting/_matplotlib/core.py @@ -14,14 +14,8 @@ import warnings import matplotlib as mpl -from matplotlib.artist import Artist import numpy as np -from pandas._typing import ( - IndexLabel, - PlottingOrientation, - npt, -) from pandas.errors import AbstractMethodError from pandas.util._decorators import cache_readonly from pandas.util._exceptions import find_stack_level @@ -79,9 +73,16 @@ ) if TYPE_CHECKING: + from matplotlib.artist import Artist from matplotlib.axes import Axes from matplotlib.axis import Axis + from pandas._typing import ( + IndexLabel, + PlottingOrientation, + npt, + ) + def _color_in_style(style: str) -> bool: """ diff --git a/pandas/plotting/_matplotlib/groupby.py b/pandas/plotting/_matplotlib/groupby.py index 17a214292608b..94533d55d31df 100644 --- a/pandas/plotting/_matplotlib/groupby.py +++ b/pandas/plotting/_matplotlib/groupby.py @@ -1,11 +1,8 @@ from __future__ import annotations -import numpy as np +from typing import TYPE_CHECKING -from pandas._typing import ( - Dict, - IndexLabel, -) +import numpy as np from pandas.core.dtypes.missing import remove_na_arraylike @@ -18,6 +15,12 @@ from pandas.plotting._matplotlib.misc import unpack_single_str_list +if TYPE_CHECKING: + from pandas._typing import ( + Dict, + IndexLabel, + ) + def create_iter_data_given_by( data: DataFrame, kind: str = "hist" diff --git a/pandas/plotting/_matplotlib/hist.py b/pandas/plotting/_matplotlib/hist.py index bc8e6ed753d99..710c20db0526e 100644 --- a/pandas/plotting/_matplotlib/hist.py +++ b/pandas/plotting/_matplotlib/hist.py @@ -7,8 +7,6 @@ import numpy as np -from pandas._typing import PlottingOrientation - from pandas.core.dtypes.common import ( is_integer, is_list_like, @@ -42,6 +40,8 @@ if TYPE_CHECKING: from matplotlib.axes import Axes + from pandas._typing import PlottingOrientation + from pandas import DataFrame diff --git a/pandas/plotting/_matplotlib/timeseries.py b/pandas/plotting/_matplotlib/timeseries.py index ab051ee58da70..15af2dc6aa7bd 100644 --- a/pandas/plotting/_matplotlib/timeseries.py +++ b/pandas/plotting/_matplotlib/timeseries.py @@ -2,7 +2,6 @@ from __future__ import annotations -from datetime import timedelta import functools from typing import ( TYPE_CHECKING, @@ -37,6 +36,8 @@ ) if TYPE_CHECKING: + from datetime import timedelta + from matplotlib.axes import Axes from pandas import ( diff --git a/pandas/tests/extension/array_with_attr/array.py b/pandas/tests/extension/array_with_attr/array.py index d9327ca9f2f3f..4e40b6d0a714f 100644 --- a/pandas/tests/extension/array_with_attr/array.py +++ b/pandas/tests/extension/array_with_attr/array.py @@ -5,16 +5,18 @@ from __future__ import annotations import numbers +from typing import TYPE_CHECKING import numpy as np -from pandas._typing import type_t - from pandas.core.dtypes.base import ExtensionDtype import pandas as pd from pandas.core.arrays import ExtensionArray +if TYPE_CHECKING: + from pandas._typing import type_t + class FloatAttrDtype(ExtensionDtype): type = float diff --git a/pandas/tests/extension/date/array.py b/pandas/tests/extension/date/array.py index eca935cdc9128..08d7e0de82ba8 100644 --- a/pandas/tests/extension/date/array.py +++ b/pandas/tests/extension/date/array.py @@ -1,20 +1,15 @@ +from __future__ import annotations + import datetime as dt from typing import ( + TYPE_CHECKING, Any, - Optional, Sequence, - Tuple, - Union, cast, ) import numpy as np -from pandas._typing import ( - Dtype, - PositionalIndexer, -) - from pandas.core.dtypes.dtypes import register_extension_dtype from pandas.api.extensions import ( @@ -23,6 +18,12 @@ ) from pandas.api.types import pandas_dtype +if TYPE_CHECKING: + from pandas._typing import ( + Dtype, + PositionalIndexer, + ) + @register_extension_dtype class DateDtype(ExtensionDtype): @@ -61,12 +62,12 @@ def __repr__(self) -> str: class DateArray(ExtensionArray): def __init__( self, - dates: Union[ - dt.date, - Sequence[dt.date], - Tuple[np.ndarray, np.ndarray, np.ndarray], - np.ndarray, - ], + dates: ( + dt.date + | Sequence[dt.date] + | tuple[np.ndarray, np.ndarray, np.ndarray] + | np.ndarray + ), ) -> None: if isinstance(dates, dt.date): self._year = np.array([dates.year]) @@ -146,7 +147,7 @@ def __getitem__(self, item: PositionalIndexer): else: raise NotImplementedError("only ints are supported as indexes") - def __setitem__(self, key: Union[int, slice, np.ndarray], value: Any): + def __setitem__(self, key: int | slice | np.ndarray, value: Any): if not isinstance(key, int): raise NotImplementedError("only ints are supported as indexes") @@ -160,7 +161,7 @@ def __setitem__(self, key: Union[int, slice, np.ndarray], value: Any): def __repr__(self) -> str: return f"DateArray{list(zip(self._year, self._month, self._day))}" - def copy(self) -> "DateArray": + def copy(self) -> DateArray: return DateArray((self._year.copy(), self._month.copy(), self._day.copy())) def isna(self) -> np.ndarray: @@ -172,7 +173,7 @@ def isna(self) -> np.ndarray: ) @classmethod - def _from_sequence(cls, scalars, *, dtype: Optional[Dtype] = None, copy=False): + def _from_sequence(cls, scalars, *, dtype: Dtype | None = None, copy=False): if isinstance(scalars, dt.date): pass elif isinstance(scalars, DateArray): diff --git a/pandas/tests/extension/decimal/array.py b/pandas/tests/extension/decimal/array.py index afeca326a9fd4..3e495e9ac6814 100644 --- a/pandas/tests/extension/decimal/array.py +++ b/pandas/tests/extension/decimal/array.py @@ -4,11 +4,10 @@ import numbers import random import sys +from typing import TYPE_CHECKING import numpy as np -from pandas._typing import type_t - from pandas.core.dtypes.base import ExtensionDtype from pandas.core.dtypes.common import ( is_dtype_equal, @@ -33,6 +32,9 @@ ) from pandas.core.indexers import check_array_indexer +if TYPE_CHECKING: + from pandas._typing import type_t + @register_extension_dtype class DecimalDtype(ExtensionDtype): diff --git a/pandas/tests/extension/json/array.py b/pandas/tests/extension/json/array.py index f7de31e58b104..9ce60ae5d435c 100644 --- a/pandas/tests/extension/json/array.py +++ b/pandas/tests/extension/json/array.py @@ -23,14 +23,13 @@ import string import sys from typing import ( + TYPE_CHECKING, Any, Mapping, ) import numpy as np -from pandas._typing import type_t - from pandas.core.dtypes.cast import construct_1d_object_array_from_listlike from pandas.core.dtypes.common import ( is_bool_dtype, @@ -45,6 +44,9 @@ ) from pandas.core.indexers import unpack_tuple_and_ellipses +if TYPE_CHECKING: + from pandas._typing import type_t + class JSONDtype(ExtensionDtype): type = abc.Mapping diff --git a/pandas/tests/extension/list/array.py b/pandas/tests/extension/list/array.py index f281a0f82e0e7..68ffaed2b98f2 100644 --- a/pandas/tests/extension/list/array.py +++ b/pandas/tests/extension/list/array.py @@ -8,11 +8,10 @@ import numbers import random import string +from typing import TYPE_CHECKING import numpy as np -from pandas._typing import type_t - from pandas.core.dtypes.base import ExtensionDtype import pandas as pd @@ -22,6 +21,9 @@ ) from pandas.core.arrays import ExtensionArray +if TYPE_CHECKING: + from pandas._typing import type_t + class ListDtype(ExtensionDtype): type = list diff --git a/pandas/tests/frame/common.py b/pandas/tests/frame/common.py index 70115f8679337..fc41d7907a240 100644 --- a/pandas/tests/frame/common.py +++ b/pandas/tests/frame/common.py @@ -1,12 +1,15 @@ from __future__ import annotations -from pandas._typing import AxisInt +from typing import TYPE_CHECKING from pandas import ( DataFrame, concat, ) +if TYPE_CHECKING: + from pandas._typing import AxisInt + def _check_mixed_float(df, dtype=None): # float16 are most likely to be upcasted to float32 diff --git a/pandas/tests/tseries/offsets/test_custom_business_month.py b/pandas/tests/tseries/offsets/test_custom_business_month.py index 3e2500b8009a2..faf0f9810200b 100644 --- a/pandas/tests/tseries/offsets/test_custom_business_month.py +++ b/pandas/tests/tseries/offsets/test_custom_business_month.py @@ -11,6 +11,7 @@ datetime, timedelta, ) +from typing import TYPE_CHECKING import numpy as np import pytest @@ -29,11 +30,13 @@ assert_is_on_offset, assert_offset_equal, ) -from pandas.tests.tseries.offsets.test_offsets import _ApplyCases from pandas.tseries import offsets from pandas.tseries.holiday import USFederalHolidayCalendar +if TYPE_CHECKING: + from pandas.tests.tseries.offsets.test_offsets import _ApplyCases + @pytest.fixture def dt(): diff --git a/pandas/tseries/__init__.py b/pandas/tseries/__init__.py index dd4ce02b19453..e361726dc6f80 100644 --- a/pandas/tseries/__init__.py +++ b/pandas/tseries/__init__.py @@ -1,3 +1,4 @@ +# ruff: noqa: TCH004 from typing import TYPE_CHECKING if TYPE_CHECKING: diff --git a/pandas/tseries/frequencies.py b/pandas/tseries/frequencies.py index e1af8c0b48c2f..9bd88c4c905c3 100644 --- a/pandas/tseries/frequencies.py +++ b/pandas/tseries/frequencies.py @@ -1,5 +1,7 @@ from __future__ import annotations +from typing import TYPE_CHECKING + import numpy as np from pandas._libs.algos import unique_deltas @@ -26,7 +28,6 @@ to_offset, ) from pandas._libs.tslibs.parsing import get_rule_month -from pandas._typing import npt from pandas.util._decorators import cache_readonly from pandas.core.dtypes.common import ( @@ -42,6 +43,8 @@ from pandas.core.algorithms import unique +if TYPE_CHECKING: + from pandas._typing import npt # --------------------------------------------------------------------- # Offset names ("time rules") and related functions diff --git a/pyproject.toml b/pyproject.toml index ddce400a90ebb..00fcf1eb06d4e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -300,11 +300,6 @@ exclude = [ "pandas/core/algorithms.py" = ["TCH"] "pandas/core/ops/*" = ["TCH"] "pandas/core/sorting.py" = ["TCH"] -"pandas/core/construction.py" = ["TCH"] -"pandas/core/missing.py" = ["TCH"] -"pandas/tseries/*" = ["TCH"] -"pandas/tests/*" = ["TCH"] -"pandas/plotting/*" = ["TCH"] "pandas/util/*" = ["TCH"] "pandas/_libs/*" = ["TCH"] # Keep this one enabled