Skip to content

Commit

Permalink
gh-100488: Add is_integer method to fractions.Fraction (#100489)
Browse files Browse the repository at this point in the history
  • Loading branch information
hauntsaninja authored Jan 1, 2023
1 parent 71159a8 commit e83f88a
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 0 deletions.
6 changes: 6 additions & 0 deletions Doc/library/fractions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions Lib/fractions.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,10 @@ def from_decimal(cls, dec):
(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.
Expand Down
13 changes: 13 additions & 0 deletions Lib/test/test_fractions.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,19 @@ def testFromDecimal(self):
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))
Expand Down
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit e83f88a

Please sign in to comment.