Issue #25523: Correct "a" article to "an" article

This changes the main documentation, doc strings, source code comments, and a
couple error messages in the test suite. In some cases the word was removed
or edited some other way to fix the grammar.
diff --git a/Lib/test/decimaltestdata/fma.decTest b/Lib/test/decimaltestdata/fma.decTest
index b0a81ca..0b188fa 100644
--- a/Lib/test/decimaltestdata/fma.decTest
+++ b/Lib/test/decimaltestdata/fma.decTest
@@ -148,7 +148,7 @@
 fmax2019 fma -9.999999  9.999999  0E+999999  -> -100.000 Inexact Rounded

 fmax2020 fma -9.999999 -9.999999  0E+999999  ->  100.000 Inexact Rounded

 

--- 1999.12.21: next one is a edge case if intermediate longs are used

+-- 1999.12.21: next one is an edge case if intermediate longs are used

 precision: 15

 fmax2059 fma 999999999999 9765625  0E+999999  -> 9.76562499999023E+18 Inexact Rounded

 precision: 30

diff --git a/Lib/test/decimaltestdata/multiply.decTest b/Lib/test/decimaltestdata/multiply.decTest
index 6a23d5a..e8bd77a 100644
--- a/Lib/test/decimaltestdata/multiply.decTest
+++ b/Lib/test/decimaltestdata/multiply.decTest
@@ -49,7 +49,7 @@
 mulx019 multiply -9.999999999  9.999999999 -> -100.000 Inexact Rounded
 mulx020 multiply -9.999999999 -9.999999999 ->  100.000 Inexact Rounded
 
--- 1999.12.21: next one is a edge case if intermediate longs are used
+-- 1999.12.21: next one is an edge case if intermediate longs are used
 precision: 15
 mulx059 multiply 999999999999 9765625 -> 9.76562499999023E+18 Inexact Rounded
 precision: 30
diff --git a/Lib/test/pystone.py b/Lib/test/pystone.py
index a41f1e5..59dd99b 100755
--- a/Lib/test/pystone.py
+++ b/Lib/test/pystone.py
@@ -35,7 +35,7 @@
                 Under Python 3 version 1.1 would use the normal division
                 operator, resulting in some of the operations mistakenly
                 yielding floats. Version 1.2 instead uses floor division
-                making the benchmark a integer benchmark again.
+                making the benchmark an integer benchmark again.
 
 """
 
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 01ca2f8..cdf86e7 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -309,7 +309,7 @@
         # The exponential backoff of the timeout amounts to a total
         # of ~1 second after which the deletion is probably an error
         # anyway.
-        # Testing on a i7@4.3GHz shows that usually only 1 iteration is
+        # Testing on an i7@4.3GHz shows that usually only 1 iteration is
         # required when contention occurs.
         timeout = 0.001
         while timeout < 1.0:
diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py
index 0c31454..dd8981f 100644
--- a/Lib/test/test_cmd.py
+++ b/Lib/test/test_cmd.py
@@ -110,7 +110,7 @@
     5  12  19
     6  13
 
-    This is a interactive test, put some commands in the cmdqueue attribute
+    This is an interactive test, put some commands in the cmdqueue attribute
     and let it execute
     This test includes the preloop(), postloop(), default(), emptyline(),
     parseline(), do_help() functions
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index a1079a1..8fe21fb 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -97,7 +97,7 @@
         self.assertEqual(r.read(), "")
         self.assertEqual(r.bytebuffer, b"")
 
-        # do the check again, this time using a incremental decoder
+        # do the check again, this time using an incremental decoder
         d = codecs.getincrementaldecoder(self.encoding)()
         result = ""
         for (c, partialresult) in zip(input.encode(self.encoding), partialresults):
diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py
index 61e23fc..e4541fb 100644
--- a/Lib/test/test_email/test_email.py
+++ b/Lib/test/test_email/test_email.py
@@ -3037,7 +3037,7 @@
         # issue 1690608.  email.utils.formataddr() should be rfc2047 aware.
         name = "H\u00e4ns W\u00fcrst"
         addr = 'person@dom.ain'
-        # A object without a header_encode method:
+        # An object without a header_encode method:
         bad_charset = object()
         self.assertRaises(AttributeError, utils.formataddr, (name, addr),
             bad_charset)
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index bfb5699..95e3f04 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -1160,7 +1160,7 @@
         # test a /24 is summarized properly
         self.assertEqual(list(summarize(ip1, ip2))[0],
                          ipaddress.ip_network('1.1.1.0/24'))
-        # test an  IPv4 range that isn't on a network byte boundary
+        # test an IPv4 range that isn't on a network byte boundary
         ip2 = ipaddress.ip_address('1.1.1.8')
         self.assertEqual(list(summarize(ip1, ip2)),
                          [ipaddress.ip_network('1.1.1.0/29'),
@@ -1173,7 +1173,7 @@
 
         ip1 = ipaddress.ip_address('1::')
         ip2 = ipaddress.ip_address('1:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
-        # test a IPv6 is sumamrized properly
+        # test an IPv6 is summarized properly
         self.assertEqual(list(summarize(ip1, ip2))[0],
                          ipaddress.ip_network('1::/16'))
         # test an IPv6 range that isn't on a network byte boundary
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 54dd9da2..1f7e49c 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1328,7 +1328,7 @@
         except OSError as e:
             self.assertEqual(e.errno, errno.EBADF)
         else:
-            self.fail("%r didn't raise a OSError with a bad file descriptor"
+            self.fail("%r didn't raise an OSError with a bad file descriptor"
                       % f)
 
     @unittest.skipUnless(hasattr(os, 'isatty'), 'test needs os.isatty()')
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 16236ef..e100039 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -523,7 +523,7 @@
         result = urllib.request.urlretrieve("file:%s" % support.TESTFN)
         self.assertEqual(result[0], support.TESTFN)
         self.assertIsInstance(result[1], email.message.Message,
-                              "did not get a email.message.Message instance "
+                              "did not get an email.message.Message instance "
                               "as second returned value")
 
     def test_copy(self):
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py
index 212cf34..4313c1d 100644
--- a/Lib/test/test_weakref.py
+++ b/Lib/test/test_weakref.py
@@ -934,7 +934,7 @@
 class WeakMethodTestCase(unittest.TestCase):
 
     def _subclass(self):
-        """Return a Object subclass overriding `some_method`."""
+        """Return an Object subclass overriding `some_method`."""
         class C(Object):
             def some_method(self):
                 return 6