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`
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
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"""
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)
r = F(13, 7)
self.assertRaises(AttributeError, setattr, r, 'a', 10)
+
if __name__ == '__main__':
unittest.main()