Skip to content

Conversation

@jl-wynen
Copy link
Member

Fixes #3683

This is a bit odd because of how we implement __getitem__. Normally, the arguments for a slice in __getitem__ must satisfy SupportsIndex, meaning that they must have an __index__ method that returns int. Unlike __int__, __index__ is not supposed to convert floats to ints. E.g., float.__index__ does not exist and np.ndarray.__index__ raises an error if the dtype is not an integer.

This PR implements Variable.__index__ similarly and rejects non-integer inputs. However, at runtime, we do allow floating point variables as indices in label-based indexing. (See the new test_can_use_variable_as_index.) Fortunately, our code does not actually call Variable.__index__ when constructing slices. So everything continues to work as before. But this leads to a disconnect. I think this is the best solution possible because our non-standard use of __getitem__ will always lead to conflicts.

@MridulS MridulS requested a review from Copilot April 24, 2025 07:46
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR introduces Variable.index to enable type‐checked integer conversions, while updating related helper functions and tests to enforce stricter conditions on variables.

  • Added new tests in variable_scalar_test.py and variable_creation_test.py to cover correct and incorrect use cases of index.
  • Updated type constraints and helper functions in _binding.py and cpp_classes.pyi to support and bind the new index method.

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
tests/variable_scalar_test.py Added tests to verify proper behavior of Variable.index.
tests/variable_creation_test.py Updated tests to ensure variables used as indices are validated.
src/scipp/core/cpp_classes.pyi Added index method declaration to the Variable class.
src/scipp/_binding.py Introduced _index_dunder and updated conversion helper functions to bind index.

@jl-wynen jl-wynen merged commit 30ce0f3 into main Apr 24, 2025
4 checks passed
@jl-wynen jl-wynen deleted the variable-supports-index branch April 24, 2025 11:00
@github-project-automation github-project-automation bot moved this from Selected to Done in Development Board Apr 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

MyPy does not like slices of Variables

3 participants