Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@Antriksh006
Copy link
Contributor

@Antriksh006 Antriksh006 commented Dec 22, 2025

Copy link
Member

@rhshadrach rhshadrach left a comment

Choose a reason for hiding this comment

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

Thanks for the PR. Please always add tests.

@Antriksh006
Copy link
Contributor Author

Hi @rhshadrach , just wanted to confirm what do you mean by add tests. If by that you meant adding more tests for the pytest to check, then i just did that and made a new pr, whose checks are currently running

@Antriksh006
Copy link
Contributor Author

Hi @rhshadrach, waiting for a review from your side

Copy link
Member

@rhshadrach rhshadrach left a comment

Choose a reason for hiding this comment

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

Thanks for the PR!

Comment on lines +257 to +262
try:
other_values = other._values
if hasattr(other_values, "as_unit") and hasattr(
self._values, "equals"
):
return self._values.equals(other_values.as_unit(self_unit))
Copy link
Member

Choose a reason for hiding this comment

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

In what cases does this raise?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

an example could be if we put two date_ranges to equal(), one with frequency "D" and other being "M", then if this scenario is hit, we safely get False as answer rather then raising a ValueError, due to frequency mismatch.

basically first check if other_values has units we must compare, second check if self can have these compared to it, then simply check and return if they are equal or not

Copy link
Member

Choose a reason for hiding this comment

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

That makes sense, but why is this code itself in a try-except? This is why I am asking in what case does this code itself raise.

Copy link
Contributor Author

@Antriksh006 Antriksh006 Dec 28, 2025

Choose a reason for hiding this comment

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

during my testing i saw some scenarios where i see the as_unit(self_unit) raising OutOfBoundsDatetime error, so i just put that in a try except to catch error in the return statement, i might as well implement it through a if check if you prefer that.

I am new to pandas contribution, so i didnt know we dont like try-excepts here. You can let me know if i should remove it and i will commit that to this pr.

This is a solution i have came up with, it passes the tests on my system locally. should i push this instead?

        if self_unit is not None and other_unit is not None and self_unit != other_unit:
            if getattr(self.dtype, "tz", None) == getattr(other.dtype, "tz", None):
                other_values = other._values

                if hasattr(other_values, "as_unit") and hasattr(self._values, "equals"):
                    return self._values.equals(other_values.as_unit(self_unit))

result = idx1.intersection(idx2)
expected = date_range("2000-01-01", periods=3, tz=tz).as_unit("ns")
tm.assert_index_equal(result, expected)
tm.assert_index_equal(result, expected, exact=False)
Copy link
Member

Choose a reason for hiding this comment

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

Why does this need to change?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It relaxes the dtype strictness. In the context of datetimes, it stops caring whether the storage is in nanoseconds or microseconds, as long as the dates themselves represent the same point in history.

Copy link
Member

Choose a reason for hiding this comment

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

Prior to this PR the result and expected were considered equal with exact=True; and even though result and expected here are not changing, they no longer are considered equal with exact=True?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The test used to pass because the code was implicitly forcing everything into one format (nanoseconds). Now that the code correctly preserves the original units, the test fails because it expects a specific format that no longer matches the output. I changed the test to exact=False so it focuses on whether the dates are correct, rather than worrying about the storage format.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

API: comparing time series with index of different unit should work

2 participants