classification
Title: decimal.py: infinity coefficients in tuples
Type: behavior Stage:
Components: Library (Lib) Versions: Python 3.2, Python 2.7
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: mark.dickinson Nosy List: mark.dickinson, rhettinger, skrah
Priority: normal Keywords:

Created on 2010-01-12 20:18 by skrah, last changed 2010-01-29 19:45 by rhettinger. This issue is now closed.

Messages (3)
msg97656 - (view) Author: Stefan Krah (skrah) * (Python committer) Date: 2010-01-12 20:18
It should not be possible to pass coefficients when constructing infinities from tuples. Otherwise it looks like infinities can have payloads (which they can't).

Example:

>>> import decimal, cdecimal
>>> d = decimal.Decimal((0, (4, 5, 3, 4), 'F'))
>>> d
Decimal('Infinity')

>>> d = cdecimal.Decimal((0, (4, 5, 3, 4), 'F'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cdecimal.InvalidOperation: [<class 'cdecimal.ConversionSyntax'>]


Also, the non-coefficient of infinities should preferably be represented as an empty tuple:

>>> decimal.Decimal("Infinity").as_tuple()
DecimalTuple(sign=0, digits=(0,), exponent='F')
>>> cdecimal.Decimal("Infinity").as_tuple()
(0, (), 'F')
msg98531 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010-01-29 19:30
Issue 1: (passing coefficients to decimal constructor):  While I agree that passing a coefficient for an infinity doesn't make a lot of sense, there's a backwards compatibility problem here: it worked in 3.1, so making it raise an exception in 3.2 might break code.  However, it seems unlikely that there's any correct code out there that's passing a coefficient other than (0,) or () for an infinity, so I'd be prepared to make this an error for coefficients other than () and (0,).

Issue 2: (inf.as_tuple() returns () instead of (0,) for coefficient).  On balance I'd prefer to leave this as it is.  It's a minor inconsistency, but I don't think it really does any harm.  Unless there's a real bug, making a minor change like this to an established API seems more likely to do harm than good.  (It could break docstrings in third-party packages, for example.)
msg98533 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2010-01-29 19:45
I also prefer to leave as-is.  It's harmless.
History
Date User Action Args
2010-01-29 19:45:28rhettingersetstatus: open -> closed
resolution: wont fix
messages: + msg98533
2010-01-29 19:30:58mark.dickinsonsetnosy: + rhettinger

messages: + msg98531
versions: + Python 2.7
2010-01-12 20:49:07mark.dickinsonsetassignee: mark.dickinson
2010-01-12 20:18:35skrahcreate