Doc: More duplicate word fixes (GH-136299)

diff --git a/Include/internal/mimalloc/mimalloc/types.h b/Include/internal/mimalloc/mimalloc/types.h
index a17f637..19e9322 100644
--- a/Include/internal/mimalloc/mimalloc/types.h
+++ b/Include/internal/mimalloc/mimalloc/types.h
@@ -481,7 +481,7 @@ typedef struct mi_segment_s {
   struct mi_segment_s* next;            // the list of freed segments in the cache (must be first field, see `segment.c:mi_segment_init`)
 
   size_t            abandoned;          // abandoned pages (i.e. the original owning thread stopped) (`abandoned <= used`)
-  size_t            abandoned_visits;   // count how often this segment is visited in the abandoned list (to force reclaim it it is too long)
+  size_t            abandoned_visits;   // count how often this segment is visited in the abandoned list (to force reclaim if it is too long)
   size_t            used;               // count of pages in use
   uintptr_t         cookie;             // verify addresses in debug mode: `mi_ptr_cookie(segment) == segment->cookie`
 
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 08ff413..ddd48b1 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -1829,7 +1829,7 @@ def test_r_1_replace(self):
 class StdStreamComparer:
     def __init__(self, attr):
         # We try to use the actual stdXXX.buffer attribute as our
-        # marker, but but under some test environments,
+        # marker, but under some test environments,
         # sys.stdout/err are replaced by io.StringIO which won't have .buffer,
         # so we use a sentinel simply to show that the tests do the right thing
         # for any buffer supporting object
diff --git a/Lib/test/test_dictcomps.py b/Lib/test/test_dictcomps.py
index 26b56da..a7a4621 100644
--- a/Lib/test/test_dictcomps.py
+++ b/Lib/test/test_dictcomps.py
@@ -132,7 +132,7 @@ def test_star_expression(self):
 
     def test_exception_locations(self):
         # The location of an exception raised from __init__ or
-        # __next__ should should be the iterator expression
+        # __next__ should be the iterator expression
         def init_raises():
             try:
                 {x:x for x in BrokenIter(init_raises=True)}
diff --git a/Lib/test/test_setcomps.py b/Lib/test/test_setcomps.py
index 0bb02ef..6fc5bb7 100644
--- a/Lib/test/test_setcomps.py
+++ b/Lib/test/test_setcomps.py
@@ -154,7 +154,7 @@
 class SetComprehensionTest(unittest.TestCase):
     def test_exception_locations(self):
         # The location of an exception raised from __init__ or
-        # __next__ should should be the iterator expression
+        # __next__ should be the iterator expression
 
         def init_raises():
             try:
diff --git a/Lib/test/test_zipfile/_path/test_path.py b/Lib/test/test_zipfile/_path/test_path.py
index 6961340..958a586 100644
--- a/Lib/test/test_zipfile/_path/test_path.py
+++ b/Lib/test/test_zipfile/_path/test_path.py
@@ -316,7 +316,7 @@ def test_mutability(self, alpharep):
     HUGE_ZIPFILE_NUM_ENTRIES = 2**13
 
     def huge_zipfile(self):
-        """Create a read-only zipfile with a huge number of entries entries."""
+        """Create a read-only zipfile with a huge number of entries."""
         strm = io.BytesIO()
         zf = zipfile.ZipFile(strm, "w")
         for entry in map(str, range(self.HUGE_ZIPFILE_NUM_ENTRIES)):
diff --git a/Misc/NEWS.d/3.10.0a3.rst b/Misc/NEWS.d/3.10.0a3.rst
index 3f3fb7e..6cf3db3 100644
--- a/Misc/NEWS.d/3.10.0a3.rst
+++ b/Misc/NEWS.d/3.10.0a3.rst
@@ -394,7 +394,7 @@
 somewhat obsolete, little used, and not tested. It was originally scheduled
 to be removed in Python 3.6, but such removals were delayed until after
 Python 2.7 EOL. Existing users should copy whatever classes they use into
-their code. Patch by Donghee Na and and Terry J. Reedy.
+their code. Patch by Donghee Na and Terry J. Reedy.
 
 ..
 
diff --git a/Misc/NEWS.d/3.12.0a5.rst b/Misc/NEWS.d/3.12.0a5.rst
index 5dc443b..b73bbfb 100644
--- a/Misc/NEWS.d/3.12.0a5.rst
+++ b/Misc/NEWS.d/3.12.0a5.rst
@@ -253,7 +253,7 @@
 .. section: Library
 
 Avoid potential unexpected ``freeaddrinfo`` call (double free) in
-:mod:`socket` when when a libc ``getaddrinfo()`` implementation leaves
+:mod:`socket` when a libc ``getaddrinfo()`` implementation leaves
 garbage in an output pointer when returning an error. Original patch by
 Sergey G. Brester.
 
diff --git a/Misc/NEWS.d/3.13.0a1.rst b/Misc/NEWS.d/3.13.0a1.rst
index 0a93cbc..0741eab 100644
--- a/Misc/NEWS.d/3.13.0a1.rst
+++ b/Misc/NEWS.d/3.13.0a1.rst
@@ -153,7 +153,7 @@
 .. section: Core and Builtins
 
 Guard ``assert(tstate->thread_id > 0)`` with ``#ifndef HAVE_PTHREAD_STUBS``.
-This allows for for pydebug builds to work under WASI which (currently)
+This allows for pydebug builds to work under WASI which (currently)
 lacks thread support.
 
 ..
diff --git a/Misc/NEWS.d/3.14.0b1.rst b/Misc/NEWS.d/3.14.0b1.rst
index 5847dea..041fbaf 100644
--- a/Misc/NEWS.d/3.14.0b1.rst
+++ b/Misc/NEWS.d/3.14.0b1.rst
@@ -1051,7 +1051,7 @@
 is set to true.  This makes using the context manager thread-safe in
 multi-threaded programs.  The flag is true by default in free-threaded
 builds and is otherwise false.  The value of the flag can be overridden by
-the the :option:`-X context_aware_warnings <-X>` command-line option or by
+the :option:`-X context_aware_warnings <-X>` command-line option or by
 the :envvar:`PYTHON_CONTEXT_AWARE_WARNINGS` environment variable.
 
 ..
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 5f91813..99408e6 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -821,7 +821,7 @@ future_add_done_callback(asyncio_state *state, FutureObj *fut, PyObject *arg,
            Invariants:
 
             * callbacks != NULL:
-                There are some callbacks in in the list.  Just
+                There are some callbacks in the list.  Just
                 add the new callback to it.
 
             * callbacks == NULL and callback0 == NULL:
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index e84278d..379c4d0 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -225,7 +225,7 @@ type_from_ref(PyObject *ref)
 }
 
 
-/* helpers for for static builtin types */
+/* helpers for static builtin types */
 
 #ifndef NDEBUG
 static inline int
diff --git a/Python/preconfig.c b/Python/preconfig.c
index 5b26c75..67b2d2f 100644
--- a/Python/preconfig.c
+++ b/Python/preconfig.c
@@ -700,7 +700,7 @@ preconfig_init_coerce_c_locale(PyPreConfig *config)
 
     /* Test if coerce_c_locale equals to -1 or equals to 1:
        PYTHONCOERCECLOCALE=1 doesn't imply that the C locale is always coerced.
-       It is only coerced if if the LC_CTYPE locale is "C". */
+       It is only coerced if the LC_CTYPE locale is "C". */
     if (config->coerce_c_locale < 0 || config->coerce_c_locale == 1) {
         /* The C locale enables the C locale coercion (PEP 538) */
         if (_Py_LegacyLocaleDetected(0)) {