Implicit float conversion in function calls#1908
Conversation
|
Implicit casts to float were disabled intentionally. For instance, |
Sorry, something went wrong.
|
The (expected) order here is:
This should lead to a sensible overload resolution. |
Sorry, something went wrong.
This can never happen with a custom Python type. Also, we do not really perform overload resolution prioritization like that. E.g. the |
Sorry, something went wrong.
0230e58 to
159e0dd
Compare
September 14, 2022 08:41
|
Can you please provide a test-case that you expect to fail with this PR? I'm fine with working on the overload resolution, but I think making |
Sorry, something went wrong.
|
I described the test case above.
See it pick the overload based on the weather. This is because we actually do not perform any overload resolution, but this behavior prevents user from forcing exact type match with codecs when the type on Python side has If somebody wants this behavior, they can register a codec for types implementing What we might want is for |
Sorry, something went wrong.
882ccb6 to
c4325dd
Compare
September 19, 2022 12:34
|
@filmor I think we still should not just enable |
Sorry, something went wrong.
|
That effectively boils down to just using the "real" |
Sorry, something went wrong.
|
Just to recap: This will now check before attempting a conversion whether the object identifies as a |
Sorry, something went wrong.
0b05129 to
8799f82
Compare
September 19, 2022 16:04
|
@lostmsu If this is mergeable for you, I think that would solve the reported issue sufficiently that we can continue with the releases without having to touch method resolution right now (which I also really don't want to). PyTorch's |
Sorry, something went wrong.
|
My problem with this approach is that it does not allow us to do: string Foo(float x) => "float32";
string Foo(double x) => "float64";Foo(numpy.float32(42.0)) |
Sorry, something went wrong.
It does, you just need to be explicit. But I get your point, I just think that the reasonable default is more important than optimising this overload. We can document this particular issue. |
Sorry, something went wrong.
|
Thanks guys! |
Sorry, something went wrong.
|
I think we can do better than document, and actually special case ctypes, NumPy, PyTorch, and TensorFlow types that have exact precision. Preferably also leave a room for users to special case other precise types. It is not that hard, and if we don't do it now we'd have to wait until 4.0 to make another breaking change. |
Sorry, something went wrong.
|
I'm strongly against special-casing particular library types. If you want to allow proper |
Sorry, something went wrong.
8799f82 to
2194d6c
Compare
September 19, 2022 21:50
|
That's exactly what I want to do in a week or two. |
Sorry, something went wrong.
I'll merge this in the meantime. Feel free to revert or adjust the behaviour when you are attempting your refactoring. In this state, I'd be fine to publish it. |
Sorry, something went wrong.
What does this implement/fix? Explain your changes.
Uses
__float__when available if a Python object is passed to a function with aDoubleorSingleparameter.Does this close any currently open issues?
#1833
Any other comments?
This is not yet supported for integer types, which would use
__int__or
__index__(for Python >=3.10), as the respective logic is for somereason only implemented for
AsLongLongandAsLong, not for theunsigned counterparts and also not for the
AsSize_tvariants that weare using.
Checklist
Check all those that are applicable and complete.
AUTHORSCHANGELOG