diff --git a/pandas/core/reshape/concat.py b/pandas/core/reshape/concat.py index 6758ab9cb6814..9a4aa69345248 100644 --- a/pandas/core/reshape/concat.py +++ b/pandas/core/reshape/concat.py @@ -19,11 +19,6 @@ from pandas._config import using_copy_on_write -from pandas._typing import ( - Axis, - AxisInt, - HashableT, -) from pandas.util._decorators import cache_readonly from pandas.core.dtypes.concat import concat_compat @@ -51,6 +46,12 @@ from pandas.core.internals import concatenate_managers if TYPE_CHECKING: + from pandas._typing import ( + Axis, + AxisInt, + HashableT, + ) + from pandas import ( DataFrame, Series, diff --git a/pandas/core/reshape/encoding.py b/pandas/core/reshape/encoding.py index d00fade8a1c6f..92d556a582262 100644 --- a/pandas/core/reshape/encoding.py +++ b/pandas/core/reshape/encoding.py @@ -3,6 +3,7 @@ from collections import defaultdict import itertools from typing import ( + TYPE_CHECKING, Hashable, Iterable, ) @@ -10,7 +11,6 @@ import numpy as np from pandas._libs.sparse import IntIndex -from pandas._typing import NpDtype from pandas.core.dtypes.common import ( is_integer_dtype, @@ -28,6 +28,9 @@ ) from pandas.core.series import Series +if TYPE_CHECKING: + from pandas._typing import NpDtype + def get_dummies( data, diff --git a/pandas/core/reshape/pivot.py b/pandas/core/reshape/pivot.py index 5dd95d78c7b79..ee5851fcc2dd6 100644 --- a/pandas/core/reshape/pivot.py +++ b/pandas/core/reshape/pivot.py @@ -11,12 +11,6 @@ import numpy as np from pandas._libs import lib -from pandas._typing import ( - AggFuncType, - AggFuncTypeBase, - AggFuncTypeDict, - IndexLabel, -) from pandas.util._decorators import ( Appender, Substitution, @@ -48,6 +42,13 @@ from pandas.core.series import Series if TYPE_CHECKING: + from pandas._typing import ( + AggFuncType, + AggFuncTypeBase, + AggFuncTypeDict, + IndexLabel, + ) + from pandas import DataFrame diff --git a/pandas/core/reshape/reshape.py b/pandas/core/reshape/reshape.py index e83317ebc74ce..21aa9f0f07b26 100644 --- a/pandas/core/reshape/reshape.py +++ b/pandas/core/reshape/reshape.py @@ -10,7 +10,6 @@ import numpy as np import pandas._libs.reshape as libreshape -from pandas._typing import npt from pandas.errors import PerformanceWarning from pandas.util._decorators import cache_readonly from pandas.util._exceptions import find_stack_level @@ -44,6 +43,8 @@ ) if TYPE_CHECKING: + from pandas._typing import npt + from pandas.core.arrays import ExtensionArray from pandas.core.indexes.frozen import FrozenList diff --git a/pandas/core/reshape/tile.py b/pandas/core/reshape/tile.py index 267abdb8d0104..54ae217990d96 100644 --- a/pandas/core/reshape/tile.py +++ b/pandas/core/reshape/tile.py @@ -4,6 +4,7 @@ from __future__ import annotations from typing import ( + TYPE_CHECKING, Any, Callable, Literal, @@ -16,7 +17,6 @@ Timestamp, ) from pandas._libs.lib import infer_dtype -from pandas._typing import IntervalLeftRight from pandas.core.dtypes.common import ( DT64NS_DTYPE, @@ -46,6 +46,9 @@ from pandas.core import nanops import pandas.core.algorithms as algos +if TYPE_CHECKING: + from pandas._typing import IntervalLeftRight + def cut( x, diff --git a/pandas/core/reshape/util.py b/pandas/core/reshape/util.py index a92b439927fff..bcd51e095a1a1 100644 --- a/pandas/core/reshape/util.py +++ b/pandas/core/reshape/util.py @@ -1,11 +1,14 @@ from __future__ import annotations -import numpy as np +from typing import TYPE_CHECKING -from pandas._typing import NumpyIndexT +import numpy as np from pandas.core.dtypes.common import is_list_like +if TYPE_CHECKING: + from pandas._typing import NumpyIndexT + def cartesian_product(X) -> list[np.ndarray]: """ diff --git a/pandas/core/strings/base.py b/pandas/core/strings/base.py index f1e716b64644a..10d8e94972725 100644 --- a/pandas/core/strings/base.py +++ b/pandas/core/strings/base.py @@ -1,7 +1,6 @@ from __future__ import annotations import abc -import re from typing import ( TYPE_CHECKING, Callable, @@ -10,9 +9,11 @@ import numpy as np -from pandas._typing import Scalar - if TYPE_CHECKING: + import re + + from pandas._typing import Scalar + from pandas import Series diff --git a/pandas/core/strings/object_array.py b/pandas/core/strings/object_array.py index 508ac122d67af..f8e3f0756dfbd 100644 --- a/pandas/core/strings/object_array.py +++ b/pandas/core/strings/object_array.py @@ -16,10 +16,6 @@ from pandas._libs import lib import pandas._libs.missing as libmissing import pandas._libs.ops as libops -from pandas._typing import ( - NpDtype, - Scalar, -) from pandas.core.dtypes.common import is_scalar from pandas.core.dtypes.missing import isna @@ -27,6 +23,11 @@ from pandas.core.strings.base import BaseStringArrayMethods if TYPE_CHECKING: + from pandas._typing import ( + NpDtype, + Scalar, + ) + from pandas import Series diff --git a/pandas/core/tools/numeric.py b/pandas/core/tools/numeric.py index ea150f714845c..7517d5278e52a 100644 --- a/pandas/core/tools/numeric.py +++ b/pandas/core/tools/numeric.py @@ -1,6 +1,9 @@ from __future__ import annotations -from typing import Literal +from typing import ( + TYPE_CHECKING, + Literal, +) import numpy as np @@ -10,10 +13,6 @@ ) from pandas._libs import lib -from pandas._typing import ( - DateTimeErrorChoices, - npt, -) from pandas.core.dtypes.cast import maybe_downcast_numeric from pandas.core.dtypes.common import ( @@ -36,6 +35,12 @@ import pandas as pd from pandas.core.arrays import BaseMaskedArray +if TYPE_CHECKING: + from pandas._typing import ( + DateTimeErrorChoices, + npt, + ) + def to_numeric( arg, diff --git a/pandas/core/tools/timedeltas.py b/pandas/core/tools/timedeltas.py index 42cf92c6b2a35..2e91927a002bb 100644 --- a/pandas/core/tools/timedeltas.py +++ b/pandas/core/tools/timedeltas.py @@ -3,7 +3,6 @@ """ from __future__ import annotations -from datetime import timedelta from typing import ( TYPE_CHECKING, overload, @@ -30,6 +29,8 @@ from pandas.core.arrays.timedeltas import sequence_to_td64ns if TYPE_CHECKING: + from datetime import timedelta + from pandas._libs.tslibs.timedeltas import UnitChoices from pandas._typing import ( ArrayLike, diff --git a/pandas/core/tools/times.py b/pandas/core/tools/times.py index cb178926123d3..e8fc07c1876f8 100644 --- a/pandas/core/tools/times.py +++ b/pandas/core/tools/times.py @@ -4,11 +4,11 @@ datetime, time, ) +from typing import TYPE_CHECKING import numpy as np from pandas._libs.lib import is_list_like -from pandas._typing import DateTimeErrorChoices from pandas.core.dtypes.generic import ( ABCIndex, @@ -16,6 +16,9 @@ ) from pandas.core.dtypes.missing import notna +if TYPE_CHECKING: + from pandas._typing import DateTimeErrorChoices + def to_time( arg, diff --git a/pandas/core/window/ewm.py b/pandas/core/window/ewm.py index b61fa9a92539e..34dc49ff4a82a 100644 --- a/pandas/core/window/ewm.py +++ b/pandas/core/window/ewm.py @@ -9,15 +9,6 @@ from pandas._libs.tslibs import Timedelta import pandas._libs.window.aggregations as window_aggregations -from pandas._typing import ( - Axis, - TimedeltaConvertibleTypes, -) - -if TYPE_CHECKING: - from pandas import DataFrame, Series - from pandas.core.generic import NDFrame - from pandas.util._decorators import doc from pandas.core.dtypes.common import ( @@ -60,6 +51,18 @@ BaseWindowGroupby, ) +if TYPE_CHECKING: + from pandas._typing import ( + Axis, + TimedeltaConvertibleTypes, + ) + + from pandas import ( + DataFrame, + Series, + ) + from pandas.core.generic import NDFrame + def get_center_of_mass( comass: float | None, diff --git a/pandas/core/window/expanding.py b/pandas/core/window/expanding.py index 6147f0f43c558..b3caa189bd579 100644 --- a/pandas/core/window/expanding.py +++ b/pandas/core/window/expanding.py @@ -7,16 +7,6 @@ Callable, ) -from pandas._typing import ( - Axis, - QuantileInterpolation, - WindowingRankType, -) - -if TYPE_CHECKING: - from pandas import DataFrame, Series - from pandas.core.generic import NDFrame - from pandas.util._decorators import doc from pandas.core.indexers.objects import ( @@ -40,6 +30,19 @@ RollingAndExpandingMixin, ) +if TYPE_CHECKING: + from pandas._typing import ( + Axis, + QuantileInterpolation, + WindowingRankType, + ) + + from pandas import ( + DataFrame, + Series, + ) + from pandas.core.generic import NDFrame + class Expanding(RollingAndExpandingMixin): """ diff --git a/pandas/core/window/numba_.py b/pandas/core/window/numba_.py index 756f8e3a1cffc..14775cc7f457e 100644 --- a/pandas/core/window/numba_.py +++ b/pandas/core/window/numba_.py @@ -9,11 +9,13 @@ import numpy as np -from pandas._typing import Scalar from pandas.compat._optional import import_optional_dependency from pandas.core.util.numba_ import jit_user_function +if TYPE_CHECKING: + from pandas._typing import Scalar + @functools.lru_cache(maxsize=None) def generate_numba_apply_func( diff --git a/pandas/core/window/rolling.py b/pandas/core/window/rolling.py index 46ce5950a1465..b11ff11421ed4 100644 --- a/pandas/core/window/rolling.py +++ b/pandas/core/window/rolling.py @@ -26,13 +26,6 @@ to_offset, ) import pandas._libs.window.aggregations as window_aggregations -from pandas._typing import ( - ArrayLike, - Axis, - NDFrameT, - QuantileInterpolation, - WindowingRankType, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import DataError from pandas.util._decorators import doc @@ -99,6 +92,14 @@ ) if TYPE_CHECKING: + from pandas._typing import ( + ArrayLike, + Axis, + NDFrameT, + QuantileInterpolation, + WindowingRankType, + ) + from pandas import ( DataFrame, Series, diff --git a/pandas/io/__init__.py b/pandas/io/__init__.py index bd3ddc09393d8..c804b81c49e7c 100644 --- a/pandas/io/__init__.py +++ b/pandas/io/__init__.py @@ -1,3 +1,4 @@ +# ruff: noqa: TCH004 from typing import TYPE_CHECKING if TYPE_CHECKING: @@ -8,5 +9,5 @@ stata, ) - # and mark only those modules as public + # mark only those modules as public __all__ = ["formats", "json", "stata"] diff --git a/pandas/io/excel/_base.py b/pandas/io/excel/_base.py index 7cad7ecbf777a..065d8992ab0ac 100644 --- a/pandas/io/excel/_base.py +++ b/pandas/io/excel/_base.py @@ -6,9 +6,9 @@ from io import BytesIO import os from textwrap import fill -from types import TracebackType from typing import ( IO, + TYPE_CHECKING, Any, Callable, Hashable, @@ -30,14 +30,6 @@ from pandas._libs import lib from pandas._libs.parsers import STR_NA_VALUES -from pandas._typing import ( - DtypeArg, - FilePath, - IntStrT, - ReadBuffer, - StorageOptions, - WriteExcelBuffer, -) from pandas.compat._optional import ( get_version, import_optional_dependency, @@ -75,6 +67,17 @@ from pandas.io.parsers import TextParser from pandas.io.parsers.readers import validate_integer +if TYPE_CHECKING: + from types import TracebackType + + from pandas._typing import ( + DtypeArg, + FilePath, + IntStrT, + ReadBuffer, + StorageOptions, + WriteExcelBuffer, + ) _read_excel_doc = ( """ Read an Excel file into a pandas DataFrame. diff --git a/pandas/io/excel/_odswriter.py b/pandas/io/excel/_odswriter.py index 6f1d62111e5b4..f5aaf08530591 100644 --- a/pandas/io/excel/_odswriter.py +++ b/pandas/io/excel/_odswriter.py @@ -11,11 +11,6 @@ ) from pandas._libs import json -from pandas._typing import ( - FilePath, - StorageOptions, - WriteExcelBuffer, -) from pandas.io.excel._base import ExcelWriter from pandas.io.excel._util import ( @@ -24,6 +19,12 @@ ) if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + StorageOptions, + WriteExcelBuffer, + ) + from pandas.io.formats.excel import ExcelCell diff --git a/pandas/io/excel/_openpyxl.py b/pandas/io/excel/_openpyxl.py index 594813fe0c1ac..e751c919ee8dc 100644 --- a/pandas/io/excel/_openpyxl.py +++ b/pandas/io/excel/_openpyxl.py @@ -10,13 +10,6 @@ import numpy as np -from pandas._typing import ( - FilePath, - ReadBuffer, - Scalar, - StorageOptions, - WriteExcelBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.util._decorators import doc @@ -35,6 +28,14 @@ from openpyxl.descriptors.serialisable import Serialisable from openpyxl.workbook import Workbook + from pandas._typing import ( + FilePath, + ReadBuffer, + Scalar, + StorageOptions, + WriteExcelBuffer, + ) + class OpenpyxlWriter(ExcelWriter): _engine = "openpyxl" diff --git a/pandas/io/excel/_pyxlsb.py b/pandas/io/excel/_pyxlsb.py index 634baee63137e..64076e4952cde 100644 --- a/pandas/io/excel/_pyxlsb.py +++ b/pandas/io/excel/_pyxlsb.py @@ -1,12 +1,8 @@ # pyright: reportMissingImports=false from __future__ import annotations -from pandas._typing import ( - FilePath, - ReadBuffer, - Scalar, - StorageOptions, -) +from typing import TYPE_CHECKING + from pandas.compat._optional import import_optional_dependency from pandas.util._decorators import doc @@ -14,6 +10,14 @@ from pandas.io.excel._base import BaseExcelReader +if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + ReadBuffer, + Scalar, + StorageOptions, + ) + class PyxlsbReader(BaseExcelReader): @doc(storage_options=_shared_docs["storage_options"]) diff --git a/pandas/io/excel/_xlrd.py b/pandas/io/excel/_xlrd.py index 37bd4c1ba5ba5..702d00e7fdea7 100644 --- a/pandas/io/excel/_xlrd.py +++ b/pandas/io/excel/_xlrd.py @@ -1,13 +1,10 @@ from __future__ import annotations from datetime import time +from typing import TYPE_CHECKING import numpy as np -from pandas._typing import ( - Scalar, - StorageOptions, -) from pandas.compat._optional import import_optional_dependency from pandas.util._decorators import doc @@ -15,6 +12,12 @@ from pandas.io.excel._base import BaseExcelReader +if TYPE_CHECKING: + from pandas._typing import ( + Scalar, + StorageOptions, + ) + class XlrdReader(BaseExcelReader): @doc(storage_options=_shared_docs["storage_options"]) diff --git a/pandas/io/excel/_xlsxwriter.py b/pandas/io/excel/_xlsxwriter.py index 1800d3d87f7c0..8cb88403b2f87 100644 --- a/pandas/io/excel/_xlsxwriter.py +++ b/pandas/io/excel/_xlsxwriter.py @@ -1,13 +1,11 @@ from __future__ import annotations -from typing import Any +from typing import ( + TYPE_CHECKING, + Any, +) from pandas._libs import json -from pandas._typing import ( - FilePath, - StorageOptions, - WriteExcelBuffer, -) from pandas.io.excel._base import ExcelWriter from pandas.io.excel._util import ( @@ -15,6 +13,13 @@ validate_freeze_panes, ) +if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + StorageOptions, + WriteExcelBuffer, + ) + class _XlsxStyler: # Map from openpyxl-oriented styles to flatter xlsxwriter representation diff --git a/pandas/io/feather_format.py b/pandas/io/feather_format.py index bf0e174674cb1..4593c48c926f4 100644 --- a/pandas/io/feather_format.py +++ b/pandas/io/feather_format.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import ( + TYPE_CHECKING, Hashable, Sequence, ) @@ -9,12 +10,6 @@ from pandas._config import using_nullable_dtypes from pandas._libs import lib -from pandas._typing import ( - FilePath, - ReadBuffer, - StorageOptions, - WriteBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.util._decorators import doc @@ -27,6 +22,14 @@ from pandas.io.common import get_handle +if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + ReadBuffer, + StorageOptions, + WriteBuffer, + ) + @doc(storage_options=_shared_docs["storage_options"]) def to_feather( diff --git a/pandas/io/formats/__init__.py b/pandas/io/formats/__init__.py index 8a3486a4d71fe..5e56b1bc7ba43 100644 --- a/pandas/io/formats/__init__.py +++ b/pandas/io/formats/__init__.py @@ -1,3 +1,4 @@ +# ruff: noqa: TCH004 from typing import TYPE_CHECKING if TYPE_CHECKING: diff --git a/pandas/io/formats/csvs.py b/pandas/io/formats/csvs.py index baf264353fca7..672f7c1f71b15 100644 --- a/pandas/io/formats/csvs.py +++ b/pandas/io/formats/csvs.py @@ -18,14 +18,6 @@ import numpy as np from pandas._libs import writers as libwriters -from pandas._typing import ( - CompressionOptions, - FilePath, - FloatFormatType, - IndexLabel, - StorageOptions, - WriteBuffer, -) from pandas.util._decorators import cache_readonly from pandas.core.dtypes.generic import ( @@ -41,6 +33,15 @@ from pandas.io.common import get_handle if TYPE_CHECKING: + from pandas._typing import ( + CompressionOptions, + FilePath, + FloatFormatType, + IndexLabel, + StorageOptions, + WriteBuffer, + ) + from pandas.io.formats.format import DataFrameFormatter diff --git a/pandas/io/formats/excel.py b/pandas/io/formats/excel.py index 34c4d330761f5..806496d5a7108 100644 --- a/pandas/io/formats/excel.py +++ b/pandas/io/formats/excel.py @@ -10,6 +10,7 @@ import itertools import re from typing import ( + TYPE_CHECKING, Any, Callable, Hashable, @@ -23,10 +24,6 @@ import numpy as np from pandas._libs.lib import is_list_like -from pandas._typing import ( - IndexLabel, - StorageOptions, -) from pandas.util._decorators import doc from pandas.util._exceptions import find_stack_level @@ -53,6 +50,12 @@ from pandas.io.formats.format import get_level_lengths from pandas.io.formats.printing import pprint_thing +if TYPE_CHECKING: + from pandas._typing import ( + IndexLabel, + StorageOptions, + ) + class ExcelCell: __fields__ = ("row", "col", "val", "style", "mergestart", "mergeend") diff --git a/pandas/io/formats/format.py b/pandas/io/formats/format.py index f9b081afcd045..feda414a0113d 100644 --- a/pandas/io/formats/format.py +++ b/pandas/io/formats/format.py @@ -49,19 +49,6 @@ periods_per_day, ) from pandas._libs.tslibs.nattype import NaTType -from pandas._typing import ( - ArrayLike, - Axes, - ColspaceArgType, - ColspaceType, - CompressionOptions, - FilePath, - FloatFormatType, - FormattersType, - IndexLabel, - StorageOptions, - WriteBuffer, -) from pandas.core.dtypes.common import ( is_categorical_dtype, @@ -109,6 +96,20 @@ from pandas.io.formats import printing if TYPE_CHECKING: + from pandas._typing import ( + ArrayLike, + Axes, + ColspaceArgType, + ColspaceType, + CompressionOptions, + FilePath, + FloatFormatType, + FormattersType, + IndexLabel, + StorageOptions, + WriteBuffer, + ) + from pandas import ( DataFrame, Series, diff --git a/pandas/io/formats/info.py b/pandas/io/formats/info.py index d826c0a148ebe..7f31c354b5c85 100644 --- a/pandas/io/formats/info.py +++ b/pandas/io/formats/info.py @@ -16,15 +16,15 @@ from pandas._config import get_option -from pandas._typing import ( - Dtype, - WriteBuffer, -) - from pandas.io.formats import format as fmt from pandas.io.formats.printing import pprint_thing if TYPE_CHECKING: + from pandas._typing import ( + Dtype, + WriteBuffer, + ) + from pandas import ( DataFrame, Index, diff --git a/pandas/io/formats/style.py b/pandas/io/formats/style.py index 8ee73e77f5b11..d989a9d199078 100644 --- a/pandas/io/formats/style.py +++ b/pandas/io/formats/style.py @@ -21,17 +21,6 @@ from pandas._config import get_option -from pandas._typing import ( - Axis, - AxisInt, - FilePath, - IndexLabel, - Level, - QuantileInterpolation, - Scalar, - StorageOptions, - WriteBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.util._decorators import ( Substitution, @@ -71,6 +60,18 @@ if TYPE_CHECKING: from matplotlib.colors import Colormap + from pandas._typing import ( + Axis, + AxisInt, + FilePath, + IndexLabel, + Level, + QuantileInterpolation, + Scalar, + StorageOptions, + WriteBuffer, + ) + try: import matplotlib as mpl import matplotlib.pyplot as plt diff --git a/pandas/io/formats/style_render.py b/pandas/io/formats/style_render.py index 69cc1e9f1f7ae..317ce93cf3da6 100644 --- a/pandas/io/formats/style_render.py +++ b/pandas/io/formats/style_render.py @@ -4,6 +4,7 @@ from functools import partial import re from typing import ( + TYPE_CHECKING, Any, Callable, DefaultDict, @@ -22,10 +23,6 @@ from pandas._config import get_option from pandas._libs import lib -from pandas._typing import ( - Axis, - Level, -) from pandas.compat._optional import import_optional_dependency from pandas.core.dtypes.common import ( @@ -46,6 +43,11 @@ from pandas.api.types import is_list_like import pandas.core.common as com +if TYPE_CHECKING: + from pandas._typing import ( + Axis, + Level, + ) jinja2 = import_optional_dependency("jinja2", extra="DataFrame.style requires jinja2.") from markupsafe import escape as escape_html # markupsafe is jinja2 dependency diff --git a/pandas/io/formats/xml.py b/pandas/io/formats/xml.py index cc258e0271031..7927e27cc9284 100644 --- a/pandas/io/formats/xml.py +++ b/pandas/io/formats/xml.py @@ -10,13 +10,6 @@ Any, ) -from pandas._typing import ( - CompressionOptions, - FilePath, - ReadBuffer, - StorageOptions, - WriteBuffer, -) from pandas.errors import AbstractMethodError from pandas.util._decorators import doc @@ -32,6 +25,14 @@ ) if TYPE_CHECKING: + from pandas._typing import ( + CompressionOptions, + FilePath, + ReadBuffer, + StorageOptions, + WriteBuffer, + ) + from pandas import DataFrame diff --git a/pandas/io/html.py b/pandas/io/html.py index d6d1c5651dd37..25eb6bd0bbc90 100644 --- a/pandas/io/html.py +++ b/pandas/io/html.py @@ -21,11 +21,6 @@ from pandas._config import using_nullable_dtypes from pandas._libs import lib -from pandas._typing import ( - BaseBuffer, - FilePath, - ReadBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import ( AbstractMethodError, @@ -51,6 +46,12 @@ from pandas.io.parsers import TextParser if TYPE_CHECKING: + from pandas._typing import ( + BaseBuffer, + FilePath, + ReadBuffer, + ) + from pandas import DataFrame ############# diff --git a/pandas/io/json/_json.py b/pandas/io/json/_json.py index 80d2f9eda7ce5..d052ec60a7a80 100644 --- a/pandas/io/json/_json.py +++ b/pandas/io/json/_json.py @@ -7,7 +7,6 @@ from collections import abc from io import StringIO from itertools import islice -from types import TracebackType from typing import ( TYPE_CHECKING, Any, @@ -32,17 +31,6 @@ loads, ) from pandas._libs.tslibs import iNaT -from pandas._typing import ( - CompressionOptions, - DtypeArg, - FilePath, - IndexLabel, - JSONEngine, - JSONSerializable, - ReadBuffer, - StorageOptions, - WriteBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import AbstractMethodError from pandas.util._decorators import doc @@ -83,6 +71,20 @@ from pandas.io.parsers.readers import validate_integer if TYPE_CHECKING: + from types import TracebackType + + from pandas._typing import ( + CompressionOptions, + DtypeArg, + FilePath, + IndexLabel, + JSONEngine, + JSONSerializable, + ReadBuffer, + StorageOptions, + WriteBuffer, + ) + from pandas.core.generic import NDFrame FrameSeriesStrT = TypeVar("FrameSeriesStrT", bound=Literal["frame", "series"]) diff --git a/pandas/io/json/_normalize.py b/pandas/io/json/_normalize.py index 577d677e7b3a0..0937828b00e38 100644 --- a/pandas/io/json/_normalize.py +++ b/pandas/io/json/_normalize.py @@ -9,6 +9,7 @@ import copy import sys from typing import ( + TYPE_CHECKING, Any, DefaultDict, Iterable, @@ -17,14 +18,16 @@ import numpy as np from pandas._libs.writers import convert_json_to_lines -from pandas._typing import ( - IgnoreRaise, - Scalar, -) import pandas as pd from pandas import DataFrame +if TYPE_CHECKING: + from pandas._typing import ( + IgnoreRaise, + Scalar, + ) + def convert_to_line_delimits(s: str) -> str: """ diff --git a/pandas/io/json/_table_schema.py b/pandas/io/json/_table_schema.py index 372aaf98c3b2c..e23b5fe01d134 100644 --- a/pandas/io/json/_table_schema.py +++ b/pandas/io/json/_table_schema.py @@ -14,10 +14,6 @@ from pandas._libs.json import loads from pandas._libs.tslibs import timezones -from pandas._typing import ( - DtypeObj, - JSONSerializable, -) from pandas.util._exceptions import find_stack_level from pandas.core.dtypes.base import _registry as registry @@ -39,6 +35,11 @@ import pandas.core.common as com if TYPE_CHECKING: + from pandas._typing import ( + DtypeObj, + JSONSerializable, + ) + from pandas import Series from pandas.core.indexes.multi import MultiIndex diff --git a/pandas/io/orc.py b/pandas/io/orc.py index 1b9be9adc1196..49edf91a51e01 100644 --- a/pandas/io/orc.py +++ b/pandas/io/orc.py @@ -4,6 +4,7 @@ import io from types import ModuleType from typing import ( + TYPE_CHECKING, Any, Literal, ) @@ -14,11 +15,6 @@ ) from pandas._libs import lib -from pandas._typing import ( - FilePath, - ReadBuffer, - WriteBuffer, -) from pandas.compat import pa_version_under8p0 from pandas.compat._optional import import_optional_dependency @@ -37,6 +33,13 @@ is_fsspec_url, ) +if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + ReadBuffer, + WriteBuffer, + ) + def read_orc( path: FilePath | ReadBuffer[bytes], diff --git a/pandas/io/parquet.py b/pandas/io/parquet.py index aec31f40f8570..0936544929071 100644 --- a/pandas/io/parquet.py +++ b/pandas/io/parquet.py @@ -4,6 +4,7 @@ import io import os from typing import ( + TYPE_CHECKING, Any, Literal, ) @@ -12,12 +13,6 @@ from pandas._config import using_nullable_dtypes from pandas._libs import lib -from pandas._typing import ( - FilePath, - ReadBuffer, - StorageOptions, - WriteBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import AbstractMethodError from pandas.util._decorators import doc @@ -39,6 +34,14 @@ stringify_path, ) +if TYPE_CHECKING: + from pandas._typing import ( + FilePath, + ReadBuffer, + StorageOptions, + WriteBuffer, + ) + def get_engine(engine: str) -> BaseImpl: """return our implementation""" diff --git a/pandas/io/parsers/arrow_parser_wrapper.py b/pandas/io/parsers/arrow_parser_wrapper.py index 420b6212f857a..ddbd902acdb08 100644 --- a/pandas/io/parsers/arrow_parser_wrapper.py +++ b/pandas/io/parsers/arrow_parser_wrapper.py @@ -1,6 +1,7 @@ from __future__ import annotations -from pandas._typing import ReadBuffer +from typing import TYPE_CHECKING + from pandas.compat._optional import import_optional_dependency from pandas.core.dtypes.inference import is_integer @@ -13,6 +14,9 @@ from pandas.io.parsers.base_parser import ParserBase +if TYPE_CHECKING: + from pandas._typing import ReadBuffer + class ArrowParserWrapper(ParserBase): """ diff --git a/pandas/io/parsers/base_parser.py b/pandas/io/parsers/base_parser.py index 8d71ce6dff7f8..90ad0d04e0ea7 100644 --- a/pandas/io/parsers/base_parser.py +++ b/pandas/io/parsers/base_parser.py @@ -34,12 +34,6 @@ import pandas._libs.ops as libops from pandas._libs.parsers import STR_NA_VALUES from pandas._libs.tslibs import parsing -from pandas._typing import ( - ArrayLike, - DtypeArg, - DtypeObj, - Scalar, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import ( ParserError, @@ -91,6 +85,13 @@ from pandas.io.common import is_potential_multi_index if TYPE_CHECKING: + from pandas._typing import ( + ArrayLike, + DtypeArg, + DtypeObj, + Scalar, + ) + from pandas import DataFrame diff --git a/pandas/io/parsers/c_parser_wrapper.py b/pandas/io/parsers/c_parser_wrapper.py index c10f1811751cd..f463647d5a464 100644 --- a/pandas/io/parsers/c_parser_wrapper.py +++ b/pandas/io/parsers/c_parser_wrapper.py @@ -14,12 +14,6 @@ from pandas._config.config import get_option from pandas._libs import parsers -from pandas._typing import ( - ArrayLike, - DtypeArg, - DtypeObj, - ReadCsvBuffer, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import DtypeWarning from pandas.util._exceptions import find_stack_level @@ -44,6 +38,13 @@ ) if TYPE_CHECKING: + from pandas._typing import ( + ArrayLike, + DtypeArg, + DtypeObj, + ReadCsvBuffer, + ) + from pandas import ( Index, MultiIndex, diff --git a/pandas/io/parsers/python_parser.py b/pandas/io/parsers/python_parser.py index 263966269c0fa..5b30596eebf6f 100644 --- a/pandas/io/parsers/python_parser.py +++ b/pandas/io/parsers/python_parser.py @@ -24,11 +24,6 @@ import numpy as np from pandas._libs import lib -from pandas._typing import ( - ArrayLike, - ReadCsvBuffer, - Scalar, -) from pandas.errors import ( EmptyDataError, ParserError, @@ -47,6 +42,12 @@ ) if TYPE_CHECKING: + from pandas._typing import ( + ArrayLike, + ReadCsvBuffer, + Scalar, + ) + from pandas import ( Index, MultiIndex, diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index 635c98e38da16..af0d34745a317 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -9,9 +9,9 @@ import csv import sys from textwrap import fill -from types import TracebackType from typing import ( IO, + TYPE_CHECKING, Any, Callable, Hashable, @@ -28,15 +28,6 @@ from pandas._libs import lib from pandas._libs.parsers import STR_NA_VALUES -from pandas._typing import ( - CompressionOptions, - CSVEngine, - DtypeArg, - FilePath, - IndexLabel, - ReadCsvBuffer, - StorageOptions, -) from pandas.errors import ( AbstractMethodError, ParserWarning, @@ -73,6 +64,18 @@ PythonParser, ) +if TYPE_CHECKING: + from types import TracebackType + + from pandas._typing import ( + CompressionOptions, + CSVEngine, + DtypeArg, + FilePath, + IndexLabel, + ReadCsvBuffer, + StorageOptions, + ) _doc_read_csv_and_table = ( r""" {summary} diff --git a/pandas/io/pickle.py b/pandas/io/pickle.py index a9ab925536d11..ba837e2f57243 100644 --- a/pandas/io/pickle.py +++ b/pandas/io/pickle.py @@ -2,16 +2,12 @@ from __future__ import annotations import pickle -from typing import Any +from typing import ( + TYPE_CHECKING, + Any, +) import warnings -from pandas._typing import ( - CompressionOptions, - FilePath, - ReadPickleBuffer, - StorageOptions, - WriteBuffer, -) from pandas.compat import pickle_compat as pc from pandas.util._decorators import doc @@ -19,6 +15,15 @@ from pandas.io.common import get_handle +if TYPE_CHECKING: + from pandas._typing import ( + CompressionOptions, + FilePath, + ReadPickleBuffer, + StorageOptions, + WriteBuffer, + ) + @doc( storage_options=_shared_docs["storage_options"], diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index a813a0e285027..bd427ec98e8dc 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -14,7 +14,6 @@ import os import re from textwrap import dedent -from types import TracebackType from typing import ( TYPE_CHECKING, Any, @@ -41,15 +40,6 @@ writers as libwriters, ) from pandas._libs.tslibs import timezones -from pandas._typing import ( - AnyArrayLike, - ArrayLike, - AxisInt, - DtypeArg, - FilePath, - Shape, - npt, -) from pandas.compat._optional import import_optional_dependency from pandas.compat.pickle_compat import patch_pickle from pandas.errors import ( @@ -115,14 +105,25 @@ ) if TYPE_CHECKING: + from types import TracebackType + from tables import ( Col, File, Node, ) - from pandas.core.internals import Block + from pandas._typing import ( + AnyArrayLike, + ArrayLike, + AxisInt, + DtypeArg, + FilePath, + Shape, + npt, + ) + from pandas.core.internals import Block # versioning attribute _version = "0.15.2" diff --git a/pandas/io/sas/_sas.pyi b/pandas/io/sas/_sas.pyi index 5d65e2b56b591..73068693aa2c6 100644 --- a/pandas/io/sas/_sas.pyi +++ b/pandas/io/sas/_sas.pyi @@ -1,4 +1,7 @@ -from pandas.io.sas.sas7bdat import SAS7BDATReader +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from pandas.io.sas.sas7bdat import SAS7BDATReader class Parser: def __init__(self, parser: SAS7BDATReader) -> None: ... diff --git a/pandas/io/sas/sas7bdat.py b/pandas/io/sas/sas7bdat.py index 7fd93e7ed0e23..303d3be17f0a7 100644 --- a/pandas/io/sas/sas7bdat.py +++ b/pandas/io/sas/sas7bdat.py @@ -21,15 +21,13 @@ timedelta, ) import sys -from typing import cast +from typing import ( + TYPE_CHECKING, + cast, +) import numpy as np -from pandas._typing import ( - CompressionOptions, - FilePath, - ReadBuffer, -) from pandas.errors import ( EmptyDataError, OutOfBoundsDatetime, @@ -56,6 +54,13 @@ import pandas.io.sas.sas_constants as const from pandas.io.sas.sasreader import ReaderBase +if TYPE_CHECKING: + from pandas._typing import ( + CompressionOptions, + FilePath, + ReadBuffer, + ) + def _parse_datetime(sas_datetime: float, unit: str): if isna(sas_datetime): diff --git a/pandas/io/sas/sas_xport.py b/pandas/io/sas/sas_xport.py index 6767dec6e4528..f23b18fdcb584 100644 --- a/pandas/io/sas/sas_xport.py +++ b/pandas/io/sas/sas_xport.py @@ -12,16 +12,11 @@ from collections import abc from datetime import datetime import struct +from typing import TYPE_CHECKING import warnings import numpy as np -from pandas._typing import ( - CompressionOptions, - DatetimeNaTType, - FilePath, - ReadBuffer, -) from pandas.util._decorators import Appender from pandas.util._exceptions import find_stack_level @@ -30,6 +25,13 @@ from pandas.io.common import get_handle from pandas.io.sas.sasreader import ReaderBase +if TYPE_CHECKING: + from pandas._typing import ( + CompressionOptions, + DatetimeNaTType, + FilePath, + ReadBuffer, + ) _correct_line1 = ( "HEADER RECORD*******LIBRARY HEADER RECORD!!!!!!!" "000000000000000000000000000000 " diff --git a/pandas/io/sas/sasreader.py b/pandas/io/sas/sasreader.py index 22910484876a6..d56f4c7ebc695 100644 --- a/pandas/io/sas/sasreader.py +++ b/pandas/io/sas/sasreader.py @@ -7,18 +7,12 @@ ABCMeta, abstractmethod, ) -from types import TracebackType from typing import ( TYPE_CHECKING, Hashable, overload, ) -from pandas._typing import ( - CompressionOptions, - FilePath, - ReadBuffer, -) from pandas.util._decorators import doc from pandas.core.shared_docs import _shared_docs @@ -26,6 +20,14 @@ from pandas.io.common import stringify_path if TYPE_CHECKING: + from types import TracebackType + + from pandas._typing import ( + CompressionOptions, + FilePath, + ReadBuffer, + ) + from pandas import DataFrame diff --git a/pandas/io/spss.py b/pandas/io/spss.py index bb9ace600e6f2..4f898b3e2402d 100644 --- a/pandas/io/spss.py +++ b/pandas/io/spss.py @@ -1,6 +1,5 @@ from __future__ import annotations -from pathlib import Path from typing import ( TYPE_CHECKING, Sequence, @@ -16,6 +15,8 @@ from pandas.io.common import stringify_path if TYPE_CHECKING: + from pathlib import Path + from pandas import DataFrame diff --git a/pandas/io/sql.py b/pandas/io/sql.py index 7dedd705f8c70..340e181121bdb 100644 --- a/pandas/io/sql.py +++ b/pandas/io/sql.py @@ -35,11 +35,6 @@ from pandas._config import using_nullable_dtypes from pandas._libs import lib -from pandas._typing import ( - DateTimeErrorChoices, - DtypeArg, - IndexLabel, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import ( AbstractMethodError, @@ -74,6 +69,12 @@ TextClause, ) + from pandas._typing import ( + DateTimeErrorChoices, + DtypeArg, + IndexLabel, + ) + # ----------------------------------------------------------------------------- # -- Helper functions diff --git a/pandas/io/stata.py b/pandas/io/stata.py index 5cc13892224c5..5b6326685d63e 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -17,7 +17,6 @@ import os import struct import sys -from types import TracebackType from typing import ( IO, TYPE_CHECKING, @@ -36,13 +35,6 @@ from pandas._libs.lib import infer_dtype from pandas._libs.writers import max_len_string_array -from pandas._typing import ( - CompressionOptions, - FilePath, - ReadBuffer, - StorageOptions, - WriteBuffer, -) from pandas.errors import ( CategoricalConversionWarning, InvalidColumnName, @@ -81,8 +73,17 @@ from pandas.io.common import get_handle if TYPE_CHECKING: + from types import TracebackType from typing import Literal + from pandas._typing import ( + CompressionOptions, + FilePath, + ReadBuffer, + StorageOptions, + WriteBuffer, + ) + _version_error = ( "Version of given Stata file is {version}. pandas supports importing " "versions 105, 108, 111 (Stata 7SE), 113 (Stata 8/9), " diff --git a/pandas/io/xml.py b/pandas/io/xml.py index 90d67ac45d4fd..17c6f92847d5c 100644 --- a/pandas/io/xml.py +++ b/pandas/io/xml.py @@ -6,6 +6,7 @@ import io from typing import ( + TYPE_CHECKING, Any, Callable, Sequence, @@ -14,17 +15,6 @@ from pandas._config import using_nullable_dtypes from pandas._libs import lib -from pandas._typing import ( - TYPE_CHECKING, - CompressionOptions, - ConvertersArg, - DtypeArg, - FilePath, - ParseDatesArg, - ReadBuffer, - StorageOptions, - XMLParsers, -) from pandas.compat._optional import import_optional_dependency from pandas.errors import ( AbstractMethodError, @@ -51,6 +41,17 @@ from lxml import etree + from pandas._typing import ( + CompressionOptions, + ConvertersArg, + DtypeArg, + FilePath, + ParseDatesArg, + ReadBuffer, + StorageOptions, + XMLParsers, + ) + from pandas import DataFrame diff --git a/pyproject.toml b/pyproject.toml index 7af017b2de298..07913b7895500 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -300,11 +300,6 @@ exclude = [ "pandas/core/sorting.py" = ["TCH"] "pandas/core/construction.py" = ["TCH"] "pandas/core/missing.py" = ["TCH"] -"pandas/core/reshape/*" = ["TCH"] -"pandas/core/strings/*" = ["TCH"] -"pandas/core/tools/*" = ["TCH"] -"pandas/core/window/*" = ["TCH"] -"pandas/io/*" = ["TCH"] "pandas/tseries/*" = ["TCH"] "pandas/tests/*" = ["TCH"] "pandas/plotting/*" = ["TCH"]