gh-100488: Add is_integer method to fractions.Fraction (#100489)

This commit is contained in:
Shantanu 2023-01-01 02:44:48 -06:00 committed by GitHub
parent 71159a8e07
commit e83f88a455
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 0 deletions

View file

@ -117,6 +117,12 @@ another rational number, or from a string.
.. versionadded:: 3.8
.. method:: is_integer()
Return ``True`` if the Fraction is an integer.
.. versionadded:: 3.12
.. classmethod:: from_float(flt)
Alternative constructor which only accepts instances of

View file

@ -225,6 +225,10 @@ class Fraction(numbers.Rational):
(cls.__name__, dec, type(dec).__name__))
return cls(*dec.as_integer_ratio())
def is_integer(self):
"""Return True if the Fraction is an integer."""
return self._denominator == 1
def as_integer_ratio(self):
"""Return the integer ratio as a tuple.

View file

@ -340,6 +340,19 @@ class FractionTest(unittest.TestCase):
ValueError, "cannot convert NaN to integer ratio",
F.from_decimal, Decimal("snan"))
def test_is_integer(self):
self.assertTrue(F(1, 1).is_integer())
self.assertTrue(F(-1, 1).is_integer())
self.assertTrue(F(1, -1).is_integer())
self.assertTrue(F(2, 2).is_integer())
self.assertTrue(F(-2, 2).is_integer())
self.assertTrue(F(2, -2).is_integer())
self.assertFalse(F(1, 2).is_integer())
self.assertFalse(F(-1, 2).is_integer())
self.assertFalse(F(1, -2).is_integer())
self.assertFalse(F(-1, -2).is_integer())
def test_as_integer_ratio(self):
self.assertEqual(F(4, 6).as_integer_ratio(), (2, 3))
self.assertEqual(F(-4, 6).as_integer_ratio(), (-2, 3))

View file

@ -0,0 +1 @@
Add :meth:`Fraction.is_integer` to check whether a :class:`fractions.Fraction` is an integer. This improves duck type compatibility with :class:`float` and :class:`int`.