Skip to content

Commit 7e0141e

Browse files
[3.12] gh-71966: Move the module docstring from _pydecimal to decimal (GH-117919) (GH-117962)
Now it is set even if the C implementation is used. Also add a one-line synopsis. (cherry picked from commit c69968f)
1 parent c34c962 commit 7e0141e

File tree

2 files changed

+100
-100
lines changed

2 files changed

+100
-100
lines changed

Lib/_pydecimal.py

Lines changed: 1 addition & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -13,104 +13,7 @@
1313
# bug) and will be backported. At this point the spec is stabilizing
1414
# and the updates are becoming fewer, smaller, and less significant.
1515

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

11518
__all__ = [
11619
# Two major classes

Lib/decimal.py

Lines changed: 99 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,108 @@
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:
8106
from _pydecimal import *
9-
from _pydecimal import __doc__
10107
from _pydecimal import __version__
11108
from _pydecimal import __libmpdec_version__

0 commit comments

Comments
 (0)