Skip to content

Commit

Permalink
bpo-39350: Remove deprecated fractions.gcd() (pythonGH-18021)
Browse files Browse the repository at this point in the history
Remove fractions.gcd() function, deprecated since Python 3.5
(bpo-22486): use math.gcd() instead.
  • Loading branch information
vstinner authored and shihai1991 committed Jan 31, 2020
1 parent a96b12d commit 65014ea
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 60 deletions.
12 changes: 0 additions & 12 deletions Doc/library/fractions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand Down
4 changes: 4 additions & 0 deletions Doc/whatsnew/3.9.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
=====================
Expand Down
24 changes: 1 addition & 23 deletions Lib/fractions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,9 @@
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
Expand Down
27 changes: 2 additions & 25 deletions Lib/test/test_fractions.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
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"""
Expand Down Expand Up @@ -81,30 +81,6 @@ def __float__(self):
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)
Expand Down Expand Up @@ -690,5 +666,6 @@ def test_slots(self):
r = F(13, 7)
self.assertRaises(AttributeError, setattr, r, 'a', 10)


if __name__ == '__main__':
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Remove ``fractions.gcd()`` function, deprecated since Python 3.5
(:issue:`22486`): use :func:`math.gcd` instead.

0 comments on commit 65014ea

Please sign in to comment.