Skip to content
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

Only require axis to be negative in vecdot and cross #740

Merged
merged 1 commit into from
Feb 13, 2024

Conversation

asmeurer
Copy link
Member

@asmeurer asmeurer commented Feb 2, 2024

Nonnegative axes and negative axes less than the smaller of the two arrays are unspecified.

This is because it is ambiguous in these cases whether the dimension should refer to the axis before or after broadcasting. Previously, the spec stated it should refer to the dimension before broadcasting, but this deviates from NumPy gufunc behavior, and results in ambiguous and confusing situations, where, for instance, the result of a the function is different when the inputs are manually broadcasted together.

Also clean up some of the cross text a little bit since the computed dimension must be exactly size 3.

Fixes #724
Fixes #617

See the discussion in those issues for more details.

I don't think this should be backported, since my vecdot implementation in np.array_api and array-api-compat already followed the spec behavior here, and will need to be updated.

Nonnegative axes and negative axes less than the smaller of the two arrays are
unspecified.

This is because it is ambiguous in these cases whether the
dimension should refer to the axis before or after broadcasting. Preciously,
the spec stated it should refer to the dimension before broadcasting, but this
deviates from NumPy gufunc behavior, and results in ambiguous and confusing
situations, where, for instance, the result of a the function is different
when the inputs are manually broadcasted together.

Also clean up some of the cross text a little bit since the computed dimension
must be exactly size 3.

Fixes data-apis#724
Fixes data-apis#617

See the discussion in those issues for more details.
asmeurer added a commit to asmeurer/array-api-tests that referenced this pull request Feb 3, 2024
asmeurer added a commit to asmeurer/array-api-tests that referenced this pull request Feb 3, 2024
This also updates it to only test axes from [min(x1.ndim, x2.ndim), -1], as
per data-apis/array-api#740
@asmeurer
Copy link
Member Author

asmeurer commented Feb 5, 2024

We could also allow nonnegative axis when the two input arrays have the same number of dimensions. In that case, there is no ambiguity for something like axix=0 because it would refer to the same dimensions both before and after broadcasting.

@leofang
Copy link
Contributor

leofang commented Feb 12, 2024

@kgryte could you remind me if this will be part of v2023?

@kgryte kgryte added this to the v2023 milestone Feb 13, 2024
@kgryte kgryte added the topic: Linear Algebra Linear algebra. label Feb 13, 2024
Copy link
Contributor

@kgryte kgryte left a comment

Choose a reason for hiding this comment

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

This LGTM and is aligned with the discussion in the workgroup meeting on February 8, 2024. Thanks, @asmeurer!

@kgryte kgryte merged commit 1745c88 into data-apis:main Feb 13, 2024
3 checks passed
cr313 added a commit to cr313/test-array-api that referenced this pull request Apr 19, 2024
cr313 added a commit to cr313/test-array-api that referenced this pull request Apr 19, 2024
This also updates it to only test axes from [min(x1.ndim, x2.ndim), -1], as
per data-apis/array-api#740
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic: Linear Algebra Linear algebra.
Projects
None yet
3 participants