Skip to content

move private imports from testing into tests/__init__.py #1205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 29, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 1 addition & 16 deletions pandas-stubs/_typing.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ from pandas.core.generic import NDFrame
from pandas.core.groupby.grouper import Grouper
from pandas.core.indexes.base import Index
from pandas.core.series import Series
from pandas.core.tools.datetimes import FulldatetimeDict
from typing_extensions import (
ParamSpec,
TypeAlias,
Expand Down Expand Up @@ -73,22 +74,6 @@ DatetimeDictArg: TypeAlias = (
)
DictConvertible: TypeAlias = FulldatetimeDict | DataFrame

class YearMonthDayDict(TypedDict, total=True):
year: DatetimeDictArg
month: DatetimeDictArg
day: DatetimeDictArg

class FulldatetimeDict(YearMonthDayDict, total=False):
hour: DatetimeDictArg
hours: DatetimeDictArg
minute: DatetimeDictArg
minutes: DatetimeDictArg
second: DatetimeDictArg
seconds: DatetimeDictArg
ms: DatetimeDictArg
us: DatetimeDictArg
ns: DatetimeDictArg

CorrelationMethod: TypeAlias = (
Literal["pearson", "kendall", "spearman"]
| Callable[[np.ndarray, np.ndarray], float]
Expand Down
19 changes: 19 additions & 0 deletions pandas-stubs/core/tools/datetimes.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ from datetime import (
)
from typing import (
Literal,
TypedDict,
overload,
)

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

DatetimeScalarOrArrayConvertible: TypeAlias = DatetimeScalar | ArrayConvertible

DatetimeDictArg: TypeAlias = list[Scalar] | tuple[Scalar, ...] | AnyArrayLike

class YearMonthDayDict(TypedDict, total=True):
year: DatetimeDictArg
month: DatetimeDictArg
day: DatetimeDictArg

class FulldatetimeDict(YearMonthDayDict, total=False):
hour: DatetimeDictArg
hours: DatetimeDictArg
minute: DatetimeDictArg
minutes: DatetimeDictArg
second: DatetimeDictArg
seconds: DatetimeDictArg
ms: DatetimeDictArg
us: DatetimeDictArg
ns: DatetimeDictArg

@overload
def to_datetime(
arg: DatetimeScalar,
Expand Down
29 changes: 28 additions & 1 deletion tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,39 @@
)

import numpy as np
import numpy.typing as npt
import pandas as pd

# Next set of imports is to keep the private imports needed for testing
# in one place
from pandas._testing import ensure_clean as ensure_clean
from pandas.core.groupby.groupby import BaseGroupBy
from pandas.util.version import Version
import pytest

from pandas._typing import T
if TYPE_CHECKING:
from pandas._typing import (
BooleanDtypeArg as BooleanDtypeArg,
BytesDtypeArg as BytesDtypeArg,
CategoryDtypeArg as CategoryDtypeArg,
ComplexDtypeArg as ComplexDtypeArg,
Dtype as Dtype,
FloatDtypeArg as FloatDtypeArg,
IntDtypeArg as IntDtypeArg,
ObjectDtypeArg as ObjectDtypeArg,
StrDtypeArg as StrDtypeArg,
T as T,
TimedeltaDtypeArg as TimedeltaDtypeArg,
TimestampDtypeArg as TimestampDtypeArg,
UIntDtypeArg as UIntDtypeArg,
VoidDtypeArg as VoidDtypeArg,
np_ndarray_bool as np_ndarray_bool,
np_ndarray_int as np_ndarray_int,
)
else:
# Separately define here so pytest works
np_ndarray_bool = npt.NDArray[np.bool_]
np_ndarray_int = npt.NDArray[np.signedinteger]

TYPE_CHECKING_INVALID_USAGE: Final = TYPE_CHECKING
WINDOWS = os.name == "nt" or "cygwin" in platform.system().lower()
Expand Down
2 changes: 1 addition & 1 deletion tests/extension/decimal/array.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

from builtins import type as type_t
import decimal
import numbers
import sys
Expand All @@ -24,7 +25,6 @@

from pandas._typing import (
TakeIndexer,
type_t,
)

from pandas.core.dtypes.base import ExtensionDtype
Expand Down
9 changes: 5 additions & 4 deletions tests/test_api_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import numpy as np
import pandas as pd
from pandas._testing import ensure_clean
from pandas import read_json
from pandas.api.typing import (
DataFrameGroupBy,
DatetimeIndexResamplerGroupby,
Expand All @@ -29,9 +29,10 @@
assert_type,
)

from tests import check

from pandas.io.json._json import read_json
from tests import (
check,
ensure_clean,
)

ResamplerGroupBy: TypeAlias = (
DatetimeIndexResamplerGroupby
Expand Down
6 changes: 4 additions & 2 deletions tests/test_dtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@
import numpy as np
import pandas as pd
from pandas.api.types import is_any_real_numeric_dtype
from pandas.api.typing import (
NaTType,
NAType,
)
from pandas.core.arrays import (
BooleanArray,
IntegerArray,
)
import pyarrow as pa
from typing_extensions import assert_type

from pandas._libs import NaTType
from pandas._libs.missing import NAType
from pandas._typing import Scalar

from tests import (
Expand Down
6 changes: 3 additions & 3 deletions tests/test_frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
import numpy as np
import numpy.typing as npt
import pandas as pd
from pandas._testing import ensure_clean
from pandas import Timestamp
from pandas.api.typing import NAType
from pandas.core.resample import (
DatetimeIndexResampler,
Resampler,
Expand All @@ -44,14 +45,13 @@
)
import xarray as xr

from pandas._libs.missing import NAType
from pandas._libs.tslibs.timestamps import Timestamp
from pandas._typing import Scalar

from tests import (
PD_LTE_22,
TYPE_CHECKING_INVALID_USAGE,
check,
ensure_clean,
pytest_warns_bounded,
)

Expand Down
8 changes: 6 additions & 2 deletions tests/test_indexes.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
from __future__ import annotations

import datetime as dt
from typing import Union
from typing import (
TYPE_CHECKING,
Union,
)

import numpy as np
from numpy import typing as npt
Expand All @@ -13,7 +16,8 @@
assert_type,
)

from pandas._typing import Dtype # noqa: F401
if TYPE_CHECKING:
from tests import Dtype # noqa: F401

from tests import (
PD_LTE_22,
Expand Down
4 changes: 2 additions & 2 deletions tests/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
read_table,
read_xml,
)
from pandas._testing import ensure_clean
from pandas.api.typing import JsonReader
import pytest
import sqlalchemy
import sqlalchemy.orm
Expand All @@ -51,11 +51,11 @@
TYPE_CHECKING_INVALID_USAGE,
WINDOWS,
check,
ensure_clean,
)
from tests import NUMPY20 # See https://github.com/PyTables/PyTables/issues/1172

from pandas.io.api import to_pickle
from pandas.io.json._json import JsonReader
from pandas.io.parsers import TextFileReader
from pandas.io.pytables import (
TableIterator,
Expand Down
6 changes: 4 additions & 2 deletions tests/test_pandas.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
import pandas as pd
from pandas import Grouper
from pandas.api.extensions import ExtensionArray
from pandas.api.typing import (
NaTType,
NAType,
)
import pandas.util as pdutil

# TODO: github.com/pandas-dev/pandas/issues/55023
Expand All @@ -23,8 +27,6 @@
assert_type,
)

from pandas._libs.missing import NAType
from pandas._libs.tslibs import NaTType
from pandas._typing import Scalar

from tests import (
Expand Down
14 changes: 7 additions & 7 deletions tests/test_scalars.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,13 @@
import numpy as np
from numpy import typing as npt
import pandas as pd
from pandas.api.typing import NaTType
import pytz
from typing_extensions import (
TypeAlias,
assert_type,
)

from pandas._libs.tslibs import (
BaseOffset,
NaTType,
)
from pandas._libs.tslibs.timedeltas import Components
from pandas._typing import TimeUnit

Expand All @@ -32,7 +29,10 @@
pytest_warns_bounded,
)

from pandas.tseries.offsets import Day
from pandas.tseries.offsets import (
BaseOffset,
Day,
)

if TYPE_CHECKING:
from pandas.core.series import (
Expand All @@ -42,14 +42,14 @@
TimestampSeries,
)

from pandas._typing import np_ndarray_bool
else:
np_ndarray_bool = npt.NDArray[np.bool_]
TimedeltaSeries: TypeAlias = pd.Series
TimestampSeries: TypeAlias = pd.Series
PeriodSeries: TypeAlias = pd.Series
OffsetSeries: TypeAlias = pd.Series

from tests import np_ndarray_bool


def test_interval() -> None:
interval_i = pd.Interval(0, 1, closed="left")
Expand Down
24 changes: 13 additions & 11 deletions tests/test_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@

import numpy as np
import pandas as pd
from pandas._testing import ensure_clean
from pandas.api.extensions import (
ExtensionArray,
ExtensionDtype,
)
from pandas.api.typing import NAType
from pandas.core.arrays.datetimes import DatetimeArray
from pandas.core.arrays.timedeltas import TimedeltaArray
from pandas.core.window import ExponentialMovingWindow
Expand All @@ -43,9 +43,6 @@
)
import xarray as xr

from pandas._libs.missing import NAType
from pandas._libs.tslibs import BaseOffset
from pandas._libs.tslibs.offsets import YearEnd
from pandas._typing import (
DtypeObj,
Scalar,
Expand All @@ -56,25 +53,25 @@
TYPE_CHECKING_INVALID_USAGE,
WINDOWS,
check,
ensure_clean,
pytest_warns_bounded,
)
from tests.extension.decimal.array import DecimalDtype

from pandas.io.formats.format import EngFormatter
from pandas.tseries.offsets import (
BaseOffset,
YearEnd,
)

if TYPE_CHECKING:
from pandas.core.series import (
OffsetSeries,
TimedeltaSeries,
TimestampSeries,
)
else:
TimedeltaSeries: TypeAlias = pd.Series
TimestampSeries: TypeAlias = pd.Series
OffsetSeries: TypeAlias = pd.Series

if TYPE_CHECKING:
from pandas._typing import (
from tests import (
BooleanDtypeArg,
BytesDtypeArg,
CategoryDtypeArg,
Expand All @@ -88,7 +85,12 @@
UIntDtypeArg,
VoidDtypeArg,
)
from pandas._typing import np_ndarray_int # noqa: F401
from tests import np_ndarray_int # noqa: F401

else:
TimedeltaSeries: TypeAlias = pd.Series
TimestampSeries: TypeAlias = pd.Series
OffsetSeries: TypeAlias = pd.Series


# Tests will use numpy 2.1 in python 3.10 or later
Expand Down
10 changes: 4 additions & 6 deletions tests/test_string_accessors.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@
import re

import numpy as np
import numpy.typing as npt
import pandas as pd
from typing_extensions import assert_type

from tests import check

# Separately define here so pytest works
np_ndarray_bool = npt.NDArray[np.bool_]

from tests import (
check,
np_ndarray_bool,
)

DATA = ["applep", "bananap", "Cherryp", "DATEp", "eGGpLANTp", "123p", "23.45p"]
DATA_BYTES = [b"applep", b"bananap"]
Expand Down
Loading