-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
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
Make PyComplex_AsCComplex use __complex__ #44670
Comments
The functions in the math module have the (pleasantly) surprising and >>> class test1(object):
... def __float__(self):
... return 3.
...
>>> from math import sqrt
>>> sqrt(test1())
1.7320508075688772 Based on this, one might expect the functions in the complex math module cmath to have the same property with respect to __complex__. >>> class test2(object):
... def __complex__(self):
... return -3 + 0j
...
>>> from cmath import sqrt as csqrt
>>> csqrt(test2())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a float is required The real surprise is that the cmath functions *will* call the __float__ method, if it's available: >>> csqrt(test1())
(1.7320508075688772+0j) This patch expands the PyComplex_AsCComplex method so that it looks for a __complex__ method before looking for the __float__ method. This `fixes' the above behaviour. Should it be a documented feature that the math functions will make use of __float__? If so, and if the patched behaviour seems desirable, I'll add suitable tests to test_math and test_cmath. |
I think it is the right thing to do. Test cases would be welcome. |
Please include both old-style and new-style classes in the test case, and for each one test if the check for a complex return from __complex__ works. |
File Added: complex_patch.patch |
OK, thank you! Committed the patch, new tests and docs in rev. 54421. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: