Skip to content

Conversation

@cmp0xff
Copy link
Contributor

@cmp0xff cmp0xff commented Oct 28, 2025

@cmp0xff cmp0xff added Index Related to the Index class or subclasses Numeric Operations Arithmetic, Comparison, and Logical operations Series Series data structure labels Oct 28, 2025
@cmp0xff cmp0xff mentioned this pull request Oct 28, 2025
2 tasks
@cmp0xff cmp0xff force-pushed the feature/floordiv branch 4 times, most recently from 3df344a to 674b994 Compare October 31, 2025 11:02
Copy link
Collaborator

@Dr-Irv Dr-Irv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few things:

  1. You're inconsistent when having timedelta divided by int where "divided" is either regular division or floor division, and timedelta is a single element or a sequence of some type. You have that as being not allowed in the stubs, but they work at runtime. Sometimes you do allow it, so you have to fix that.
  2. There are a few places where you say you can't detect via static typing, and I'm surprised at that.

Also, you are making changes here that are independent of supporting floordiv, namely:

  1. You changed the pyrefly override syntax
  2. You changed some imports from from pandas import Series to from pandas.core.series import Series

In the future, if you are making changes where the changes don't have to do with the main intent of the PR, make a separate PR for those changes. E.g., in the above case, you could do one for pyrefly and another to change the imports.

@cmp0xff cmp0xff marked this pull request as draft November 4, 2025 22:33
Copy link
Contributor Author

@cmp0xff cmp0xff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1. You're inconsistent when having `timedelta` divided by `int` where "divided" is either regular division or floor division, and `timedelta` is a single element or a sequence of some type.  You have that as being not allowed in the stubs, but they work at runtime.  Sometimes you do allow it, so you have to fix that.

When the runtime result has the correct dtype, this PR should give type hints. When the operation crashes at runtime or gives object as dtype, this PR should show error. This was discussed in e.g. #1431 (comment), where Index[Timedelta] (which has dtype object) is banned.

2. There are a few places where you say you can't detect via static typing, and I'm surprised at that.

Still working on them. Will ping when finished.

1. You changed the `pyrefly` override syntax

Will do separately

2. You changed some imports from `from pandas import Series` to `from pandas.core.series import Series`

Will do separately.

@Dr-Irv
Copy link
Collaborator

Dr-Irv commented Nov 5, 2025

When the runtime result has the correct dtype, this PR should give type hints. When the operation crashes at runtime or gives object as dtype, this PR should show error. This was discussed in e.g. #1431 (comment), where Index[Timedelta] (which has dtype object) is banned.

I think this situation is different. When we banned Index[Timedelta] when the dtype was object, my concern was that you were doing tests using that type, and we don't want to assume it could be created.

Here, this is about the results of the computation. If we know the result has object dtype, I think the stubs can return a result without a specified value of S1 (i.e., either Index or Index[Any]; Series or Series[Any])

@cmp0xff cmp0xff requested a review from Dr-Irv November 6, 2025 15:05
@cmp0xff cmp0xff marked this pull request as ready for review November 6, 2025 15:32
Copy link
Collaborator

@Dr-Irv Dr-Irv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pretty close. Only a few things left

pd.Series,
)
if TYPE_CHECKING_INVALID_USAGE:
assert_type(s / left_i, Any)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

surprised that pyright isn't detecting this one

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have further insights 😔

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's on the numpy side. pyright sees the type of s as "ndarray[tuple[Any, ...], dtype[datetime64[date | int | None]]]" . numpy has this overload that matches:

    @overload
    def __truediv__(self: NDArray[Any], other: _ArrayLikeObject_co, /) -> Any: ...

Can you add a comment that indicates that numpy is not picking up that dividing a numpy array by anything and link to this issue I just created? numpy/numpy#30173

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cmp0xff cmp0xff mentioned this pull request Nov 7, 2025
@cmp0xff cmp0xff requested a review from Dr-Irv November 7, 2025 10:28
Copy link
Collaborator

@Dr-Irv Dr-Irv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One open conversation - just add a comment about why pyright isn't picking up that one case.

@cmp0xff cmp0xff requested a review from Dr-Irv November 7, 2025 16:21
Copy link
Collaborator

@Dr-Irv Dr-Irv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks @cmp0xff

@Dr-Irv Dr-Irv merged commit a22516c into pandas-dev:main Nov 7, 2025
16 checks passed
@cmp0xff cmp0xff deleted the feature/floordiv branch November 7, 2025 16:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Index Related to the Index class or subclasses Numeric Operations Arithmetic, Comparison, and Logical operations Series Series data structure

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants