-
-
Couldn't load subscription status.
- Fork 19.2k
CLN: Add allow_slice to is_hashable function #62567
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
base: main
Are you sure you want to change the base?
Conversation
| Are there non-test places where this is needed? |
not so far. Because in your PR(#53743 (comment)) you added the checks along with the call to is_hashable(). I added this 'allow_slice' argument based on Richard's suggestion (#55152 (comment)) Let me make some changes to some of the callers and set 'allow_slice' to be False. |
pandas/io/excel/_xlsxwriter.py Outdated
| ) | ||
| | ||
| try: | ||
| self._book = Workbook(self._handles.handle, **engine_kwargs) # type: ignore[arg-type] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mypy failed on this comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jbrockmendel I made changes based on your feedback. Please review.
pandas/core/dtypes/inference.py Outdated
| If `allow_slice` is False, objects that are slices or tuples containing slices | ||
| will always return False, even if hash(obj) would succeed. | ||
| If `allow_slice` is True or None, slices and tuples containing slices are treated as |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is None needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
None is a default value. So for exsiting callers, I don't need to set allow_slice. Unless you want me to change all the callers of is_hahsable and set the allow_slice to be True (if they don't have extra checks for slice). Please let me know.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just set the default to True.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, set the default to be True now.
| If `allow_slice` is False, objects that are slices or tuples containing slices | ||
| will always return False, even if hash(obj) would succeed. | ||
| If `allow_slice` is True, slices and tuples containing slices are treated as | ||
| hashable if hash(obj) does not raise TypeError. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think this extra comment is unnecessary given the description in the parameters section
| # This should never be reached, but let's be explicit about it | ||
| raise ValueError("Too many indices") # pragma: no cover | ||
| if all( | ||
| (is_hashable(x) and not _contains_slice(x)) or com.is_null_slice(x) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think this is the only usage of _contains_slice, so that can be removed?
| | ||
| if is_scalar(key) or ( | ||
| isinstance(labels, MultiIndex) and is_hashable(key) and not contains_slice | ||
| isinstance(labels, MultiIndex) and is_hashable(key, allow_slice=False) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i think this changes logic slightly by disallowing slice keys whereas the old code just disallowed tuples-containing-slice?
| def __hash__(self): | ||
| raise TypeError("Not hashable") | ||
| | ||
| class HashableSlice: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
comment that we can get rid of that once we drop py311?
Changes for #55152
doc/source/whatsnew/vX.X.X.rstfile if fixing a bug or adding a new feature.