Skip to content

Commit f5fd35f

Browse files
authored
move private imports from testing into tests/__init__.py (#1205)
1 parent ec745ff commit f5fd35f

16 files changed

+108
-74
lines changed

pandas-stubs/_typing.pyi

+1-16
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ from pandas.core.generic import NDFrame
3131
from pandas.core.groupby.grouper import Grouper
3232
from pandas.core.indexes.base import Index
3333
from pandas.core.series import Series
34+
from pandas.core.tools.datetimes import FulldatetimeDict
3435
from typing_extensions import (
3536
ParamSpec,
3637
TypeAlias,
@@ -73,22 +74,6 @@ DatetimeDictArg: TypeAlias = (
7374
)
7475
DictConvertible: TypeAlias = FulldatetimeDict | DataFrame
7576

76-
class YearMonthDayDict(TypedDict, total=True):
77-
year: DatetimeDictArg
78-
month: DatetimeDictArg
79-
day: DatetimeDictArg
80-
81-
class FulldatetimeDict(YearMonthDayDict, total=False):
82-
hour: DatetimeDictArg
83-
hours: DatetimeDictArg
84-
minute: DatetimeDictArg
85-
minutes: DatetimeDictArg
86-
second: DatetimeDictArg
87-
seconds: DatetimeDictArg
88-
ms: DatetimeDictArg
89-
us: DatetimeDictArg
90-
ns: DatetimeDictArg
91-
9277
CorrelationMethod: TypeAlias = (
9378
Literal["pearson", "kendall", "spearman"]
9479
| Callable[[np.ndarray, np.ndarray], float]

pandas-stubs/core/tools/datetimes.pyi

+19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ from datetime import (
55
)
66
from typing import (
77
Literal,
8+
TypedDict,
89
overload,
910
)
1011

@@ -37,6 +38,24 @@ DatetimeScalar: TypeAlias = Scalar | datetime | np.datetime64 | date
3738

3839
DatetimeScalarOrArrayConvertible: TypeAlias = DatetimeScalar | ArrayConvertible
3940

41+
DatetimeDictArg: TypeAlias = list[Scalar] | tuple[Scalar, ...] | AnyArrayLike
42+
43+
class YearMonthDayDict(TypedDict, total=True):
44+
year: DatetimeDictArg
45+
month: DatetimeDictArg
46+
day: DatetimeDictArg
47+
48+
class FulldatetimeDict(YearMonthDayDict, total=False):
49+
hour: DatetimeDictArg
50+
hours: DatetimeDictArg
51+
minute: DatetimeDictArg
52+
minutes: DatetimeDictArg
53+
second: DatetimeDictArg
54+
seconds: DatetimeDictArg
55+
ms: DatetimeDictArg
56+
us: DatetimeDictArg
57+
ns: DatetimeDictArg
58+
4059
@overload
4160
def to_datetime(
4261
arg: DatetimeScalar,

tests/__init__.py

+28-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,39 @@
1414
)
1515

1616
import numpy as np
17+
import numpy.typing as npt
1718
import pandas as pd
19+
20+
# Next set of imports is to keep the private imports needed for testing
21+
# in one place
22+
from pandas._testing import ensure_clean as ensure_clean
1823
from pandas.core.groupby.groupby import BaseGroupBy
1924
from pandas.util.version import Version
2025
import pytest
2126

22-
from pandas._typing import T
27+
if TYPE_CHECKING:
28+
from pandas._typing import (
29+
BooleanDtypeArg as BooleanDtypeArg,
30+
BytesDtypeArg as BytesDtypeArg,
31+
CategoryDtypeArg as CategoryDtypeArg,
32+
ComplexDtypeArg as ComplexDtypeArg,
33+
Dtype as Dtype,
34+
FloatDtypeArg as FloatDtypeArg,
35+
IntDtypeArg as IntDtypeArg,
36+
ObjectDtypeArg as ObjectDtypeArg,
37+
StrDtypeArg as StrDtypeArg,
38+
T as T,
39+
TimedeltaDtypeArg as TimedeltaDtypeArg,
40+
TimestampDtypeArg as TimestampDtypeArg,
41+
UIntDtypeArg as UIntDtypeArg,
42+
VoidDtypeArg as VoidDtypeArg,
43+
np_ndarray_bool as np_ndarray_bool,
44+
np_ndarray_int as np_ndarray_int,
45+
)
46+
else:
47+
# Separately define here so pytest works
48+
np_ndarray_bool = npt.NDArray[np.bool_]
49+
np_ndarray_int = npt.NDArray[np.signedinteger]
2350

2451
TYPE_CHECKING_INVALID_USAGE: Final = TYPE_CHECKING
2552
WINDOWS = os.name == "nt" or "cygwin" in platform.system().lower()

tests/extension/decimal/array.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from builtins import type as type_t
34
import decimal
45
import numbers
56
import sys
@@ -24,7 +25,6 @@
2425

2526
from pandas._typing import (
2627
TakeIndexer,
27-
type_t,
2828
)
2929

3030
from pandas.core.dtypes.base import ExtensionDtype

tests/test_api_typing.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import numpy as np
44
import pandas as pd
5-
from pandas._testing import ensure_clean
5+
from pandas import read_json
66
from pandas.api.typing import (
77
DataFrameGroupBy,
88
DatetimeIndexResamplerGroupby,
@@ -29,9 +29,10 @@
2929
assert_type,
3030
)
3131

32-
from tests import check
33-
34-
from pandas.io.json._json import read_json
32+
from tests import (
33+
check,
34+
ensure_clean,
35+
)
3536

3637
ResamplerGroupBy: TypeAlias = (
3738
DatetimeIndexResamplerGroupby

tests/test_dtypes.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@
1414
import numpy as np
1515
import pandas as pd
1616
from pandas.api.types import is_any_real_numeric_dtype
17+
from pandas.api.typing import (
18+
NaTType,
19+
NAType,
20+
)
1721
from pandas.core.arrays import (
1822
BooleanArray,
1923
IntegerArray,
2024
)
2125
import pyarrow as pa
2226
from typing_extensions import assert_type
2327

24-
from pandas._libs import NaTType
25-
from pandas._libs.missing import NAType
2628
from pandas._typing import Scalar
2729

2830
from tests import (

tests/test_frame.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
import numpy as np
3232
import numpy.typing as npt
3333
import pandas as pd
34-
from pandas._testing import ensure_clean
34+
from pandas import Timestamp
35+
from pandas.api.typing import NAType
3536
from pandas.core.resample import (
3637
DatetimeIndexResampler,
3738
Resampler,
@@ -44,14 +45,13 @@
4445
)
4546
import xarray as xr
4647

47-
from pandas._libs.missing import NAType
48-
from pandas._libs.tslibs.timestamps import Timestamp
4948
from pandas._typing import Scalar
5049

5150
from tests import (
5251
PD_LTE_22,
5352
TYPE_CHECKING_INVALID_USAGE,
5453
check,
54+
ensure_clean,
5555
pytest_warns_bounded,
5656
)
5757

tests/test_indexes.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
from __future__ import annotations
22

33
import datetime as dt
4-
from typing import Union
4+
from typing import (
5+
TYPE_CHECKING,
6+
Union,
7+
)
58

69
import numpy as np
710
from numpy import typing as npt
@@ -13,7 +16,8 @@
1316
assert_type,
1417
)
1518

16-
from pandas._typing import Dtype # noqa: F401
19+
if TYPE_CHECKING:
20+
from tests import Dtype # noqa: F401
1721

1822
from tests import (
1923
PD_LTE_22,

tests/test_io.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
read_table,
4141
read_xml,
4242
)
43-
from pandas._testing import ensure_clean
43+
from pandas.api.typing import JsonReader
4444
import pytest
4545
import sqlalchemy
4646
import sqlalchemy.orm
@@ -51,11 +51,11 @@
5151
TYPE_CHECKING_INVALID_USAGE,
5252
WINDOWS,
5353
check,
54+
ensure_clean,
5455
)
5556
from tests import NUMPY20 # See https://github.com/PyTables/PyTables/issues/1172
5657

5758
from pandas.io.api import to_pickle
58-
from pandas.io.json._json import JsonReader
5959
from pandas.io.parsers import TextFileReader
6060
from pandas.io.pytables import (
6161
TableIterator,

tests/test_pandas.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
import pandas as pd
1414
from pandas import Grouper
1515
from pandas.api.extensions import ExtensionArray
16+
from pandas.api.typing import (
17+
NaTType,
18+
NAType,
19+
)
1620
import pandas.util as pdutil
1721

1822
# TODO: github.com/pandas-dev/pandas/issues/55023
@@ -23,8 +27,6 @@
2327
assert_type,
2428
)
2529

26-
from pandas._libs.missing import NAType
27-
from pandas._libs.tslibs import NaTType
2830
from pandas._typing import Scalar
2931

3032
from tests import (

tests/test_scalars.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,13 @@
1313
import numpy as np
1414
from numpy import typing as npt
1515
import pandas as pd
16+
from pandas.api.typing import NaTType
1617
import pytz
1718
from typing_extensions import (
1819
TypeAlias,
1920
assert_type,
2021
)
2122

22-
from pandas._libs.tslibs import (
23-
BaseOffset,
24-
NaTType,
25-
)
2623
from pandas._libs.tslibs.timedeltas import Components
2724
from pandas._typing import TimeUnit
2825

@@ -32,7 +29,10 @@
3229
pytest_warns_bounded,
3330
)
3431

35-
from pandas.tseries.offsets import Day
32+
from pandas.tseries.offsets import (
33+
BaseOffset,
34+
Day,
35+
)
3636

3737
if TYPE_CHECKING:
3838
from pandas.core.series import (
@@ -42,14 +42,14 @@
4242
TimestampSeries,
4343
)
4444

45-
from pandas._typing import np_ndarray_bool
4645
else:
47-
np_ndarray_bool = npt.NDArray[np.bool_]
4846
TimedeltaSeries: TypeAlias = pd.Series
4947
TimestampSeries: TypeAlias = pd.Series
5048
PeriodSeries: TypeAlias = pd.Series
5149
OffsetSeries: TypeAlias = pd.Series
5250

51+
from tests import np_ndarray_bool
52+
5353

5454
def test_interval() -> None:
5555
interval_i = pd.Interval(0, 1, closed="left")

tests/test_series.py

+13-11
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525

2626
import numpy as np
2727
import pandas as pd
28-
from pandas._testing import ensure_clean
2928
from pandas.api.extensions import (
3029
ExtensionArray,
3130
ExtensionDtype,
3231
)
32+
from pandas.api.typing import NAType
3333
from pandas.core.arrays.datetimes import DatetimeArray
3434
from pandas.core.arrays.timedeltas import TimedeltaArray
3535
from pandas.core.window import ExponentialMovingWindow
@@ -43,9 +43,6 @@
4343
)
4444
import xarray as xr
4545

46-
from pandas._libs.missing import NAType
47-
from pandas._libs.tslibs import BaseOffset
48-
from pandas._libs.tslibs.offsets import YearEnd
4946
from pandas._typing import (
5047
DtypeObj,
5148
Scalar,
@@ -56,25 +53,25 @@
5653
TYPE_CHECKING_INVALID_USAGE,
5754
WINDOWS,
5855
check,
56+
ensure_clean,
5957
pytest_warns_bounded,
6058
)
6159
from tests.extension.decimal.array import DecimalDtype
6260

6361
from pandas.io.formats.format import EngFormatter
62+
from pandas.tseries.offsets import (
63+
BaseOffset,
64+
YearEnd,
65+
)
6466

6567
if TYPE_CHECKING:
6668
from pandas.core.series import (
6769
OffsetSeries,
6870
TimedeltaSeries,
6971
TimestampSeries,
7072
)
71-
else:
72-
TimedeltaSeries: TypeAlias = pd.Series
73-
TimestampSeries: TypeAlias = pd.Series
74-
OffsetSeries: TypeAlias = pd.Series
7573

76-
if TYPE_CHECKING:
77-
from pandas._typing import (
74+
from tests import (
7875
BooleanDtypeArg,
7976
BytesDtypeArg,
8077
CategoryDtypeArg,
@@ -88,7 +85,12 @@
8885
UIntDtypeArg,
8986
VoidDtypeArg,
9087
)
91-
from pandas._typing import np_ndarray_int # noqa: F401
88+
from tests import np_ndarray_int # noqa: F401
89+
90+
else:
91+
TimedeltaSeries: TypeAlias = pd.Series
92+
TimestampSeries: TypeAlias = pd.Series
93+
OffsetSeries: TypeAlias = pd.Series
9294

9395

9496
# Tests will use numpy 2.1 in python 3.10 or later

tests/test_string_accessors.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@
22
import re
33

44
import numpy as np
5-
import numpy.typing as npt
65
import pandas as pd
76
from typing_extensions import assert_type
87

9-
from tests import check
10-
11-
# Separately define here so pytest works
12-
np_ndarray_bool = npt.NDArray[np.bool_]
13-
8+
from tests import (
9+
check,
10+
np_ndarray_bool,
11+
)
1412

1513
DATA = ["applep", "bananap", "Cherryp", "DATEp", "eGGpLANTp", "123p", "23.45p"]
1614
DATA_BYTES = [b"applep", b"bananap"]

0 commit comments

Comments
 (0)