Skip to content
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
11 changes: 10 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,17 @@ jobs:
run:
cp -R partial/ typings

- name: Run tests
- name: Run pyright tests
uses: gramster/pyright-action@main
with:
project: pyrighttestconfig.json
warn-partial: true

- name: Run pytest
run:
pytest tests/pandas

- name: Run mypy
run:
mypy tests/pandas

53 changes: 15 additions & 38 deletions partial/pandas/_libs/interval.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ from __future__ import annotations
from typing import (
Any,
Generic,
Literal,
Tuple,
TypeVar,
Union,
overload,
Expand All @@ -14,6 +12,7 @@ import numpy as np
import numpy.typing as npt

from pandas._typing import (
IntervalClosedType,
Timedelta,
Timestamp,
)
Expand All @@ -26,23 +25,17 @@ _OrderableT = TypeVar("_OrderableT", int, float, Timestamp, Timedelta)

class _LengthDescriptor:
@overload
def __get__(self, instance: Interval[float], owner: Any) -> float: ...
def __get__(self, instance: Interval[_OrderableScalarT], owner: Any) -> _OrderableScalarT: ...
@overload
def __get__(self, instance: Interval[int], owner: Any) -> int: ...
@overload
def __get__(
self, instance: Interval[_OrderableTimesT], owner: Any
) -> Timedelta: ...
def __get__(self, instance: Interval[_OrderableTimesT], owner: Any) -> Timedelta: ...
@overload
def __get__(self, instance: IntervalTree, owner: Any) -> np.ndarray: ...

class _MidDescriptor:
@overload
def __get__(self, instance: Interval[_OrderableScalarT], owner: Any) -> float: ...
@overload
def __get__(
self, instance: Interval[_OrderableTimesT], owner: Any
) -> _OrderableTimesT: ...
def __get__(self, instance: Interval[_OrderableTimesT], owner: Any) -> _OrderableTimesT: ...
@overload
def __get__(self, instance: IntervalTree, owner: Any) -> np.ndarray: ...

Expand All @@ -67,56 +60,46 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
@property
def right(self: Interval[_OrderableT]) -> _OrderableT: ...
@property
def closed(self) -> Literal["left", "right", "both", "neither"]: ...
def closed(self) -> IntervalClosedType: ...
def __init__(
self,
left: _OrderableT,
right: _OrderableT,
closed: Literal["left", "right", "both", "neither"] = ...,
closed: IntervalClosedType = ...,
): ...
def __hash__(self) -> int: ...
@overload
def __contains__(self: Interval[_OrderableTimesT], _OrderableTimesT) -> bool: ...
@overload
def __contains__(
self: Interval[_OrderableScalarT], key: Union[int, float]
) -> bool: ...
def __contains__(self: Interval[_OrderableScalarT], key: Union[int, float]) -> bool: ...
def __repr__(self) -> str: ...
def __str__(self) -> str: ...
@overload
def __add__(
self: Interval[_OrderableTimesT], y: Timedelta
) -> Interval[_OrderableTimesT]: ...
def __add__(self: Interval[_OrderableTimesT], y: Timedelta) -> Interval[_OrderableTimesT]: ...
@overload
def __add__(self: Interval[int], y: int) -> Interval[int]: ...
@overload
def __add__(self: Interval[int], y: float) -> Interval[float]: ...
@overload
def __add__(self: Interval[float], y: Union[int, float]) -> Interval[float]: ...
@overload
def __radd__(
self: Interval[_OrderableTimesT], y: Timedelta
) -> Interval[_OrderableTimesT]: ...
def __radd__(self: Interval[_OrderableTimesT], y: Timedelta) -> Interval[_OrderableTimesT]: ...
@overload
def __radd__(self: Interval[int], y: int) -> Interval[int]: ...
@overload
def __radd__(self: Interval[int], y: float) -> Interval[float]: ...
@overload
def __radd__(self: Interval[float], y: Union[int, float]) -> Interval[float]: ...
@overload
def __sub__(
self: Interval[_OrderableTimesT], y: Timedelta
) -> Interval[_OrderableTimesT]: ...
def __sub__(self: Interval[_OrderableTimesT], y: Timedelta) -> Interval[_OrderableTimesT]: ...
@overload
def __sub__(self: Interval[int], y: int) -> Interval[int]: ...
@overload
def __sub__(self: Interval[int], y: float) -> Interval[float]: ...
@overload
def __sub__(self: Interval[float], y: Union[int, float]) -> Interval[float]: ...
@overload
def __rsub__(
self: Interval[_OrderableTimesT], y: Timedelta
) -> Interval[_OrderableTimesT]: ...
def __rsub__(self: Interval[_OrderableTimesT], y: Timedelta) -> Interval[_OrderableTimesT]: ...
@overload
def __rsub__(self: Interval[int], y: int) -> Interval[int]: ...
@overload
Expand Down Expand Up @@ -146,27 +129,21 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
@overload
def __floordiv__(self: Interval[int], y: float) -> Interval[float]: ...
@overload
def __floordiv__(
self: Interval[float], y: Union[int, float]
) -> Interval[float]: ...
def __floordiv__(self: Interval[float], y: Union[int, float]) -> Interval[float]: ...
def overlaps(self: Interval[_OrderableT], other: Interval[_OrderableT]) -> bool: ...

def intervals_to_interval_bounds(
intervals: np.ndarray, validate_closed: bool = ...
) -> Tuple[np.ndarray, np.ndarray, str]: ...
def intervals_to_interval_bounds(intervals: np.ndarray, validate_closed: bool = ...) -> tuple[np.ndarray, np.ndarray, str]: ...

class IntervalTree(IntervalMixin):
def __init__(
self,
left: np.ndarray,
right: np.ndarray,
closed: Literal["left", "right", "both", "neither"] = ...,
closed: IntervalClosedType = ...,
leaf_size: int = ...,
): ...
def get_indexer(self, target) -> npt.NDArray[np.intp]: ...
def get_indexer_non_unique(
self, target
) -> Tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]]: ...
def get_indexer_non_unique(self, target) -> tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]]: ...
_na_count: int
@property
def is_overlapping(self) -> bool: ...
Expand Down
10 changes: 10 additions & 0 deletions partial/pandas/_libs/tslibs/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
__all__ = ["Period", "Timestamp", "Timedelta", "NaT", "NaTType", "iNaT", "nat_strings", "BaseOffset", "OutofBoundsDatetime"]

from .period import Period
from .timestamps import Timestamp
from .timedeltas import Timedelta
from .nattype import (
NaT,
NaTType,
iNaT,
nat_strings,
)
from .offsets import BaseOffset
from np_datetime import OutOfBoundsDatetime as OutOfBoundsDatetime
155 changes: 155 additions & 0 deletions partial/pandas/_libs/tslibs/nattype.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
from __future__ import annotations
import numpy as np
import sys
from datetime import datetime, timedelta, tzinfo
from .timestamps import Timestamp
from pandas.tseries.offsets import DateOffset
from typing import Any, Literal, Optional, Set, Type, Union

nat_strings: Set[str] = ...
iNaT: int = ...

class _NaT(datetime):

__array_priority__: int = ...
def __richcmp__(self, other: object, op: int) -> bool: ...
def __add__(self, other) -> _NaT: ...
def __pos__(self) -> _NaT: ...
def __neg__(self) -> _NaT: ...
def __truediv__(self, other) -> _NaT: ...
def __floordiv__(self, other) -> _NaT: ...
def __mul__(self, other) -> _NaT: ...
@property
def asm8(self) -> np.datetime64: ...
def to_datetime64(self) -> np.datetime64: ...
def to_numpy(self, dtype: Any, copy: bool = ...) -> np.datetime64: ...
def __repr__(self) -> str: ...
def __str__(self) -> str: ...
def __hash__(self) -> int: ...
def __int__(self) -> _NaT: ...
def __long__(self) -> _NaT: ...
@property
def is_leap_year(self) -> bool: ...
@property
def is_month_start(self) -> bool: ...
@property
def is_quarter_start(self) -> bool: ...
@property
def is_year_start(self) -> bool: ...
@property
def is_month_end(self) -> bool: ...
@property
def is_quarter_end(self) -> bool: ...
@property
def is_year_end(self) -> bool: ...

class NaTType(_NaT):
def __new__(cls) -> NaTType: ...
def __reduce__(self) -> Any: ...
def __rdiv__(self, other) -> _NaT: ...
def __rtruediv__(self, other) -> _NaT: ...
def __rfloordiv__(self, other) -> _NaT: ...
def __rmul__(self, other) -> _NaT: ...
@property
def year(self) -> float: ... # type: ignore[override]
@property
def quarter(self) -> float: ...
@property
def month(self) -> float: ... # type: ignore[override]
@property
def day(self) -> float: ... # type: ignore[override]
@property
def hour(self) -> float: ... # type: ignore[override]
@property
def minute(self) -> float: ... # type: ignore[override]
@property
def second(self) -> float: ... # type: ignore[override]
@property
def millisecond(self) -> float: ...
@property
def microsecond(self) -> float: ... # type: ignore[override]
@property
def nanosecond(self) -> float: ...
@property
def week(self) -> float: ...
@property
def dayofyear(self) -> float: ...
@property
def weekofyear(self) -> float: ...
@property
def days_in_month(self) -> float: ...
@property
def daysinmonth(self) -> float: ...
@property
def dayofweek(self) -> float: ...
@property
def days(self) -> float: ...
@property
def seconds(self) -> float: ...
@property
def microseconds(self) -> float: ...
@property
def nanoseconds(self) -> float: ...
@property
def qyear(self) -> float: ...
@property
def weekday(self) -> float: ... # type: ignore[override]
@property
def isoweekday(self) -> float: ... # type: ignore[override]
@property
def total_seconds(self) -> float: ...
def month_name(self, locale: Optional[str] = ...) -> str: ...
def day_name(self, locale: Optional[str] = ...) -> str: ...
def date(self) -> NaTType: ...
def dst(self) -> None: ...
def tzname(self) -> None: ...
def utcoffset(self) -> None: ...
def timestamp(self) -> float: ...
def to_pydatetime(self) -> datetime: ...
@classmethod
def now(cls, tz: Optional[tzinfo] = ...) -> NaTType: ...
@classmethod
def today(cls) -> NaTType: ...
def round(
self,
freq: str,
ambiguous: Union[bool, str, Literal["raise", "NaT"]] = ...,
nonexistent: Union[str, Literal["raise", "shift_forward", "shift_backward", "NaT"], timedelta] = ...,
) -> Timestamp: ...
def floor(
self,
freq: str,
ambiguous: Union[bool, str, Literal["raise", "NaT"]] = ...,
nonexistent: Union[str, Literal["raise", "shift_forward", "shift_backward", "NaT"], timedelta] = ...,
) -> Timestamp: ...
def ceil(
self,
freq: str,
ambiguous: Union[bool, str, Literal["raise", "NaT"]] = ...,
nonexistent: Union[str, Literal["raise", "shift_forward", "shift_backward", "NaT"], timedelta] = ...,
) -> Timestamp: ...
def tz_convert(self, tz: Any) -> Timestamp: ...
def tz_localizel(
self,
tz: Any,
ambiguous: Union[bool, str, Literal["raise", "NaT"]] = ...,
nonexistent: Union[str, Literal["raise", "shift_forward", "shift_backward", "NaT"], timedelta] = ...,
) -> Timestamp: ...
def replace( # type: ignore[override]
self,
year: Optional[int] = ...,
month: Optional[int] = ...,
day: Optional[int] = ...,
hour: Optional[int] = ...,
minute: Optional[int] = ...,
second: Optional[int] = ...,
microsecond: Optional[int] = ...,
nanosecond: Optional[int] = ...,
tzinfo: Any = ...,
fold: int = ...,
) -> Timestamp: ...

NaT: NaTType = ...

def checknull_with_nat(val: object) -> bool: ...
def is_null_datetimelike(val: object, inat_is_null: bool = ...) -> bool: ...
1 change: 1 addition & 0 deletions partial/pandas/_libs/tslibs/np_datetime.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
class OutOfBoundsDatetime(ValueError): ...
49 changes: 49 additions & 0 deletions partial/pandas/_libs/tslibs/offsets.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from __future__ import annotations
from datetime import datetime
from typing import Tuple, Union
from datetime import timedelta

class BaseOffset:

def __init__(self, n: int = ..., normalize: bool = ...) -> None: ...
def __eq__(self, other) -> bool: ...
def __ne__(self, other) -> bool: ...
def __hash__(self) -> int: ...
@property
def kwds(self) -> dict: ...
@property
def base(self) -> BaseOffset: ...
def __add__(self, other) -> BaseOffset: ...
def __sub__(self, other) -> BaseOffset: ...
def __call__(self, other): ...
def __mul__(self, other): ...
def __neg__(self) -> BaseOffset: ...
def copy(self) -> BaseOffset: ...
def __repr__(self) -> str: ...
@property
def name(self) -> str: ...
@property
def rule_code(self) -> str: ...
def freqstr(self) -> str: ...
# Next one is problematic due to circular imports
#def apply_index(self, dtindex: DatetimeIndex) -> DatetimeIndex: ...
def apply_index(self, dtindex): ...
def _apply_array(self, dtarr) -> None: ...
def rollback(self, dt: datetime) -> datetime: ...
def rollforward(self, dt: datetime) -> datetime: ...
def is_on_offset(self, dt: datetime) -> bool: ...
def __setstate__(self, state) -> None: ...
def __getstate__(self): ...
@property
def nanos(self) -> int: ...
def onOffset(self, dt: datetime) -> bool: ...
def isAnchored(self) -> bool: ...
def is_anchored(self) -> bool: ...

class SingleConstructorOffset(BaseOffset):
@classmethod
def _from_name(cls, suffix=None): ...
def __reduce__(self): ...

def to_offset(freq: Union[str, Tuple, timedelta, BaseOffset, None]) -> Union[BaseOffset, None]: ...

Loading