Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60706,60708-60712,60714-60724 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r60701 | georg.brandl | 2008-02-09 22:36:15 +0100 (Sat, 09 Feb 2008) | 2 lines

  Needs only 2.4 now.
........
  r60702 | georg.brandl | 2008-02-09 22:38:54 +0100 (Sat, 09 Feb 2008) | 2 lines

  Docs are rst now.
........
  r60703 | georg.brandl | 2008-02-09 23:00:00 +0100 (Sat, 09 Feb 2008) | 2 lines

  Fix link.
........
  r60704 | georg.brandl | 2008-02-10 00:09:25 +0100 (Sun, 10 Feb 2008) | 2 lines

  Fix for newest doctools.
........
  r60709 | raymond.hettinger | 2008-02-10 08:21:09 +0100 (Sun, 10 Feb 2008) | 1 line

  Clarify that decimal also supports fixed-point arithmetic.
........
  r60710 | nick.coghlan | 2008-02-10 08:32:52 +0100 (Sun, 10 Feb 2008) | 1 line

  Add missing NEWS entry for r60695
........
  r60712 | mark.dickinson | 2008-02-10 15:58:38 +0100 (Sun, 10 Feb 2008) | 3 lines

  Turn classmethods into staticmethods, and avoid calling the constructor
  of subclasses of Rational.  (See discussion in issue #1682.)
........
  r60715 | mark.dickinson | 2008-02-10 16:19:58 +0100 (Sun, 10 Feb 2008) | 2 lines

  Typos in decimal comment and documentation
........
  r60716 | skip.montanaro | 2008-02-10 16:31:54 +0100 (Sun, 10 Feb 2008) | 2 lines

  Get the saying right. ;-)
........
  r60717 | skip.montanaro | 2008-02-10 16:32:16 +0100 (Sun, 10 Feb 2008) | 2 lines

  whoops - revert
........
  r60718 | mark.dickinson | 2008-02-10 20:23:36 +0100 (Sun, 10 Feb 2008) | 2 lines

  Remove reference to Rational
........
  r60719 | raymond.hettinger | 2008-02-10 21:35:16 +0100 (Sun, 10 Feb 2008) | 1 line

  Complete an open todo on pickletools -- add a pickle optimizer.
........
  r60721 | mark.dickinson | 2008-02-10 22:29:51 +0100 (Sun, 10 Feb 2008) | 3 lines

  Rename rational.Rational to fractions.Fraction, to avoid name clash
  with numbers.Rational.  See issue #1682 for related discussion.
........
  r60722 | christian.heimes | 2008-02-11 03:26:22 +0100 (Mon, 11 Feb 2008) | 1 line

  The test requires the network resource
........
  r60723 | mark.dickinson | 2008-02-11 04:11:55 +0100 (Mon, 11 Feb 2008) | 3 lines

  Put an extra space into the repr of a Fraction:
  Fraction(1, 2) instead of Fraction(1,2).
........
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index b17133a..f781db3 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -5,7 +5,7 @@
                               run_with_locale
 from operator import neg
 
-import sys, warnings, random, collections, io, rational
+import sys, warnings, random, collections, io, rational, fractions
 warnings.filterwarnings("ignore", "hex../oct.. of negative int",
                         FutureWarning, __name__)
 warnings.filterwarnings("ignore", "integer argument expected",
@@ -607,7 +607,7 @@
             n, d = f.as_integer_ratio()
             self.assertEqual(float(n).__truediv__(d), f)
 
-        R = rational.Rational
+        R = fractions.Fraction
         self.assertEqual(R(0, 1),
                          R(*float(0.0).as_integer_ratio()))
         self.assertEqual(R(5, 2),
diff --git a/Lib/test/test_rational.py b/Lib/test/test_fractions.py
similarity index 90%
rename from Lib/test/test_rational.py
rename to Lib/test/test_fractions.py
index 92d8a14..00fd549 100644
--- a/Lib/test/test_rational.py
+++ b/Lib/test/test_fractions.py
@@ -1,15 +1,15 @@
-"""Tests for Lib/rational.py."""
+"""Tests for Lib/fractions.py."""
 
 from decimal import Decimal
 from test.test_support import run_unittest, verbose
 import math
 import operator
-import rational
+import fractions
 import unittest
 from copy import copy, deepcopy
 from pickle import dumps, loads
-R = rational.Rational
-gcd = rational.gcd
+R = fractions.Fraction
+gcd = fractions.gcd
 
 
 class GcdTest(unittest.TestCase):
@@ -31,7 +31,7 @@
     return (r.numerator, r.denominator)
 
 
-class RationalTest(unittest.TestCase):
+class FractionTest(unittest.TestCase):
 
     def assertTypedEquals(self, expected, actual):
         """Asserts that both the types and values are the same."""
@@ -60,7 +60,7 @@
         self.assertEquals((7, 15), _components(R(7, 15)))
         self.assertEquals((10**23, 1), _components(R(10**23)))
 
-        self.assertRaisesMessage(ZeroDivisionError, "Rational(12, 0)",
+        self.assertRaisesMessage(ZeroDivisionError, "Fraction(12, 0)",
                                  R, 12, 0)
         self.assertRaises(TypeError, R, 1.5)
         self.assertRaises(TypeError, R, 1.5 + 3j)
@@ -81,41 +81,41 @@
         self.assertEquals((3, 5), _components(R(" .6 ")))
 
         self.assertRaisesMessage(
-            ZeroDivisionError, "Rational(3, 0)",
+            ZeroDivisionError, "Fraction(3, 0)",
             R, "3/0")
         self.assertRaisesMessage(
-            ValueError, "Invalid literal for Rational: 3/",
+            ValueError, "Invalid literal for Fraction: 3/",
             R, "3/")
         self.assertRaisesMessage(
-            ValueError, "Invalid literal for Rational: 3 /2",
+            ValueError, "Invalid literal for Fraction: 3 /2",
             R, "3 /2")
         self.assertRaisesMessage(
             # Denominators don't need a sign.
-            ValueError, "Invalid literal for Rational: 3/+2",
+            ValueError, "Invalid literal for Fraction: 3/+2",
             R, "3/+2")
         self.assertRaisesMessage(
             # Imitate float's parsing.
-            ValueError, "Invalid literal for Rational: + 3/2",
+            ValueError, "Invalid literal for Fraction: + 3/2",
             R, "+ 3/2")
         self.assertRaisesMessage(
             # Avoid treating '.' as a regex special character.
-            ValueError, "Invalid literal for Rational: 3a2",
+            ValueError, "Invalid literal for Fraction: 3a2",
             R, "3a2")
         self.assertRaisesMessage(
             # Only parse ordinary decimals, not scientific form.
-            ValueError, "Invalid literal for Rational: 3.2e4",
+            ValueError, "Invalid literal for Fraction: 3.2e4",
             R, "3.2e4")
         self.assertRaisesMessage(
             # Don't accept combinations of decimals and rationals.
-            ValueError, "Invalid literal for Rational: 3/7.2",
+            ValueError, "Invalid literal for Fraction: 3/7.2",
             R, "3/7.2")
         self.assertRaisesMessage(
             # Don't accept combinations of decimals and rationals.
-            ValueError, "Invalid literal for Rational: 3.2/7",
+            ValueError, "Invalid literal for Fraction: 3.2/7",
             R, "3.2/7")
         self.assertRaisesMessage(
             # Allow 3. and .3, but not .
-            ValueError, "Invalid literal for Rational: .",
+            ValueError, "Invalid literal for Fraction: .",
             R, ".")
 
     def testImmutable(self):
@@ -136,7 +136,7 @@
 
     def testFromFloat(self):
         self.assertRaisesMessage(
-            TypeError, "Rational.from_float() only takes floats, not 3 (int)",
+            TypeError, "Fraction.from_float() only takes floats, not 3 (int)",
             R.from_float, 3)
 
         self.assertEquals((0, 1), _components(R.from_float(-0.0)))
@@ -152,19 +152,19 @@
         inf = 1e1000
         nan = inf - inf
         self.assertRaisesMessage(
-            TypeError, "Cannot convert inf to Rational.",
+            TypeError, "Cannot convert inf to Fraction.",
             R.from_float, inf)
         self.assertRaisesMessage(
-            TypeError, "Cannot convert -inf to Rational.",
+            TypeError, "Cannot convert -inf to Fraction.",
             R.from_float, -inf)
         self.assertRaisesMessage(
-            TypeError, "Cannot convert nan to Rational.",
+            TypeError, "Cannot convert nan to Fraction.",
             R.from_float, nan)
 
     def testFromDecimal(self):
         self.assertRaisesMessage(
             TypeError,
-            "Rational.from_decimal() only takes Decimals, not 3 (int)",
+            "Fraction.from_decimal() only takes Decimals, not 3 (int)",
             R.from_decimal, 3)
         self.assertEquals(R(0), R.from_decimal(Decimal("-0")))
         self.assertEquals(R(5, 10), R.from_decimal(Decimal("0.5")))
@@ -174,16 +174,16 @@
                           R.from_decimal(Decimal("0." + "9" * 30)))
 
         self.assertRaisesMessage(
-            TypeError, "Cannot convert Infinity to Rational.",
+            TypeError, "Cannot convert Infinity to Fraction.",
             R.from_decimal, Decimal("inf"))
         self.assertRaisesMessage(
-            TypeError, "Cannot convert -Infinity to Rational.",
+            TypeError, "Cannot convert -Infinity to Fraction.",
             R.from_decimal, Decimal("-inf"))
         self.assertRaisesMessage(
-            TypeError, "Cannot convert NaN to Rational.",
+            TypeError, "Cannot convert NaN to Fraction.",
             R.from_decimal, Decimal("nan"))
         self.assertRaisesMessage(
-            TypeError, "Cannot convert sNaN to Rational.",
+            TypeError, "Cannot convert sNaN to Fraction.",
             R.from_decimal, Decimal("snan"))
 
     def testFromContinuedFraction(self):
@@ -316,7 +316,7 @@
         # Decimal refuses mixed comparisons.
         self.assertRaisesMessage(
             TypeError,
-            "unsupported operand type(s) for +: 'Rational' and 'Decimal'",
+            "unsupported operand type(s) for +: 'Fraction' and 'Decimal'",
             operator.add, R(3,11), Decimal('3.1415926'))
         self.assertNotEquals(R(5, 2), Decimal('2.5'))
 
@@ -378,7 +378,7 @@
         self.assertFalse(R(5, 2) == 2)
 
     def testStringification(self):
-        self.assertEquals("Rational(7,3)", repr(R(7, 3)))
+        self.assertEquals("Fraction(7,3)", repr(R(7, 3)))
         self.assertEquals("7/3", str(R(7, 3)))
         self.assertEquals("7", str(R(7, 1)))
 
@@ -421,7 +421,7 @@
         self.assertEqual(id(r), id(deepcopy(r)))
 
 def test_main():
-    run_unittest(RationalTest, GcdTest)
+    run_unittest(FractionTest, GcdTest)
 
 if __name__ == '__main__':
     test_main()