We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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?
to your account
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
assignee = 'https://github.com/birkenfeld'
closed_at = <Date 2007-03-17.16:09:34.000>
created_at = <Date 2007-03-07.03:03:07.000>
labels = ['interpreter-core']
title = 'Make PyComplex_AsCComplex use __complex__'
updated_at = <Date 2007-03-17.16:09:34.000>
user = 'https://github.com/mdickinson'
activity = <Date 2007-03-17.16:09:34.000>
actor = 'georg.brandl'
assignee = 'georg.brandl'
closed = True
closed_date = None
closer = None
components = ['Interpreter Core']
creation = <Date 2007-03-07.03:03:07.000>
creator = 'mark.dickinson'
dependencies = 
files = ['7829', '7830']
hgrepos = 
issue_num = 1675423
keywords = ['patch']
message_count = 5.0
messages = ['52070', '52071', '52072', '52073', '52074']
nosy_count = 2.0
nosy_names = ['georg.brandl', 'mark.dickinson']
pr_nums = 
priority = 'normal'
resolution = 'accepted'
stage = None
status = 'closed'
superseder = None
type = None
url = 'https://bugs.python.org/issue1675423'
versions = ['Python 2.6']
The text was updated successfully, but these errors were encountered:
The functions in the math module have the (pleasantly) surprising and
apparently undocumented property that they'll accept not just floats, but any Python object having a float method:
>>> class test1(object):
... def __float__(self):
... return 3.
>>> from math import sqrt
Based on this, one might expect the functions in the complex math module cmath to have the same property with respect to __complex__.
But this isn't so:
>>> class test2(object):
... def __complex__(self):
... return -3 + 0j
>>> from cmath import sqrt as csqrt
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:
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.
Sorry, something went wrong.
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.
No branches or pull requests