bpo-39350: Remove deprecated fractions.gcd() (GH-18021)

Remove fractions.gcd() function, deprecated since Python 3.5
(bpo-22486): use math.gcd() instead.
This commit is contained in:
Victor Stinner 2020-01-16 11:02:51 +01:00 committed by GitHub
parent 210c19e3c5
commit 4691a2f2a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 60 deletions

View File

@ -172,18 +172,6 @@ another rational number, or from a string.
method can also be accessed through the :func:`round` function.
.. function:: gcd(a, b)
Return the greatest common divisor of the integers *a* and *b*. If either
*a* or *b* is nonzero, then the absolute value of ``gcd(a, b)`` is the
largest integer that divides both *a* and *b*. ``gcd(a,b)`` has the same
sign as *b* if *b* is nonzero; otherwise it takes the sign of *a*. ``gcd(0,
0)`` returns ``0``.
.. deprecated:: 3.5
Use :func:`math.gcd` instead.
.. seealso::
Module :mod:`numbers`

View File

@ -416,6 +416,10 @@ Removed
:func:`base64.decodebytes` instead.
(Contributed by Victor Stinner in :issue:`39351`.)
* ``fractions.gcd()`` function has been removed, it was deprecated since Python
3.5 (:issue:`22486`): use :func:`math.gcd` instead.
(Contributed by Victor Stinner in :issue:`39350`.)
Porting to Python 3.9
=====================

View File

@ -10,31 +10,9 @@ import operator
import re
import sys
__all__ = ['Fraction', 'gcd']
__all__ = ['Fraction']
def gcd(a, b):
"""Calculate the Greatest Common Divisor of a and b.
Unless b==0, the result will have the same sign as b (so that when
b is divided by it, the result comes out positive).
"""
import warnings
warnings.warn('fractions.gcd() is deprecated. Use math.gcd() instead.',
DeprecationWarning, 2)
if type(a) is int is type(b):
if (b or a) < 0:
return -math.gcd(a, b)
return math.gcd(a, b)
return _gcd(a, b)
def _gcd(a, b):
# Supports non-integers for backward compatibility.
while b:
a, b = b, a%b
return a
# Constants related to the hash implementation; hash(x) is based
# on the reduction of x modulo the prime _PyHASH_MODULUS.
_PyHASH_MODULUS = sys.hash_info.modulus

View File

@ -12,7 +12,7 @@ import warnings
from copy import copy, deepcopy
from pickle import dumps, loads
F = fractions.Fraction
gcd = fractions.gcd
class DummyFloat(object):
"""Dummy float class for testing comparisons with Fractions"""
@ -81,30 +81,6 @@ class DummyRational(object):
class DummyFraction(fractions.Fraction):
"""Dummy Fraction subclass for copy and deepcopy testing."""
class GcdTest(unittest.TestCase):
def testMisc(self):
# fractions.gcd() is deprecated
with self.assertWarnsRegex(DeprecationWarning, r'fractions\.gcd'):
gcd(1, 1)
with warnings.catch_warnings():
warnings.filterwarnings('ignore', r'fractions\.gcd',
DeprecationWarning)
self.assertEqual(0, gcd(0, 0))
self.assertEqual(1, gcd(1, 0))
self.assertEqual(-1, gcd(-1, 0))
self.assertEqual(1, gcd(0, 1))
self.assertEqual(-1, gcd(0, -1))
self.assertEqual(1, gcd(7, 1))
self.assertEqual(-1, gcd(7, -1))
self.assertEqual(1, gcd(-23, 15))
self.assertEqual(12, gcd(120, 84))
self.assertEqual(-12, gcd(84, -120))
self.assertEqual(gcd(120.0, 84), 12.0)
self.assertEqual(gcd(120, 84.0), 12.0)
self.assertEqual(gcd(F(120), F(84)), F(12))
self.assertEqual(gcd(F(120, 77), F(84, 55)), F(12, 385))
def _components(r):
return (r.numerator, r.denominator)
@ -690,5 +666,6 @@ class FractionTest(unittest.TestCase):
r = F(13, 7)
self.assertRaises(AttributeError, setattr, r, 'a', 10)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,2 @@
Remove ``fractions.gcd()`` function, deprecated since Python 3.5
(:issue:`22486`): use :func:`math.gcd` instead.