Skip to content

Commit ae03bac

Browse files
authored
Update {_py,}decimal.py from 3.13.5 (#6034)
1 parent fb91477 commit ae03bac

14 files changed

+315
-225
lines changed

Lib/_pydecimal.py

Lines changed: 73 additions & 188 deletions
Large diffs are not rendered by default.

Lib/decimal.py

Lines changed: 103 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,109 @@
1+
"""Decimal fixed-point and floating-point arithmetic.
2+
3+
This is an implementation of decimal floating-point arithmetic based on
4+
the General Decimal Arithmetic Specification:
5+
6+
http://speleotrove.com/decimal/decarith.html
7+
8+
and IEEE standard 854-1987:
9+
10+
http://en.wikipedia.org/wiki/IEEE_854-1987
11+
12+
Decimal floating point has finite precision with arbitrarily large bounds.
13+
14+
The purpose of this module is to support arithmetic using familiar
15+
"schoolhouse" rules and to avoid some of the tricky representation
16+
issues associated with binary floating point. The package is especially
17+
useful for financial applications or for contexts where users have
18+
expectations that are at odds with binary floating point (for instance,
19+
in binary floating point, 1.00 % 0.1 gives 0.09999999999999995 instead
20+
of 0.0; Decimal('1.00') % Decimal('0.1') returns the expected
21+
Decimal('0.00')).
22+
23+
Here are some examples of using the decimal module:
24+
25+
>>> from decimal import *
26+
>>> setcontext(ExtendedContext)
27+
>>> Decimal(0)
28+
Decimal('0')
29+
>>> Decimal('1')
30+
Decimal('1')
31+
>>> Decimal('-.0123')
32+
Decimal('-0.0123')
33+
>>> Decimal(123456)
34+
Decimal('123456')
35+
>>> Decimal('123.45e12345678')
36+
Decimal('1.2345E+12345680')
37+
>>> Decimal('1.33') + Decimal('1.27')
38+
Decimal('2.60')
39+
>>> Decimal('12.34') + Decimal('3.87') - Decimal('18.41')
40+
Decimal('-2.20')
41+
>>> dig = Decimal(1)
42+
>>> print(dig / Decimal(3))
43+
0.333333333
44+
>>> getcontext().prec = 18
45+
>>> print(dig / Decimal(3))
46+
0.333333333333333333
47+
>>> print(dig.sqrt())
48+
1
49+
>>> print(Decimal(3).sqrt())
50+
1.73205080756887729
51+
>>> print(Decimal(3) ** 123)
52+
4.85192780976896427E+58
53+
>>> inf = Decimal(1) / Decimal(0)
54+
>>> print(inf)
55+
Infinity
56+
>>> neginf = Decimal(-1) / Decimal(0)
57+
>>> print(neginf)
58+
-Infinity
59+
>>> print(neginf + inf)
60+
NaN
61+
>>> print(neginf * inf)
62+
-Infinity
63+
>>> print(dig / 0)
64+
Infinity
65+
>>> getcontext().traps[DivisionByZero] = 1
66+
>>> print(dig / 0)
67+
Traceback (most recent call last):
68+
...
69+
...
70+
...
71+
decimal.DivisionByZero: x / 0
72+
>>> c = Context()
73+
>>> c.traps[InvalidOperation] = 0
74+
>>> print(c.flags[InvalidOperation])
75+
0
76+
>>> c.divide(Decimal(0), Decimal(0))
77+
Decimal('NaN')
78+
>>> c.traps[InvalidOperation] = 1
79+
>>> print(c.flags[InvalidOperation])
80+
1
81+
>>> c.flags[InvalidOperation] = 0
82+
>>> print(c.flags[InvalidOperation])
83+
0
84+
>>> print(c.divide(Decimal(0), Decimal(0)))
85+
Traceback (most recent call last):
86+
...
87+
...
88+
...
89+
decimal.InvalidOperation: 0 / 0
90+
>>> print(c.flags[InvalidOperation])
91+
1
92+
>>> c.flags[InvalidOperation] = 0
93+
>>> c.traps[InvalidOperation] = 0
94+
>>> print(c.divide(Decimal(0), Decimal(0)))
95+
NaN
96+
>>> print(c.flags[InvalidOperation])
97+
1
98+
>>>
99+
"""
1100

2101
try:
3102
from _decimal import *
4-
from _decimal import __doc__
5103
from _decimal import __version__
6104
from _decimal import __libmpdec_version__
7105
except ImportError:
8-
from _pydecimal import *
9-
from _pydecimal import __doc__
10-
from _pydecimal import __version__
11-
from _pydecimal import __libmpdec_version__
106+
import _pydecimal
107+
import sys
108+
_pydecimal.__doc__ = __doc__
109+
sys.modules[__name__] = _pydecimal

Lib/test/decimaltestdata/abs.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
version: 2.59
2121

2222
-- This set of tests primarily tests the existence of the operator.
23-
-- Additon, subtraction, rounding, and more overflows are tested
23+
-- Addition, subtraction, rounding, and more overflows are tested
2424
-- elsewhere.
2525

2626
precision: 9

Lib/test/decimaltestdata/ddFMA.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1663,7 +1663,7 @@ ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexac
16631663
ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded
16641664
ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded
16651665

1666-
-- desctructive subtraction (from remainder tests)
1666+
-- destructive subtraction (from remainder tests)
16671667

16681668
-- +++ some of these will be off-by-one remainder vs remainderNear
16691669

Lib/test/decimaltestdata/ddQuantize.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ ddqua520 quantize 1.234 1e359 -> 0E+359 Inexact Rounded
462462
ddqua521 quantize 123.456 1e359 -> 0E+359 Inexact Rounded
463463
ddqua522 quantize 1.234 1e359 -> 0E+359 Inexact Rounded
464464
ddqua523 quantize 123.456 1e359 -> 0E+359 Inexact Rounded
465-
-- next four are "won't fit" overfl
465+
-- next four are "won't fit" overflow
466466
ddqua526 quantize 1.234 1e-299 -> NaN Invalid_operation
467467
ddqua527 quantize 123.456 1e-299 -> NaN Invalid_operation
468468
ddqua528 quantize 1.234 1e-299 -> NaN Invalid_operation

Lib/test/decimaltestdata/ddRemainder.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ ddrem757 remainder 1 sNaN -> NaN Invalid_operation
422422
ddrem758 remainder 1000 sNaN -> NaN Invalid_operation
423423
ddrem759 remainder Inf -sNaN -> -NaN Invalid_operation
424424

425-
-- propaging NaNs
425+
-- propagating NaNs
426426
ddrem760 remainder NaN1 NaN7 -> NaN1
427427
ddrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation
428428
ddrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation

Lib/test/decimaltestdata/ddRemainderNear.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ ddrmn757 remaindernear 1 sNaN -> NaN Invalid_operation
450450
ddrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation
451451
ddrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation
452452

453-
-- propaging NaNs
453+
-- propagating NaNs
454454
ddrmn760 remaindernear NaN1 NaN7 -> NaN1
455455
ddrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation
456456
ddrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation

Lib/test/decimaltestdata/dqRemainder.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ dqrem757 remainder 1 sNaN -> NaN Invalid_operation
418418
dqrem758 remainder 1000 sNaN -> NaN Invalid_operation
419419
dqrem759 remainder Inf -sNaN -> -NaN Invalid_operation
420420

421-
-- propaging NaNs
421+
-- propagating NaNs
422422
dqrem760 remainder NaN1 NaN7 -> NaN1
423423
dqrem761 remainder sNaN2 NaN8 -> NaN2 Invalid_operation
424424
dqrem762 remainder NaN3 sNaN9 -> NaN9 Invalid_operation

Lib/test/decimaltestdata/dqRemainderNear.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ dqrmn757 remaindernear 1 sNaN -> NaN Invalid_operation
450450
dqrmn758 remaindernear 1000 sNaN -> NaN Invalid_operation
451451
dqrmn759 remaindernear Inf -sNaN -> -NaN Invalid_operation
452452

453-
-- propaging NaNs
453+
-- propagating NaNs
454454
dqrmn760 remaindernear NaN1 NaN7 -> NaN1
455455
dqrmn761 remaindernear sNaN2 NaN8 -> NaN2 Invalid_operation
456456
dqrmn762 remaindernear NaN3 sNaN9 -> NaN9 Invalid_operation

Lib/test/decimaltestdata/exp.decTest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ rounding: half_even
2828
maxExponent: 384
2929
minexponent: -383
3030

31-
-- basics (examples in specificiation, etc.)
31+
-- basics (examples in specification, etc.)
3232
expx001 exp -Infinity -> 0
3333
expx002 exp -10 -> 0.0000453999298 Inexact Rounded
3434
expx003 exp -1 -> 0.367879441 Inexact Rounded

0 commit comments

Comments
 (0)