-
Notifications
You must be signed in to change notification settings - Fork 50
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
feat: add scalar support to where
#860
Conversation
The rule for scalars should match https://data-apis.org/array-api/latest/API_specification/type_promotion.html#mixing-arrays-with-python-scalars. We should generalize that section to functions, so that we can refer to it in all the function definitions. |
In other words, I think trying to word different conditions for each argument based on whether each other argument is an array or scalar is too wordy and confusing. The rule should be that scalar arguments are implicitly converted into arrays (by the rules stated in the updated version of that particular section). Then we can just talk about each argument as if it were an array. We also need to state that the behavior is undefined when all arguments are scalars. The question is really how much of that needs to be repeated in each function and how much of it we can just write once in some section and refer back to (this is not a straightforward question IMO; a lot of things in the standard are repeated for each function, since that makes it easier to read). |
I've opened a related PR for element-wise functions: #862 |
I agree. I like your suggestion of referring to a central explanation. In particular because I think that most people's intuition about how this will work is 95% correct and for the other 5% you need a lot of words to really explain it. In the case of Maybe the way to do this is a "Notes" section in the doc string that says something like "For the rules on how to handle scalar arguments see link_to_central_place." That central place could be https://data-apis.org/array-api/latest/API_specification/type_promotion.html#mixing-arrays-with-python-scalars, maybe it needs a bit of generalising to remove/rewrite the |
where
I made a few suggestions. Namely,
|
where
where
We discussed these points in the community meeting yesterday, and agreed on the following:
|
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.
LGTM.
""" | ||
Returns elements chosen from ``x1`` or ``x2`` depending on ``condition``. | ||
|
||
Parameters | ||
---------- | ||
condition: array | ||
when ``True``, yield ``x1_i``; otherwise, yield ``x2_i``. Should have a boolean data type. Must be compatible with ``x1`` and ``x2`` (see :ref:`broadcasting`). | ||
x1: array | ||
x1: Union[array, int, float, complex, bool] | ||
first input array. Must be compatible with ``condition`` and ``x2`` (see :ref:`broadcasting`). |
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.
array or scalar
?
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.
We are consistent throughout the spec, atm, in describing input array arguments as arrays. Did not see a reason to deviate here.
Towards #807
This adds wording to the doc string and function signature to allow scalars in addition to arrays for the second and third argument.
Not super happy with the phrasing for the description of
condition
, maybe someone else has a suggestion for how to explain it without using a lot of words. We can then hopefully reuse that in the description ofout
.There are a lot more functions that need updating (#807 (comment)). I think it make sense to get this one done, and then copy&paste for the others (instead of having a giant diff while discussing things).
There is data-apis/array-api-strict#78 which implements this in array-api-strict.